Таким образом, общий шаблон для RESTful API - это возврат одного объекта со встроенными ссылками, которые вы можете использовать для извлечения связанных объектов. Но иногда для удобства вы хотите сразу отбросить целую кучу объекта-объекта.
Например, скажем, у вас есть приложение хранилища с клиентами, заказы и возвращает. Вы хотите отобразить личную информацию, все заказы и все возвраты вместе для идентификатора клиента 12345. (Предположительно, есть веские причины не всегда возвращать заказы и возвраты с личной информацией клиента.)
Чистый RESTful способ сделать это:
-
GET /
- возвращает список шаблонов ссылок, в том числе запрос для клиентов
-
GET /customers/12345
(на основе шаблона ссылки из/
)- возвращает персональную информацию клиента
- возвращает ссылки для получения этих заказов клиентов и возвращает
-
GET /orders?customerId=12345
(от ответа/customers/12345
)- получает заказы для клиента 12345
-
GET /returns?customerId=12345
(от ответа/customers/12345
)- получает доход для клиента 12345
Но было бы неплохо, если у вас есть URI customers
, чтобы иметь возможность вернуть все это в один запрос. Существует ли наилучшая практика для такого рода запросов удобства, где вы хотите перекрыть некоторые или все ссылки вместо того, чтобы делать несколько запросов? Я думаю что-то вроде:
GET /customers/12345?include=orders,returns
но если есть способ, которым люди это делают, я лучше не буду что-то делать.
(FWIW, я не строю магазин, поэтому не будем спорить о том, являются ли это подходящими объектами для модели или как вы собираетесь переходить к фактическим продуктам или что-то еще.)
Обновлено для добавления: Похоже, что в HAL говорят, что они называются "встроенными ресурсами", но в приведенных примерах нет Кажется, что нет способа выбрать, какие ресурсы встраивать. Я нашел одно сообщение в блоге, предлагая что-то вроде описанного выше, используя embed
в качестве параметра запроса:
GET /ticket/12?embed=customer.name,assigned_user
Является ли эта стандартная или полустандартная практика, или только что-то составило один блоггер?