为Flask提供自定义Accept头路由支持
项目描述
描述
为Flask提供自定义Accept头路由支持。
特性
- 根据接受的MIME类型做出不同响应
扩展任何给定的端点以支持任何额外的媒体类型。
- 使用自定义媒体类型来对API进行版本控制
永远不要再在URI中放置/v1/。
- 简单API
又一个Flask装饰器。
文档
安装
安装
$ pip install flask-accept
快速入门
以下是一个示例Flask应用,它只接受text/html媒体类型
from flask import Flask
from flask_accept import accept
app = Flask(__name__)
@app.route('/')
@accept('text/html')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
当尝试访问没有有效Accept头的端点时
$ curl localhost:5000 -I
HTTP/1.0 406 NOT ACCEPTABLE
带有有效头的情况
$ curl localhost:5000 -I -H "Accept: text/html"
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
添加对现有端点的支持
根据我们之前的示例,我们可以添加对其他媒体类型的支持,如下所示
from flask import Flask, jsonify
from flask_accept import accept
app = Flask(__name__)
@app.route('/')
@accept('text/html')
def hello_world():
return 'Hello World!'
@hello_world.support('application/json')
def hello_world_json():
return jsonify(result="Hello World!")
if __name__ == '__main__':
app.run()
现在我们的hello_world端点支持JSON
$ curl localhost:5000 -I -H "Accept: application/json"
HTTP/1.0 200 OK
Content-Type: application/json
回退到默认端点
如果我们想要支持特定的媒体类型,但其他所有请求都回退到默认端点,我们可以使用accept_fallback如下所示
from flask import Flask, jsonify
from flask_accept import accept, accept_fallback
app = Flask(__name__)
@app.route('/')
@accept_fallback
def hello_world():
return 'Hello World!'
@hello_world.support('application/json')
def hello_world_json():
return jsonify(result="Hello World!")
if __name__ == '__main__':
app.run()
我们的 hello_world 端点仍然支持 JSON,但对于任何其他媒体类型(或未指定时)将回退
$ curl localhost:5000 -I
HTTP/1.0 200 OK
Content-Type: text/html
$ curl localhost:5000 -I -H "Accept: madeup/mediatype"
HTTP/1.0 200 OK
Content-Type: text/html
使用场景
Flask-Accept 的某些可能使用场景。
API 版本化
Flask-Accept 允许接受任何可能的媒体类型,包括 自定义供应商媒体类型。这对于仅使用 Accept 头部进行 API 版本化非常理想
from flask import Flask, jsonify
from flask_accept import accept
app = Flask(__name__)
@app.route('/')
@accept('application/vnd.your_vendor.v1', 'application/vnd.your_vendor.v2')
def hello_world():
return 'Hello World!'
@hello_world.support('application/vnd.your_vendor.v3')
def hello_world_v2():
return 'Goodbye cruel world.'
if __name__ == '__main__':
app.run()
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v1"
Hello World!
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v2"
Hello World!
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v3"
Goodbye cruel world.
与 Flask-RESTful 资源一起使用
可以将相同的功能应用于使用 Flask-RESTful 构建的 API
from flask import Flask, jsonify
from flask_accept import accept
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class HelloWorldResource(Resource):
@accept('application/vnd.your_vendor.v1', 'application/vnd.your_vendor.v2')
def get():
return 'Hello World!'
@get.support('application/vnd.your_vendor.v3')
def get_v2():
return 'Goodbye cruel world.'
api.add_resource(HelloWorldResource, '/')
if __name__ == '__main__':
app.run()
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v1"
Hello World!
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v2"
Hello World!
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v3"
Goodbye cruel world.
与 Flask-RESTPlus 资源一起使用
可以将相同的功能应用于使用 Flask-RESTPlus 构建的 API
from flask import Flask, jsonify
from flask_accept import accept
from flask_restplus import Resource, Api
app = Flask(__name__)
api = Api(app)
class HelloWorldResource(Resource):
@accept('application/vnd.your_vendor.v1', 'application/vnd.your_vendor.v2')
def get():
"""
The doc string showing in swagger
"""
return 'Hello World!'
@get.support('application/vnd.your_vendor.v3')
def get_v2():
return 'Goodbye cruel world.'
api.add_resource(HelloWorldResource, '/')
if __name__ == '__main__':
app.run()
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v1"
Hello World!
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v2"
Hello World!
$ curl localhost:5000 -H "Accept: application/vnd.your_vendor.v3"
Goodbye cruel world.
测试
要运行测试
python setup.py test
许可证
开源 MIT 许可证。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
flask_accept-0.0.6.tar.gz (4.4 kB 查看散列)
构建分布
flask_accept-0.0.6-py3-none-any.whl (3.8 kB 查看散列)
关闭
flask_accept-0.0.6.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | be48f7d805f1a9dadeabce0fd166404eda92da8d2cf1945237aff278238f4c70 |
|
MD5 | 12104e475169af6fbace0388d3314850 |
|
BLAKE2b-256 | 0a54de4111e7ef8450bbfec187cd8e066134b2b46df679b0ad59221fd421d26d |
关闭
flask_accept-0.0.6-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 4be4c34aa0a13bb56427e45426297858e3d189bebac415b88694e6489f61d1e0 |
|
MD5 | 38a2ed19eab75283cfa5c530933de9fb |
|
BLAKE2b-256 | 6149947363e334a62787e10b9ccc5ce3f3578866bf56704900b53054f2778d61 |