Я создаю REST API с платформой API поверх Symfony.У меня есть эти сущности: Place
, Room
, Booking
.API Platform проделывает большую хорошую работу за кулисами и создает маршруты для подресурсов Place
, например places/{id}/rooms
, где комнаты - это набор Room
ресурсов.
Я пытаюсь выяснитьлучший / самый RESTful способ иметь расчетную дочернюю коллекцию Place
.В частности, я хотел бы маршрут для places/{id}/availability/{fromDate}/{toDate}
.Availability
- это вычисляемое свойство, которое зависит от совокупностей Booking
сущностей, поэтому должно рассчитываться для каждого запроса и не сохраняется нигде.
Мне кажется, что мои варианты:
- Создайте пользовательскую операцию / контроллер и сопоставьте ее с
itemOperation
в сущности Place
. - Создайте ресурс
AvailabilityDate
и добавьте свойство availability
в мой ресурс Place
это исключено из ORM и нормализации / денормализации и определяет службу фильтрации для доступности места.
Вариант 1 во многих отношениях кажется более простым, потому что я могу легко вернуть произвольную структуру данных из контроллера, но янеобходимо получить дополнительные параметры (fromDate и toDate) в контроллере, что кажется возможным только через конфигурацию swagger_context
(которую мне также необходимо определить для документации)
Вариант 2 кажется более RESTful, поскольку он имеет делос реальными ресурсами вместо произвольных структур данных.Документация может быть сгенерирована с помощью API Platform, но я действительно не хочу выставлять availability
как свойство Place
, потому что оно рассчитывается из других ресурсов и также в идеале должно быть ассоциативным массивом, где ключом является датаи некоторые другие соображения