С точки зрения REST, важно помнить о едином интерфейсе - у вас есть некоторый ресурс с представлением application/json
.Я могу GET
ваше представление и вносить в него локальные изменения, используя любой мой любимый инструмент.
Если я затем хочу предложить изменить ресурс, чтобы он соответствовал моему представлению, мы выбираем подходящий метод из протокола HTTP.Другими словами, все методы HTTP являются частью домена «транспортировать этот документ по сети».(Ссылка: Джим Уэббер, 2011 ).
Таким образом, поддержка «всех из них» - это реальный способ обеспечить максимально возможное количество универсальных клиентов для взаимодействия с вашими ресурсами.
PUT /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: application/json
Совершенно разумная отправная точка;у него есть несколько преимуществ - семантика идемпотентна , поэтому клиенты знают, что потерянный запрос может быть повторен, а HTTP PUT включает семантику для важных случаев использования, например, мы приняли ваше представление какЭто то, что позволяет снизить нагрузку на сеть.
PUT может быть неудачным выбором, когда представление намного больше, чем изменения.
PATCH /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: ????
Это совершенно разумный способ борьбы с небольшимименяется на большие представления.Вы отказываетесь от некоторых преимуществ PUT - с потерянными сообщениями теперь сложнее иметь дело.
PATCH /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: application/json
Ни в коем случае.application/json
не является форматом документа патча - у вас нет возможности узнать, какие изменения описываются таким представлением, без каких-либо внеплановых разногласий.
PATCH /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: application/vnd.example.patch+json
PATCH /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: application/prs.example.patch+json
Это «ОТДЫХ» способ сделать предыдущий бит;вы определяете пользовательский тип мультимедиа и документируете семантику, и тогда любой клиент, который реализует ваш тип мультимедиа, может использовать его.Доступны дерево продавцов и дерево тщеславия .Бит +json
- это суффикс структурного синтаксиса , который предлагает подсказку структуры для потребителей, которые не распознают базовый подтип.
PATCH /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: application/json-patch+json
PATCH /31E772D3-0157-4B52-8243-75EEAB946E65
Content-Type: application/merge-patch+json
Также отличный выбор, поскольку эти дватипы были стандартизированы в RFC 6902 и RFC 7936 ;у вас гораздо больше шансов, что клиент уже будет знать эти типы.
Клиент, который знает о HTTP PATCH , вероятно, также будет знать, как использовать метод OPTIONS, чтобы узнать, какие методы и патч форматов документов сервер готов к обработке.
OPTIONS /31E772D3-0157-4B52-8243-75EEAB946E65
HTTP/1.1 204 No Content
Allow: OPTIONS, GET, HEAD, PUT, PATCH
Accept-Patch: application/prs.example.patch+json, application/json-patch+json, application/merge-patch+json