Краткое описание подхода к проектированию REST API для сервиса, аналогичного Яндекс.Такси: от простых методов к сложным, с учётом RESTful-структуры и выбора HTTP-методов.
Подход
- Начинать с простых методов (профили), затем добавлять расчёты, заказы и события.
- Использовать ресурсы и подресурсы:
/drivers,/passengers,/orders,/passengers/{id}/history. - Параметры пути — для идентификаторов, query-параметры — для фильтров.
Эндпоинты (базовый набор)
1. Профиль водителя
- GET
/drivers/{driver_id} - Ответ:
driver_id,name,phone_number,rating,car(модель, цвет, номер).
2. Профиль пассажира
- GET
/passengers/{passenger_id} - Ответ:
passenger_id,name,phone_number,rating.
3. История поездок пассажира
- GET
/passengers/{passenger_id}/history - Ответ: массив поездок с
ride_id,date,details(from, to, cost, route). Для больших списков — пагинация (?page=1&limit=10).
4. Расчёт стоимости и времени
- GET
/rides/estimations?from=...&to=... - Ответ:
estimation_id,cost,duration(секунды).estimation_idиспользуется при заказе, чтобы не пересчитывать.
5. Заказ такси
- POST
/orders - Тело:
estimation_id(опционально),from,to. - Ответ:
ride_id, данные водителя (driver_id,name,phone_number),status: "confirmed".
6. Отмена заказа
- DELETE
/orders/{ride_id} - Ответ: 204 No Content. В реальной системе часто делают логическое удаление (флаг
cancelled) и при необходимости PATCH для смены статуса.
7. События поездки
- GET
/events/{ride_id} - Ответ:
ride_id, массивeventsс полямиtype(driver_arrived, passenger_entered, position_changed, route_changed),timestamp,details. Клиент может опрашивать эндпоинт; альтернатива — WebSocket для стрима событий.
Нюансы
- HTTP-методы: GET — чтение, POST — создание заказа, DELETE — отмена (или PATCH для статуса).
- Хранение:
estimation_idна клиенте для повторного использования при заказе; история отменённых заказов — на сервере (логическое удаление). - Версионирование: в проде часто вводят префикс версии, например
/v1/drivers. - Ошибки: в реальном API нужны коды (404 для несуществующего driver_id, 4xx/5xx с телом ошибки).
Такой набор покрывает базовый сценарий: просмотр профилей, историю, расчёт, заказ, отмену и отслеживание статуса поездки через события.