当前位置:首页 > Windows程序 > 正文

Flask学习之十三

2021-05-26 Windows程序

资源是 REST 架构方式的核心概念。在 REST 架构中,资源是程序中你要着重关注的事物。例如,在博客程序中,用户、博客文章和评论都是资源。

每个资源都要使用唯一的 URL 表示。
还是以博客程序为例,一篇博客文章可以使用 URL /api/posts/12345 表示,其中 12345 是这篇文章的唯一标识符,使用文章在数据库中的主键表示。
URL 的格式或内容无关紧要,只要资源的 URL 只表示唯一的一个资源即可。
某一类资源的集合也要有一个 URL。博客文章集合的 URL 可以是 /api/posts/,评论集合的URL 可以是 /api/comments/。
API 还可以为某一类资源的逻辑子集定义集合 URL。例如,编号为 12345 的博客文章,其中的所有评论可以使用 URL /api/posts/12345/comments/ 表示。

 

1.2 请求方法

技术分享

 如果资源不支持客户端使用的请求方法,响应的状态码为 405,返回“不允许使用的方法”。Flask 会自动处理这种错误。

 

1.3 请求和响应主体

一篇博客文章对应的资源可以使用如下的JSON表示:

{ "url": "", "title": "Writing RESTful APIs in Python", "author": "", "body": "... text of the article here ...", "comments": "" }

在这篇博客文章中,url、author 和 comments 字段都是完整的资源 URL。这是很重要的表示方法,因为客户端可以通过这些 URL 发掘新资源。

在设计良好的 REST API 中,客户端只需知道几个顶级资源的 URL,其他资源的 URL 则从响应中包含的链接上发掘。

 

1.4 版本

版本区分 Web 服务所处理的 URL。例如,首次发布的博客 Web 服务可以通过 /api/v1.0/posts/ 提供博客文章的集合。

 

 

2. 使用Flask提供 REST Web 服务

使用 Flask 创建 REST Web 服务很简单。
使用熟悉的 route() 修饰器及其 methods 可选参数可以声明服务所提供资源 URL 的路由。
处理 JSON 数据同样简单,因为请求中包含的JSON 数据可通过 request.json 这个 Python 字典获取,并且需要包含 JSON 的响应可以使用 Flask 提供的辅助函数 jsonify() 从 Python 字典中生成。

2.1 创建API蓝本

REST API 相关的路由是一个自成一体的程序子集,所以为了更好地组织代码,最好把这些路由放到独立的蓝本中。


API 蓝本的结构

|-flasky |-app/ |-api_1_0 |-__init__.py |-users.py |-posts.py |-comments.py |-authentication.py |-errors.py |-decorators.py

API 包的名字中有一个版本号。如果需要创建一个向前兼容的 API 版本,可以添加一个版本号不同的包,让程序同时支持两个版本的 API。

 

app/api_1_0/__init__.py:API 蓝本的构造文件

from flask import Blueprint api = Blueprint(api, __name__) from . import authentication, posts, users, comments, errors

 

app/__init__.py: 注册API蓝本

def create_app(config_name): # ... form .api_1_0 import api as api_1_0_blueprint app.register_blueprint(api_1_0_blueprint, url_prefix=/api/v1.0) # ...

 

2.2 错误处理

处理 404 和 500 状态码时会有点小麻烦,因为这两个错误是由 Flask 自己生成的,而且一般会返回 HTML 响应,这很可能会让 API 客户端困惑。为所有客户端生成适当响应的一种方法是,在错误处理程序中根据客户端请求的格式改写响应,这种技术称为内容协商。改进后的 404 错误处理程序,它向 Web 服务客户端发送 JSON 格式响应,除此之外都发送 HTML 格式响应。

app/main/errors.py: 使用HTTP内容协商处理错误

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71589.html