[英]Adjust Flask-Restful API to JSON API specification
我只用一种方法构建了一个小的 Flask-Restful API。 我的 API 接收一个单词和一个 URL 列表,并返回每个 URL 给定单词的出现次数。
from flask import Flask, request, jsonify
from flask_restful import Resource, Api
import sys
sys.path.append("..")
from word_count import WordCount
app = Flask(__name__)
api = Api(app=app)
class WordApp(Resource):
def get(self):
word = request.args.get('word')
url = request.args.get('url').split(",")
return {'data': WordCount(url, word).count_words()}
api.add_resource(WordApp, '/')
if __name__ == '__main__':
app.run(debug=False)
如果请求的资源调用成功,返回的内容为
{"data": {"foo": {"http://www.foobar.com": 42}}}
虽然,如果请求调用不成功,返回的内容不符合 JSON API,如文档中所述:
包括“状态”键将设置响应的状态代码。 如果未指定,则默认为 500。
错误内容:
{"message": "Internal Server Error"}
正如我搜索关于它,我发现这是可能的,以限定包含每个误差的字典,并将其传递给API对象。
errors = {
'INVALID_FIELD': {
'message': "Missing or invalid field",
'status': 400
}
}
app = Flask(__name__)
api = flask_restful.Api(app, errors=errors)
但是,使用 Postman 使用以下设置测试我的端点时,返回了相同的 500 错误消息。 我认为我在我的实现中遗漏了一些东西,以便返回我的自定义错误消息。
http://127.0.0.1:5000/?word=to
我想根据 JSON API 规范返回正确的自定义错误消息,如下所示:
{
"error": {
"message": "Missing or invalid field",
"code": 400
}
}
在有错误的字典中,您使用键INVALID_FIELD
。 但是,您不能自己选择此值。 如果您查看 werkzeug 文档https://werkzeug-docs-cn.readthedocs.io/zh_CN/latest/exceptions.html,您会看到每个异常都是一个类。
因此,您应该使用BadRequest
而不是INVALID_FIELD
,它是与错误代码 400 对应的类的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.