Я создал небольшой 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
}
}