Я создал небольшой API-интерфейс Flask-Restful только с одним методом. Мой 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, как описано в docs :
Включение клавиши «status» установит код статуса Ответа. Если не
указано, что по умолчанию будет 500.
Содержание ошибки:
{"message": "Internal Server Error"}
Когда я искал об этом, я обнаружил , что можно определить dict, содержащий каждую ошибку, и передать его объекту 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
}
}