Программирование
Создание API-интерфейсов Python с помощью Flask, Flask-RESTPlus и Swagger UI
Как создать интерактивную панель управления API на Python?
Что такое Swagger UI?
Пользовательский интерфейс Swagger - это инструмент для визуализации и взаимодействия с API, который автоматически создается с использованием спецификации OpenAPI. Он генерирует веб-страницу, которая помогает нам документировать различные API и взаимодействовать с ними.
Что такое Flask-RESTPlus?
Flask-RESTPlus - это расширение для Flask, которое поддерживает лучшие практики с минимальной настройкой. Он предоставляет набор декораторов и инструментов для описания API и предоставления его документации с помощью Swagger.
Установка
Вы можете установить Flask-RESTPlus с помощью pip
pip install flask-restplus
Минимальный API
from flask import Flask from flask_restplus import Api, Resource app = Flask(__name__) api = Api(app) @api.route('/hello/') class HelloWorld(Resource): def get(self): return "Hello World" if __name__ == '__main__': app.run()
Сохраните этот файл как app.py
(или любое другое имя файла по вашему желанию), перейдите в терминал и введите python app.py
(т.е. python <filename>.py
), чтобы запустить программу.
Если при развертывании вы получите следующую ошибку:
from werkzeug import cached_property ImportError: cannot import name 'cached_property'
Добавьте эту строку перед импортом flask_restplus:
import werkzeug werkzeug.cached_property = werkzeug.utils.cached_property
Теперь запустите браузер и перейдите в http://localhost:5000
, и вы должны увидеть этот экран:
Это экран пользовательского интерфейса Swagger. Он позволяет просматривать все конечные точки, а также тестировать API с помощью кнопки Попробовать.
Вы также можете просмотреть содержимое файла Swagger, посетив http://localhost:5000/swagger.json
. Файл Swagger, созданный для приведенного выше кода, выглядит следующим образом:
{ "swagger": "2.0", "basePath": "/", "paths": { "/hello/": { "get": { "responses": { "200": { "description": "Success" } }, "operationId": "get_hello_world", "tags": [ "default" ] } } }, "info": { "title": "API", "version": "1.0" }, "produces": [ "application/json" ], "consumes": [ "application/json" ], "tags": [ { "name": "default", "description": "Default namespace" } ], "responses": { "ParseError": { "description": "When a mask can't be parsed" }, "MaskError": { "description": "When any error occurs on mask" } } }
Получение параметров запроса
Вы можете получить параметры, переданные во время вызова API, используя reqparse
from flask import Flask from flask_restplus import Api, Resource, reqparse app = Flask(__name__) api = Api(app) parser = reqparse.RequestParser() parser.add_argument('name', help='Specify your name') @api.route('/hello/') class HelloWorld(Resource): @api.doc(parser=parser) def get(self): args = parser.parse_args() name = args['name'] return "Hello " + name if __name__ == '__main__': app.run()
В приведенном выше коде parser.parse_args()
возвращает словарь с ключом в качестве имени аргумента и значением в качестве значения, переданного в запросе.
Это создает пользовательский интерфейс Swagger, как показано ниже:
Нажмите кнопку Попробовать, чтобы проверить API. Это приведет к следующему выводу:
Файл загружен
Чтобы использовать загрузку файлов, установите местоположение files
и введите FileStorage
from flask import Flask from flask_restplus import Api, Resource from werkzeug.datastructures import FileStorage app = Flask(__name__) api = Api(app) upload_parser = api.parser() upload_parser.add_argument('file', location='files', type=FileStorage) @api.route('/upload/') @api.expect(upload_parser) class UploadDemo(Resource): def post(self): args = upload_parser.parse_args() file = args.get('file') print(file.filename) return "Uploaded file is " + file.filename if __name__ == '__main__': app.run()
Пользовательский интерфейс Swagger, созданный для приведенного выше кода, будет следующим:
Параметры API
api = Api(app, version='10.5', title='Flask Restplus Demo', description='Demo to show various API parameters', license='MIT', contact='Jimit Dholakia', contact_url='https://in.linkedin.com/in/jimit105', doc = '/docs/', prefix='/test' )
version
→ Версия API (для документации Swagger)
title
→ Название API (для документации Swagger)
description
→ Описание API (для документации Swagger)
license
→ Укажите лицензию для API (для документации Swagger)
license_url
→ Укажите URL-адрес страницы лицензии (для документации Swagger)
contact
→ Укажите контактное лицо (для документации Swagger)
contact_email
→ Укажите адрес электронной почты контактного лица (для документации Swagger)
contact_url
→ Укажите URL для контактного лица (для документации Swagger)
doc
→ Укажите путь к документации пользовательского интерфейса Swagger. По умолчанию '/'
prefix
→ Укажите префикс для всех конечных точек URL
Пользовательский интерфейс Swagger, созданный для приведенного выше кода, выглядит следующим образом:
использованная литература
Ресурсы
Все фрагменты кода этой статьи доступны на моей странице GitHub.
Рекомендуемое чтение
Создание веб-API RESTful с использованием Flask и Python
Давайте подключимся
LinkedIn: https://www.linkedin.com/in/jimit105/
GitHub: https://github.com/jimit105
Twitter: https://twitter.com/ jimit105