Продолжаем изучать курс python_advanced... Это домашнее задание, пожалуй, одно из самых непонятных. Не то чтобы очень сложное, но из описания того что нужно сделать и без понимания как работает Postman это задание оказалось наиболее туманно подано... Итак, задание:
Задача 1. TDD — разработка через тестирование
Заказчик составил для вас контракт веб-сервиса, который вы должны реализовать. Да ещё был так любезен, что написал для вас тесты. Ваша задача — создать такое API, чтобы все тесты прошли и функционал соответствовал ожиданиям.
Postman позволяет писать тесты на API. Чтобы тесты отработали корректно, нужно запускать их разом, так как в некоторых из них устанавливаются необходимые переменные.
Сервер должен вернуть код 200.
В ответе сервера должна содержаться строка roomId.
Ответ представляется в формате JSON такого вида:
Благодаря тому что я уже прошел курс по фреймворку Django, у меня есть небольшое понимание что такое "Заказчик составил для вас контракт веб-сервиса, который вы должны реализовать" - из описания к заданию.
То есть из этого:
Нужно сделать во первых приложение на Flask с тремя эндпойнтами: "/add-room", "/room", "/booking". Один эндпойнт будет отрабатывать GET-запрос, два других - POST. Плюс ко всему в контракте прописаны тесты на Java-script, их нужно реализовать в программе Postman. Что-то типа этого:
Но у меня пока что тесты не работают, надеюсь к концу статьи разобраться с этим
А в консоли (программа http, похожая на curl) - вот примеры запросов и ответов:
Ну и собственно получившийся у меня код:
Осталось понять как заставить работать тесты в Postman... Почти все тесты прошли с первого раза!
А теперь о главном! Оказывается, этот файл hotel-api.postman_collection.json можно было импортировать в Postman!!! А я то тесты ручками вписывал! Об этом же нельзя было сказать и показать в условиях к домашнему заданию! При том что под Manjaro Linux, 10я версия Postman не запускается, да и вообще Postman нет в официальном репозитории. А 9я версия почему-то отказалась принимать в себя hotel-api.postman_collection.json, говорит мол файлы у тебя не той системы!
Пришлось загружаться из под "Винды", а я уже начал забывать как ей пользоваться. Плюс ко всему под виндой ни пайчарма, ни пайтона - ничего для программирования не установлено! Зато есть дистриб ломанного Pycharm Professional!!! Его и установил.
И вот только под виндой, после танцев с бубном, файл hotel-api.postman_collection.json подхватился и все тесты запустились как надо, кроме одного...
Подумав немного, над тем почему не проходит один тест в эндпойнте /booking, и до меня дошло - тест ожидает получить код 409 а я ему предлагаю 404, поменял код возврата и все тесты прошли:
Ну, по идее на этом работа выполнена... Надеюсь...
Но, чуть погодя, я стал думать над тем как у меня написан эндпойнт /booking... Ведь по идее, чтобы забронировать номер нужно этот номер взять из таблицы rooms и перенести (скопировать и удалить) в другую таблицу, пусть которая будет именоваться как booking. А если бронь будет отменяться то выполнить обратные действия.
В итоге код букинга поменялся примерно до такого уровня:
Идём дальше...
Задача 2. Повышаем уровень зрелости
Заказчик не знает про модель зрелости API, да и вообще про принципы построения качественного API. Он это осознаёт, поэтому попросил вас помочь внести правки в контракт.
Найдите, что можно улучшить, и оформите это в виде Postman-коллекции, прокомментировав изменения в файле REPORT.md.
Определён текущий уровень зрелости.
Обращено внимание на названия endpoint и параметров.
Изменённый контракт оформлен в виде Postman-коллекции.
Все изменения в контракте обоснованы и записаны в REPORT.md.
Имеется разделение кода на отдельные независимые модули: модели, бизнес-логика, контроллер.
При работе с БД используются параметризованные запросы.
Названия переменных, функций и классов имеют значащие имена.
Было непонятно что тут нужно сделать, вроде бы черным по белому написано и местами даже не русском языке - но вот хоть убей не пойму что нужно сделать... Вроде бы и в чате что-то объясняли, но вот все равно - смотрю на это дело как баран на новые ворота. И как правило такие проблемы решаются "как-то вдруг", "бац, и понял!".
Во первых, нужно было определить уровень зрелости текущего проекта, у него второй уровень ибо используются:
- различные URI (endpoints)
- различные HTTP методы (GET, POST, DELETE, и др.)
Но нам нужно повысить проект до третьего уровня, в котором помимо описанных пунктов выше, будут еще и ссылки (URI) на действия с этим ресурсом.
Объединить получение списка комнат и добавление комнаты в один uri '/room' c разными методами (GET, POST)
Вынести id комнаты в uri room, например '/room/1', добавление букинга через uri комнаты
Добавить список букингов '/booking' и отдельную страницу букинга 'booking/<id>'
Добавить возвращаемым ресурсам ссылки на действия
При успешном создании ресурса будет возвращен код 201 Created
Получилось нечто такое:
Это не самый красивый и лучший вариант решения данной задачи, но пока так ибо это обучение и тут мы можем "косячить" и весь этот материал не руководство к действию а лишь пища для размышлений, дабы на ее основе построить своё решение задачи.
Ну и что-то я написал файле REPORT.md...
А так же создал новую postman-коллекцию:
Эту постман-коллекцию экспортировал в файл new_postman_collection.json
Ну вот, как-то так...
Эта домашняя работа еще не принята, если будут изменения - в комментариях отпишусь...