Кейс: API бронирования столиков
Вопрос
Ресторанный агрегатор хочет открыть партнёрам API бронирования столиков. Спроектируй основные эндпоинты и опиши важные решения.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Ресурсы: рестораны, слоты, бронирования
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 ошибок.