Агрегированный дочерний ресурс в платформе API - PullRequest
0 голосов
/ 20 июня 2019

Я создаю REST API с платформой API поверх Symfony.У меня есть эти сущности: Place, Room, Booking.API Platform проделывает большую хорошую работу за кулисами и создает маршруты для подресурсов Place, например places/{id}/rooms, где комнаты - это набор Room ресурсов.

Я пытаюсь выяснитьлучший / самый RESTful способ иметь расчетную дочернюю коллекцию Place.В частности, я хотел бы маршрут для places/{id}/availability/{fromDate}/{toDate}.Availability - это вычисляемое свойство, которое зависит от совокупностей Booking сущностей, поэтому должно рассчитываться для каждого запроса и не сохраняется нигде.

Мне кажется, что мои варианты:

  1. Создайте пользовательскую операцию / контроллер и сопоставьте ее с itemOperation в сущности Place.
  2. Создайте ресурс AvailabilityDate и добавьте свойство availability в мой ресурс Placeэто исключено из ORM и нормализации / денормализации и определяет службу фильтрации для доступности места.

Вариант 1 во многих отношениях кажется более простым, потому что я могу легко вернуть произвольную структуру данных из контроллера, но янеобходимо получить дополнительные параметры (fromDate и toDate) в контроллере, что кажется возможным только через конфигурацию swagger_context (которую мне также необходимо определить для документации)

Вариант 2 кажется более RESTful, поскольку он имеет делос реальными ресурсами вместо произвольных структур данных.Документация может быть сгенерирована с помощью API Platform, но я действительно не хочу выставлять availability как свойство Place, потому что оно рассчитывается из других ресурсов и также в идеале должно быть ассоциативным массивом, где ключом является датаи некоторые другие соображения

...