Продолжаем наше обучению языку python. 18-е практическое занятие, в которое входит:
- Проанализировать скорость работы API.
- Создать калькулятор JSON-RPC.
Задача 1. Создание документации к API
Добавьте документацию для ресурсов, которые реализовали в практической работе прошлого модуля.
Напишите спецификацию для api/books/ в формате YAML, а для api/authors/ — в формате JSON или Python-словаря.
Если в прошлом модуле вы использовали Flask-RESTX, можете применить возможности этой библиотеки по созданию Swagger-документации. Узнать о них подробнее можно в этой статье.
Первым делом, чтобы не подвергать изменениям предыдущую работу, я скопировал директорию app со всеми файлами в директорию нынешней практической работы (18) ../homework/hw1. И начал потихоньку прописывать спецификацию в формате YAML, для api/books/ и в конечном итоге у меня получился вот такой вот результат в браузере:
И даже все менюшечки там работают, делают запросы и получают какие-то ответы. Вот, для примера, менюшечка PATCH:
Теперь о трудностях: Я долго разбирался в форматах swagger документации, из лекций (раза четыре пересматривал) ничего не понял, ну или почти... Я не понимал логики работы swagger-файла, ни в YAML, ни в JSON форматах. Каков принцип построения этой документации?! Дошло случайно.
Мне нужно было реализовать ввод из строки браузера, а так же ввод данных для объекта Book()... И я читал документацию к swagger, и в интернетах искал. Но как сформулировать правильный запрос?! Х.З!!! И дошло до меня буквально случайно!
Теперь о вводе данных, как это реализуется:
И будет выглядеть в браузере вот так:
Весь код swagger уместился в одну строчку, в файле routers.py:
Ну и собственно, листинг моего файла спецификации swagger.yaml:
Ну вот, для эндпойнта /api/books написана спецификация swagger в формате YAML. Нужно теперь сделать для /api/authors, в формате JSON.
Как показало написание кода JSON не работает в @swag_from... Поэтому эту большую "портянку" пришлось разделить на маленькие кусочки, для каждого эндпойнта с его методами. Ну и как было положено написал для /api/books в формате YAML, а для /api/authors - JSON, и таки умудрился вместить оба формата в одну страницу:
JSON у меня получился вот таким:
А "портянку" YAML, я разбил на вот такие маленькие файлы и упрятал в отдельную директорию, по идее и JSON туда же нужно отправить... Что я в последствии и сделал...
Файл routers.py получился примерно таким...
Не знаю насколько это будет окончательный вариант первого задания, но основной смысл работы понятен.
Хотел было всю работу в статью записать, но уж больно длинные повествования получаются. Так что разделю на части...