Создание API RESTful с использованием Flask?
Сайт учебника Flask здесь говорит, что для создания RESTful API вы должны писать классы, расширяющие restful.Resource
, а затем добавьте их в API:
app = Flask(__name__)
api = restful.Api(app)
class HelloWorld(restful.Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
Тем не менее, я просмотрел довольно много учебников, которые просто используют функции с декоратором @app.route('/path')
, который я больше привык видеть в приложениях Flask. Например, здесь, они имеют:
@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
И здесь:
@app.route('/')
def api_root():
return 'Welcome'
В чем разница между использованием класса restful.Resource
и только украшенными функциями, если таковые имеются? Если нет различий, что я должен делать по соглашению для создания RESTful API?
Ответы
Ответ 1
Краткий ответ:
restful.Resource от расширения Flask-Restful, которое не является самим Flask. Учебник Мигеля использует Flask, чтобы написать спокойный интерфейс.
Длинный ответ:
Прежде всего, наряду с Flask, существует ряд расширений Flask. Хотя они работают вместе, они являются отдельными пакетами и написаны отдельными авторами. Flask-Restful является расширением Flask.
Учебник Мигеля объясняет, как вы можете создать успокоительный API, используя Flask.
Flask-Restful с целью избавить некоторых из нас от повторного изобретения колеса обещает превратить пользовательский класс (или пользовательскую структуру данных Python) в полноценный веб-сервис. Flask-RESTplus, ответвление от Flask-Restful, автоматически генерирует документацию API с помощью пользовательского интерфейса Swagger.
Кроме того, Flask также задокументировал использование MethodView, чтобы позволить разработчикам писать свои собственные API для отдыха. Параллельно Flask-Restless обещает превратить класс SqlAlchemy в полноценный веб-сервис.
Обновление (18/07/2016), flask-api превращает функцию/представление в расслабляющий интерфейс и разработано Томом Кристи, автором django restful framework.
Есть много дорог в Рим.
Ответ 2
Использование методов вместо классов может быстро запутываться, когда требуется множество конечных точек. Классы/ресурсы - лучший способ разделить и развязать логику. Кроме того, ваш код становится намного читабельнее и легче изменить/исправить
Использование flask-restful, вероятно, является лучшим способом, хотя мне будет нужно сделать некоторую работу, чтобы создать план для вашего api, настроить маршрутизацию, обработку параметров запроса и многое, что нужно каждому нормальному api, которое получает довольно раздражает.
Я построил эту облегченную структуру поверх фляжки-успокоительного, которая позволяет легко создавать спокойную apis, не беспокоясь о всей необходимой электропроводке, и просто сосредоточьтесь на определении вашего api и кодировании бизнес-логики. Вы можете проверить это здесь: https://github.com/sebastiandev/peach
Он больше ориентирован на базы данных NOSQL, но только потому, что прокси для базы данных, которая поставляется как по умолчанию, для mongodb, если вам нужен sql, вы можете просто сделать прокси для sqlachemy (или дождаться, пока я найду время для сборки она).
Ответ 3
#from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(debug=True)