web.py体验
当我们谈用http作前后端交互的时候,我们在谈什么?
任何网站最重要的部分就是它的URL结构,在web.py中,我们是怎么建立网站的url结构的?就是要定义一个元组就可以了。
1 | urls = ( |
哦我明白了大概,第一个元素就对应着这个url连接所在的位置,就是url吗,相当于这个网站的目录。第二个就是在Python中映射的类。把http请求发送到这个网站,Python怎么处理,就是需要开发相应后面类的方法去作反映就可以了。
像上面这个urls的对应关系,那么久表示我们要URL/(首页)被一个叫作Index
的类处理。
那么web.py到底是怎么把这个网站应用建立起来的呢?
就是要这个
1 | app = web.application(urls, globals()) |
这条命令会告诉web.py
去创建一个基于我们刚提交的URL列表的application。这个application会在这个文件的全局命名空间中查找对应类。
所以在web.py这个包里,这个所谓的application,其实就是处理外部请求和处理方法交互的一个程序,这个web.application就是这个Web应用的引擎,他要一直运行着,它处理URL请求、调用相应的处理函数,并返回响应。
所以其实我需要开发的关键部分,就是urls中每个类的实现,这些类负责处理特定的HTTP请求,并定义应用程序的行为。
在web.py中,urls变量负责定义路径和处理这些路径的类和函数之间的映射关系,每个路径会对应着一个类,web.py会根据请求的URL来调用对应的处理逻辑。
1 | import web |
这里还有两个问题需要理解一下,用户可以访问urls中定义的路径,但这些路径不是直接指向PC上的文件或者目录,这些目录只是逻辑路径,并不是文件系统中的实际目录。这意味着,这些路径并不直接对应于磁盘上的某个文件夹或文件,而是由编写的Python类和方法来处理。例如,/hello
路径会由Hello
类的GET
方法来处理,而这个类是在内存中定义的。
本质上,访问或者http协议这些啊,都是发送请求再返回一类的。
浏览器访问一个网址并访问,实际上就是发出了一个GET
请求来请求网页内容。在web.py里,GET
方法对应的是处理GET
请求的类方法。当用户访问某个URL时,web.py会调用相应的类的GET
方法来生成并返回响应。
POST请求用于提交数据。
PUT请求用于更新资源。
DELETE请求用于删除资源。
RESTful API是一种基于REST(Representational State Transfer,表述性状态转移)架构风格的Web及服务接口。
REST是由Roy Fielding在他的博士论文中提出的架构风格。它是一种设计理念,并不是一种协议或技术规范。REST强调利用Web的基本功能(如HTTP方法)来设计简单、灵活的网络应用。
REST的核心原则包括:
- 无状态性,每次请求都必须包含完成请求所需的所有信息,服务器不储存任何客户端的状态。每次请求都是独立的,
- 客户端-服务器架构,客户端和服务器的职责分离
- 统一接口,通过HTTP请求和响应来进行交互
- 可缓存性,服务器可以通过响应头信息声明是否可以缓存响应
- 分层系统
- 按需代码,服务器可以在响应中提供可执行代码,让客户端根据需要动态加载
RESTful API是符合REST架构风格的API,它利用HTTP请求来操作资源。
在RESTful API中,资源是应用中可以被标识的实体,通常是通过URL来标识的。例如,用户、文章、商品等都可以是资源。
资源标识符的这个概念很有趣,就是说每个资源都有唯一的URL,例如
GET /users/123
:获取ID为123的用户信息
POST /users
:创建一个新用户
PUT /users/123
:更新ID为123的用户信息
DELETE /users/123
:删除ID为123的用户。
无状态性:每个请求都是独立的,服务器不会保存客户端的任何状态。客户端需要在每个请求中提供所有必要的信息(如认证信息、请求数据等)。
支持不同的响应格式:RESTful API 可以返回多种格式的响应数据,最常见的是 JSON 或 XML 格式。通常,服务器会在响应头中通过 Content-Type
指定响应格式。
RESTful API最重要的设计原则就是,以资源为中心:在RESTful API中,关注的是资源,而不是操作。资源通过URL进行标识。
HTTP方法的操作也要和动词相匹配:
GET
:获取资源
POST
:创建资源
PUT
:更新资源
DELETE
:删除资源
统一的 URL 格式:URL 应该是规范化的,避免复杂和不一致的路径设计。通常使用复数形式来表示资源。
- 示例:
- 获取所有用户:
GET /users
- 获取单个用户:
GET /users/{id}
- 创建新用户:
POST /users
- 更新用户信息:
PUT /users/{id}
- 删除用户:
DELETE /users/{id}
- 获取所有用户:
层次化设计:RESTful API 设计应支持层次结构,通过合理的 URL 设计来表示资源之间的关系。
- 示例:获取某个用户的所有文章:
GET /users/{id}/posts
要定义接口,那么就是可以列出一个表格:
操作 | 请求 URL | HTTP 方法 | 描述 |
---|---|---|---|
获取所有用户 | /users |
GET |
获取所有用户的列表 |
获取单个用户 | /users/{id} |
GET |
获取指定 ID 用户的详细信息 |
创建新用户 | /users |
POST |
创建一个新的用户 |
更新用户信息 | /users/{id} |
PUT |
更新指定 ID 用户的信息 |
删除用户 | /users/{id} |
DELETE |
删除指定 ID 用户 |
获取用户的文章 | /users/{id}/posts |
GET |
获取指定用户的所有文章 |
创建文章 | /users/{id}/posts |
POST |
创建指定用户的新文章 |