fix(http-api): общие данные для REST и RPC, ответы по спецификации - #15
Merged
Conversation
…ации Мок http-api работал в динамическом режиме, и данные брались у faker'а. Отсюда две проблемы, обе видны в уроках курса. Первая: данные не общие. Урок kinds сравнивает REST и RPC на одних и тех же задачах, но RPC отдавал три задачи из rpc.js, а REST при каждом запросе новую латинскую мешанину. Студент видел рядом несопоставимые ответы. Вторая: ответы не соответствовали спецификации. Модели объявляют uint16, то есть 0..65535, а приходило `"id":-39177245` и `"total":-33234336`. Динамический режим этого ограничения не знает. Теперь ответы берутся из примеров спецификации: моделям http-api добавлены `@example`, а prism для этой спецификации запускается без `-d`. Коды 404, 405, 422 и 401, на которых построены самостоятельные, статичный режим сохраняет. Набор задач вынесен в custom-server/src/data/tasks.js, чтобы у RPC и примеров спецификации был один текст, а не две копии в разных файлах. Примеры подогнаны под то, что уроки уже печатают: пользователи 1 и 2 совпадают с уроком example, токен /login с уроком authentication. Пользователь 1 это max@hotmail.com, под которым логинятся в самостоятельной, и посты принадлежат ему же, поэтому /posts и /users/1/posts не противоречат друг другу. Три остальные спецификации остаются на `-d`: примеров в них нет, и статичный режим отдал бы заглушки вместо данных. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…еквестах `make test` печатал «no tests». Между тем сломанную сборку в этом репозитории заметили только через десять дней, и заметили по тому, что на проде работает образ старее main. Прогон поднимает статичный мок и приложение и проверяет то, что уже ломалось незаметно: REST и RPC отдают один и тот же набор задач, коды 404, 405, 422, 401 и 201 на месте, ошибка RPC приходит в теле с кодом 200, числа в ответах не выходят за uint16. Расхождение между data/tasks.js и примерами спецификации валит прогон, то есть одну копию поправить молча нельзя. Caddy в прогоне не участвует, его нет в раннере. Мок и приложение опрашиваются напрямую по своим портам, как это делает Caddy, срезая префикс. Заодно сборка запускается на пуллреквестах. Публикацию образа это не задевает, у джобы deploy стоит условие на push. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Зачем
Мок
http-apiработал в динамическом режиме (-d), и данные генерировал faker. Из этого росли две проблемы, обе видны студенту в уроках курса HTTP API.Данные не общие. Урок
kindsсравнивает REST и RPC «на одних и тех же данных». На самом деле RPC отдавал три задачи изrpc.js, а REST — новую латинскую мешанину на каждый запрос:Ответы не соответствовали спецификации. Модели объявляют
uint16, то есть 0..65535, а приходило"id":-39177245,"total":-33234336,"limit":70134490. Динамический режим про это ограничение не знает. Два запроса к одному адресу давали разные ответы, аGET /tasks/1возвращал не задачу с идентификатором 1.Обнаружено при проверке деплоя по FEEDBACK-36.
Что сделано
http-apiдобавлены@example, а prism для этой спецификации запущен без-d. Ответы теперь берутся из примеров спецификации.custom-server/src/data/tasks.js— у RPC и примеров спецификации один текст, а не две копии в разных файлах.make testвместоecho no testsподнимает мок с приложением и проверяет ответы запросами.Примеры подогнаны под то, что уроки уже печатают, поэтому правка попутно делает верным существующий текст:
250-examplemax@hotmail.com/ Allison Bernier,Colt97@yahoo.com/ Hudson Schowalter),total: 10500-authentication/login400-kindsПользователь 1 это
max@hotmail.com, под которым логинятся в самостоятельной. Посты принадлежат ему же: статичный мок не умеет отбирать записи по пути, поэтому/postsи/users/1/postsотдают один список, и общий автор не даёт им противоречить друг другу.Что осталось как было
Три остальные спецификации (
http-protocol,js-playwright,postman) остаются на-dосознанно: примеров в них нет, и статичный режим отдал бы вместо данных заглушки вида"string". Их курсы не затронуты, проверено запросами.Пример запроса в
250-example/self_study.mdцитирует прежний faker-вывод с отрицательными числами и после этой правки станет неверным. Это правка курса, отдельным заходом.Проверка
Не только зелёным прогоном: собран образ и поднят контейнер, запросы шли через Caddy, как на проде.
Тест проверен на способность падать: правка одной задачи в
data/tasks.jsбез правки спецификации даёт два провала и выход с кодом 1.🤖 Generated with Claude Code