TGViewer
GetAnalyst - Навыки • Системный анализ • Бизнес-анализ GetAnalyst - Навыки • Системный анализ • Бизнес-анализ @getanalysts · 22.5K subscribers
Post #3274 4.22K
🐞 Разбор квиза по REST API - ошибки, которые допускают из-за отсутствия насмотренности и опыта 🐞

Пару дней назад я опубликовала вопросы с подвохами по REST API.

✅ Результаты тут

Как всегда, вижу сильный перекос голосов в сторону:
«а давайте всё сделаем через POST» 🙃

Но прежде чем вы начнёте спорить в комментариях, хочу сразу показать простой CRUD на примере управления данными о записи на приём к ветеринару.

Если это HTTP API без REST-подхода, то может получиться так:

POST /api/public/v1/appointments/create - создать запись

POST /api/public/v1/appointments/{id} - получить запись по id

POST /api/public/v1/appointments/list - получить список записей

POST /api/public/v1/appointments/{id}/update - редактировать запись (отменить)

POST /api/public/v1/appointment/{id}/delete - удалить запись


Почему это не REST?
❌ В URL используются глаголы, хотя их роль уже могут выполнять HTTP-методы: GET, POST, PUT, PATCH, DELETE.



Если делаете REST API, то запись того же CRUD будет выглядеть так:

POST /api/public/v1/appointments - создать запись

GET /api/public/v1/appointments/{id} - получить запись по id

GET /api/public/v1/appointments - получить список записей, не конкретная по id

PATCH /api/public/v1/appointments/{id} - редактировать запись (отменить)

DELETE /api/public/v1/appointments/{id} - удалить запись


Почему это ближе к REST?
✅ В URL нет лишних глаголов.
✅ Действие определяется HTTP-методом.
✅ URL описывает ресурс, а не команду.


*public — это название API. Его можно опустить, но на практике часто полезно сохранять, особенно в микросервисной архитектуре.


❗️Главное правило перед проектированием эндпоинтов RESTful API:
сначала распишите полный набор операций для одного ресурса по CRUD и проверьте, чтобы не было конструкций вроде: POST /objects/create.
Потому что здесь уже возникает дублирование смысла: POST = create, а create ещё раз написан в URL.

Это минимальное, чтобы уйти от HTTP API в сторону REST-а.



Итого, ключевые ошибки в тестировании:

👉 1. Запись на приём
Большинство выбрали верный вариант.
Но много голосов было и за:
❌ POST /appointments/create - это "масло-маслянное"
❌ POST /appointments/{id} - откуда возьмете id? он же присваивается после создания записи на сервере, в БД


👉 2. История записей
По сути это обычное получение списка записей на приём.
Большинство выбрали корректные варианты, но здесь важно помнить ещё одну вещь:
❗️В идеале нужно было в предложенных решениях добавить названия API:
/api/admin/v1
/api/public/v1

А я их благополучно скрыла от вас.


👉 3. Отмена записи
За DELETE - большинство голосов.
Но отмена записи — это чаще не удаление строки из БД, а изменение статуса.
Поэтому более точный вариант здесь — PATCH, если мы, например, меняем статус записи на cancelled.
DELETE иногда тоже встречается, но с точки зрения бизнес-смысла PATCH здесь обычно аккуратнее.


📌 Почему "все POST" это не REST?
“всё через POST” не доказывает автоматически, что API не REST,
но очень часто означает, что API игнорирует стандартную семантику HTTP и уходит в сторону RPC over HTTP — этот вывод следует из сочетания RFC 9110 и диссертации Филдинга
▫️ HTTP требует уважать семантику методов — RFC 9110
▫️ REST определяется наличием uniform interface и hypermedia constraints — Филдинг, 5.1.5 - “REST APIs must be hypertext-driven”.



Подробный разбор каждого варианта — на картинках к посту 🤝
🖼 Исходники картинок


Полезные материалы, связанные с решением:
📚 Шпаргалка по методам: GET, POST, PUT, PATCH, DELETE
📚 Примеры API с разбором структуры методов
📚 Структура URL в REST API
🩵 Проектирование REST API: спорные вопросы с проектов и собеседований на системного аналитика (и не только)

Пример HTTP API:
https://www.unisender.com/ru/support/api/common/bulk-email/
Пример REST API:
https://developers.avito.ru/api-catalog/job/documentation#operation/applicationsGetIds



#RestApiGA #VetCareGA (Tg | ВК | Max)
  • ❤ 24
  • 🔥 9
  • ⚡ 4
  • 🤩 1
More from @getanalysts
  1. Oct 3, 2026🎁🚀 GetAnalyst сегодня на Стачке: ищите Юлию и забирайте подарки Похоже, у GetAnalyst офи…
  2. Oct 2, 2026📌 [Доступ открыт до 6 октября] Асинхронная интеграция с ИИ-сервисом 📌 Один сквозной кейс…
  3. Oct 1, 2026🎓 Системный аналитик: с нуля до опыта работы на проекте [начинаем сегодня] 🎓 Сегодня, 1…
  4. Oct 1, 2026💫😱 IT никогда не станет прежним. Из-за AI. Несколько главных мыслей с The AI Conference…
  5. Sep 30, 2026🐞 HTTP-ошибки в интеграциях с внешними системами: как их обрабатывать 🐞 Что делать, если…
  6. Sep 29, 2026🔖 5 архитектурных стилей API, которые важно знать аналитику 📡 API определяет, как именно…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →