Что означает стандартизированный тип мультимедиа в архитектуре REST?
Браузер не связан с конкретным веб-сайтом, поэтому, если завтра SO изменится, нам не нужно обновлять браузер, чтобы использовать новый сайт. Мы можем посетить переработанный сайт и заново узнать, как выполнять известные нам варианты использования. Я понимаю, что нет внеполосной информации, которая должна быть закодирована в браузере, чтобы мы, люди, могли использовать определенный веб-сайт.
Рой Т. Филдинг в REST API должен быть в гипертекстовых состояниях:
API REST следует вводить без каких-либо предварительных знаний, кроме начального URI (закладки) и набора стандартизированных типов мультимедиа, подходящих для целевой аудитории (то есть ожидается, что их поймет любой клиент, который может использовать API).
Разрабатывая какое-либо приложение для управления рецептами и используя REST API, клиент API может захотеть обновить это представление JSON ресурса получения:
{
"receipt":
{
"name": "Wan Tun Frito"
"Ingredients":
[
"Bread", "eggs", "pork sauce", "meat"
],
"time": 480
}
}
Затем, если мое понимание верно, у нас есть два варианта для клиента, использующего REST API:
Первый вариант:
- Пользователь может использовать API REST так же, как он использует веб-сайт. Это означает, что существует начальный URI, но браузер, вместо этого отображающий HTML, представляет ресурс пользователю в соответствии с его типом мультимедиа (т. Е. Формы для ресурсов JSON), и позволяет пользователю манипулировать представлением ресурса и отправлять изменения. Кроме того, браузер отображает элементы управления гипертекстом, представленные в представлении ресурса, если они позволяют пользователю перемещаться по приложению квитанции.
Таким образом, как описано выше, браузер не связан с сервером только из-за предшествующего знания протокола HTTP и самого типа носителя JSON. Вот как работает всемирная паутина, насколько я понимаю.
Но тип медиа JSON не содержит правил о том, как представить ресурс. Представление не подразумевается в представлении ресурса и не хранится на сервере. Пользовательский интерфейс - это ответственность клиентов при разделении задач в архитектуре клиент-сервер.
Если клиентское приложение хочет выделить имя чека при представлении его пользователю, его код должен быть связан с ресурсом JSON. Если мы изменим значение ключа "name": "Wan Tun Frito" на "title": "Wan Tun Frito" в ресурсе получения, приложение не сможет представить ресурс.
Второй вариант:
- Если пользователь API является закодированной программой, то он может обновить название какой-то квитанции. Затем его код должен знать о получении ресурса, а также о его структуре в нотации JSON. Это вне групповой информации, как я понимаю. Тогда это связано с этой внеполосной информацией в коде. Опять же, если мы изменим значение ключа "name": "Wan Tun Frito" на "title": "Wan Tun Frito" в ресурсе получения, клиент потерпит неудачу.
В любом случае, существует связь между кодом в клиенте и сервере, и есть внешняя информация для использования REST API, поэтому я не понимаю, что это значит, что клиент REST API должен вводиться без предварительные знания за пределами исходного URI (закладки) и набора стандартизированных типов носителей
Под стандартным типом мультимедиа подразумевается ли создание стандартного типа мультимедиа, отличного от JSON, для представления ресурса квитанций или это означает, что конкретная структура JSON, которую мы используем для представления для нашего ресурса квитанции, заранее известна клиенту и серверу?,
1 ответ
Я не понимаю, что это значит, что клиент REST API должен быть введен без предварительного знания, кроме первоначального URI (закладки) и набора стандартизированных типов носителей
Стандартизированные типы носителей означают типы носителей (рецепты для интерпретации байтов), которые имеют стандартное определение во многих организациях.
Примеры будут включать:
- текст / html
- Применение / JSON
- применение / JSON-патч + JSON
- изображение / JPEG
- Приложение / vnd.siren + JSON
Теперь, когда это может привести к путанице: не все эти типы медиа поддерживают гипертекст. application / json - совершенно удовлетворительный тип мультимедиа, но JSON не имеет встроенной поддержки гиперссылок, которые являются фундаментальным строительным блоком в сети. В спецификации нет ничего, что отличало бы ссылки от всего остального.
Поэтому, если вы хотите использовать JSON в качестве представления вашего ресурса и хотите иметь возможность ссылаться на другие ресурсы, вам нужно найти какой-то другой механизм для описания ссылок на универсальный клиент.
Одним из распространенных ответов является использование JSON-подобного медиа-типа, который имеет семантику для представления ссылок. Примеры этого включают
Все они имеют один и тот же базовый шаблон: вы читаете представление (которое описывает структуру данных), а затем гипермедиа часть спецификации описывает, как найти ссылки в этой структуре данных.
Дело в том, что, подобно HTML, браузер может быть реализован любым, кто знаком со спецификацией типа носителя, и этот браузер может использоваться с любым сервисом, который создает соответствующие представления.
Вам не нужно использовать чужой тип носителя - вы можете свернуть свой собственный. Но выбор общего позволяет вам использовать работу, которая уже была проделана.
Другой ответ - оставить представление в покое, но использовать веб-ссылки для описания взаимосвязей между ресурсами. Заголовок HTTP Link уже зарегистрирован, так что это, вероятно, ваш лучший выбор.