Как разрешить клиенту получать все возможные атрибуты ресурса в контексте REST API? - PullRequest
1 голос
/ 26 мая 2011

Я создаю свой первый RESTful API (с ограничением гипермедиа).

Я не уверен, правильно ли я сформулировал вопрос, но вот пример.

Предположим, у меня был ресурс продукта:

/products/{id}

В ответе есть элемент product_type.

Возможные типы продуктов включают (отраслевые)

  1. Напольный дисплей
  2. Дисплей дампа
  3. Light Bulk
  4. ...

У меня вопрос: как клиенту лучше всего получить все возможные атрибуты для ресурса продукта?

Я подумал о раскрытии подресурса "Метаданные". Например:

product/metadata/type
product/metadata/status
product/metadata/material
product/metadata/color

... для каждого атрибута, который содержит N элементов.

Боюсь, что мое решение слишком тесно связано с коллекцией продуктов. Я ограничиваю списки атрибутов, которые могут быть использованы в другом контексте (коллекции).

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

Любые указатели будут с благодарностью.

1 Ответ

1 голос
/ 27 мая 2011

Как насчет простого возврата метаданных как части GET для этого ресурса?

Например, если я ПОЛУЧУ /products/123, я мог бы получить следующую полезную нагрузку в ответе (предполагая тип носителя JSON):

{
   "type" : "Floor Display",
   "color" : "Blue",
   "material" : "wood",
   ...
}

И так далее. Теперь, если вам нужно больше информации о каждом атрибуте, вы можете сделать каждый из них подчиненным ресурсом и возвращать URI, а не простые значения, которые я перечислил выше.

Edit:

Теперь, если вы хотите, чтобы клиент знал обо всех возможных значениях, это должно быть указано вне вашего ответа как часть документации по типу носителя. Не стоит использовать такую ​​информацию о «схеме» в своих ответах.

В том же духе ответ HTTP может возвращать коды типа 200, 404, 503 и т. Д., Но в ответе не перечислены все возможные коды и не определена их семантика. Это работа спецификации HTTP.

Я бы использовал тот же подход и определил структуру и семантику ваших типов мультимедиа в документации API и передавал только те значения, которые имеют отношение к ответу. Я не могу думать о какой-либо пользе от включения всех возможных значений непосредственно в ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...