RESTful сервисы и ответ со смешанными данными

Рейтинг: 2Ответов: 2Опубликовано: 09.04.2015

Есть сервер и есть клиент. Клиенту нужно получить от сервера список супермаркетов и акции которые на данный момент времени проходят в этих супермаркетах.

Раздумываю над выбором одного из вариантов:

  1. Сперва получить список всех супермаркетов
    GET http://myservice.com/shops
    Затем получить все скидки в этих супермаркетах
    GET http://myservice.com/shops/discounts
    (два запроса)
  2. Получить список супермаркетов и скидок за один раз
    e.q. GET http://myservice.com/shops_and_discounts
    (один запрос)

Не противоречит ли 2 способ принципам построения RESTful сервисов?
Или возможно лучше использовать 1 вариант?

Спасибо.

Ответы

▲ 2Принят

По идее endpoint http://myservice.com/shops уже должен включать в себя всю информацию о магазине, включая все привязанные к каждому магазину скидки, если вам действительно нужно отобразить все скидки ко всем магазинам на клиенте.

Однако, обычно большое множество не включается в тело родителя, а получается индивидуально для каждого конкретного объекта. То есть в вашем случае так: http://myservice.com/shops/{id}/discounts. Но такой способ не рекомендуется использовать, если нужно получить все скидки от всех магазинов за раз.

▲ 1

На мой взгляд лучше все данные получить одним запросом, даже если это противоречит REST принципам. Но так же вы можете в этот запрос

GET http://myservice.com/shops

На сервере засунуть всю необходимую информацию, а на клиенте либо показывать дискаунты либо нет.