Найти тему
Computer Pro

Документирование. Стандарты API часть 1

Оглавление

Продолжаем наше обучению языку python. 18-е практическое занятие, в которое входит:

  1. Создать документацию к API. (Тут будут использоваться наработки из предыдущей работы.
  2. Проанализировать скорость работы API.
  3. Создать калькулятор JSON-RPC.

Задача 1. Создание документации к API

Добавьте документацию для ресурсов, которые реализовали в практической работе прошлого модуля.
Напишите спецификацию для api/books/ в формате YAML, а для api/authors/ — в формате JSON или Python-словаря.
Если в прошлом модуле вы использовали Flask-RESTX, можете применить возможности этой библиотеки по созданию Swagger-документации. Узнать о них подробнее можно в этой статье.

Первым делом, чтобы не подвергать изменениям предыдущую работу, я скопировал директорию app со всеми файлами в директорию нынешней практической работы (18) ../homework/hw1. И начал потихоньку прописывать спецификацию в формате YAML, для api/books/ и в конечном итоге у меня получился вот такой вот результат в браузере:

-2

И даже все менюшечки там работают, делают запросы и получают какие-то ответы. Вот, для примера, менюшечка PATCH:

Если нажать на кнопочку Try it out, то можно частично или полностью изменить информацию о книге прямо отсюда, из браузера
Если нажать на кнопочку Try it out, то можно частично или полностью изменить информацию о книге прямо отсюда, из браузера

Теперь о трудностях: Я долго разбирался в форматах swagger документации, из лекций (раза четыре пересматривал) ничего не понял, ну или почти... Я не понимал логики работы swagger-файла, ни в YAML, ни в JSON форматах. Каков принцип построения этой документации?! Дошло случайно.

Мне нужно было реализовать ввод из строки браузера, а так же ввод данных для объекта Book()... И я читал документацию к swagger, и в интернетах искал. Но как сформулировать правильный запрос?! Х.З!!! И дошло до меня буквально случайно!

-4
-5

Теперь о вводе данных, как это реализуется:

-6

И будет выглядеть в браузере вот так:

-7

Весь код swagger уместился в одну строчку, в файле routers.py:

-8

Ну и собственно, листинг моего файла спецификации swagger.yaml:

-9
-10
-11
-12

Ну вот, для эндпойнта /api/books написана спецификация swagger в формате YAML. Нужно теперь сделать для /api/authors, в формате JSON.

Как показало написание кода JSON не работает в @swag_from... Поэтому эту большую "портянку" пришлось разделить на маленькие кусочки, для каждого эндпойнта с его методами. Ну и как было положено написал для /api/books в формате YAML, а для /api/authors - JSON, и таки умудрился вместить оба формата в одну страницу:

Вот такая получилась красота! Все менюшечки проверены: получают, создают, удаляют, изменяют...
Вот такая получилась красота! Все менюшечки проверены: получают, создают, удаляют, изменяют...

JSON у меня получился вот таким:

А "портянку" YAML, я разбил на вот такие маленькие файлы и упрятал в отдельную директорию, по идее и JSON туда же нужно отправить... Что я в последствии и сделал...

Файл routers.py получился примерно таким...

-15
-16
-17

Не знаю насколько это будет окончательный вариант первого задания, но основной смысл работы понятен.

Хотел было всю работу в статью записать, но уж больно длинные повествования получаются. Так что разделю на части...

ЗЫ. Данная работа несет чисто ознакомительный характер, это мой конспект по данной работе.

Ну вы знаете что делать, лайк, подписка, комментарий. Это все помогает продвинуть канал в поисковых системах Яндекса.


Да пребудет с вами СИЛА!