使用 Flask 实现 RESTful API

简介

首先,安装Flask

假设那你已经了解RESTful API的相关概念,如果不清楚,可以阅读我之前写的这篇博客Designing a RESTful Web API.

Flask是一个使用Python开发的基于Werkzeug的Web框架。
Flask非常适合于开发RESTful API,因为它具有以下特点:

  • 使用Python进行开发,Python简洁易懂
  • 容易上手
  • 灵活
  • 可以部署到不同的环境
  • 支持RESTful请求分发

我一般是用curl命令进行测试,除此之外,还可以使用Chrome浏览器的postman扩展。

资源

首先,我创建一个完整的应用,支持响应/, /articles以及/article/:id。

可以使用curl命令发送请求:

响应结果分别如下所示:

路由中还可以使用类型定义:

上面的路由可以替换成下面的例子:

默认的类型为字符串。

请求REQUESTS

请求参数

假设需要响应一个/hello请求,使用get方法,并传递参数name

服务器会返回如下响应信息:

请求方法

Flask支持不同的请求方法:

可以使用如下命令进行测试:

不同请求方法的响应如下:

请求数据和请求头

通常使用POST方法和PATCH方法的时候,都会发送附加的数据,这些数据的格式可能如下:普通文本(plain text), JSON,XML,二进制文件或者用户自定义格式。
Flask中使用request.headers类字典对象来获取请求头信息,使用request.data获取请求数据,如果发送类型是application/json,则可以使用request.get_json()来获取JSON数据。

使用如下命令指定请求数据类型进行测试:

使用下面的curl命令来发送一个文件:

不同数据类型的响应结果如下所示:

注意Flask可以通过request.files获取上传的文件,curl可以使用-F选项模拟上传文件的过程。

响应RESPONSES

Flask使用Response类处理响应。

使用-i选项可以获取响应信息:

返回的响应信息如下所示:

mimetype指定了响应数据的类型。
上面的过程可以使用Flask提供的一个简便方法实现:

状态码和错误处理

如果成功响应的话,状态码为200。对于404错误我们可以这样处理:

测试上面的两个URL,结果如下:

默认的Flask错误处理可以使用@error_handler修饰器进行覆盖或者使用下面的方法:

即使API不需要自定义错误信息,最好还是像上面这样做,因为Flask默认返回的错误信息是HTML格式的。

认证

使用下面的代码可以处理 HTTP Basic Authentication。

接下来只需要给路由增加@require_auth修饰器就可以在请求之前进行认证了:

现在,如果没有通过认证的话,响应如下所示:

curl通过-u选项来指定HTTP basic authentication,使用-v选项打印请求头:

响应结果如下:

Flask使用MultiDict来存储头部信息,为了给客户端展示不同的认证机制,可以给header添加更多的WWW-Autheticate。

调试与日志

通过设置debug=True来开启调试信息:

使用Python的logging模块可以设置日志信息:

CURL 命令参考

选项 作用
-X 指定HTTP请求方法,如POST,GET
-H 指定请求头,例如Content-type:application/json
-d 指定请求数据
–data-binary 指定发送的文件
-i 显示响应头部信息
-u 指定认证用户名与密码
-v 输出请求头部信息
1 3 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部