Распространение типов носителей REST

Я просмотрел этот вопрос, который направлен на решение проблемы взрыва медиа-типа REST. Одно из предложений заключалось в создании медиа-типа, описывающего коллекцию всего. Так, например, у нас может быть application/vnd.collection+json, который представляет собой коллекцию с четко определенной семантикой, которая может содержать список ссылок на другие ресурсы:

{
    "size": "3"
    "elements": [
         { "href" : "http://my.api.com/resource/1" },
         { "href" : "http://my.api.com/resource/2" },
         { "href" : "http://my.api.com/resource/3" }
     ]
}

Я знаю, что можно уменьшить болтовню, включив встроенные представления ресурсов. Как «универсальный» медиа-тип для списков достигнет этого? Не меняется ли семантика списка в зависимости от того, какой встроенный ресурс находится внутри него? Это особенно актуально, если встроенные ресурсы имеют разные правила обработки (которые в идеале должны передаваться типом носителя). Было бы хорошо в этом случае разрешить внутриполосную информацию, которая описывает тип мультимедиа встроенного ресурса? Например, у нас может быть application/vnd.collection+json как для ссылок, так и для встроенных ресурсов, которые делают что-то вроде этого:

{
    "size": "3"
    "element-content-type": "application/vnd.link+json" 
    "elements": [
         { "href" : "http://my.api.com/resource/1" },
         { "href" : "http://my.api.com/resource/2" },
         { "href" : "http://my.api.com/resource/3" }
     ]
}

и если он содержит встроенный ресурс:

{
    "size": "3"
    "element-content-type": "application/vnd.resource+json" 
    "elements": [
         { 
             "id": "1"
             "name": "Cool Resource" 
         },
         { 
             "id": "2"
             "name": "Awesome Resource" 
         },
         { 
             "id": "3"
             "name": "Super Awesome Resource" 
         }
     ]
}

Предполагается, что application/vnd.link+json и application/vnd.resource+json также были задокументированы.


person Vivin Paliath    schedule 21.08.2014    source источник


Ответы (1)


Я подумал об этом еще немного и думаю, что на самом деле нормально включать такой тип содержимого. Причина в том, что мы уже делаем это. В HTML тег script имеет атрибут type, который может быть application/javascript или application/vbscript (например). Предоставляет браузеру подсказку о том, как обрабатывать содержимое этого тега. Точно так же я думаю, что Content-type в приведенном выше примере достигает той же цели: он сообщает клиенту, как обрабатывать элементы в коллекции.

Я хотел еще немного обновить этот ответ. Похоже, что еще один способ сделать это - использовать rel. По крайней мере, так это делает HAL. Вы можете создать объект rel с пространством имен с помощью кюри, чтобы в конечном итоге разрешить rel в URL-адрес, указывающий на документацию по этому ресурсу. Таким образом, у вас будет доступ к документации, которая расскажет вам все, что вам нужно знать о ресурсе (ах).

person Vivin Paliath    schedule 22.08.2014