Ответ вслух Middle REST API и OpenAPI обновлено

Кейс: API бронирования столиков

Вопрос

Ресторанный агрегатор хочет открыть партнёрам API бронирования столиков. Спроектируй основные эндпоинты и опиши важные решения.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Ресурсы: рестораны, доступные слоты и бронирования. GET /restaurants/{id}/slots?date=...&guests=... отдаёт свободное время.

Что должно прозвучать в ответе

  • Ресурсы: рестораны, слоты, бронирования

  • GET /restaurants/{id}/slots?date&guests, POST /bookings, GET /bookings/{id}, POST /bookings/{id}/cancel

  • Идемпотентность создания брони и конфликт при занятом слоте (409)

  • Статусная модель брони и вебхуки партнёру об изменениях

  • Аутентификация партнёров, лимиты, версия, OpenAPI

Что могут спросить следом

  • Как не допустить двойного бронирования одного стола?
  • Что делать, если ресторан подтверждает бронь вручную?

Разбор

Ресурсы: рестораны, доступные слоты и бронирования. GET /restaurants/{id}/slots?date=...&guests=... отдаёт свободное время. POST /bookings с рестораном, слотом, числом гостей и контактом создаёт бронь, обязательно с Idempotency-Key, ответ 201 и Location. Если слот уже занят, 409 с понятным кодом ошибки. GET /bookings/{id} для статуса, POST /bookings/{id}/cancel для отмены, 409 если отменять поздно. У брони статусы: ожидает подтверждения, подтверждена, отменена, гость не пришёл, а изменения отправляю партнёру вебхуком с подписью. Партнёры аутентифицируются по OAuth client credentials, у каждого лимит запросов. Всё в OpenAPI с примерами, версия в пути.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.