Предположим, что я пишу сервис REST, намерение которого состоит в том, чтобы добавить новый элемент данных к системе.
Я планирую к POST к
http://myhost/serviceX/someResources
Предположим, что работы, какой код ответа я должен использовать? И какое содержание могло бы, я возвращаюсь.
Я смотрю на определения кодов ответа HTTP и вижу эти возможности:
200: Возвратите описание объекта или содержащий результат действия;
201: что означает СОЗДАННЫЙ. При значении *запрос был обработан и привел к новому создаваемому ресурсу. На недавно созданный ресурс может сослаться URI, возвращенный в объекте ответа с самым определенным URI для ресурса, данного полем заголовка Местоположения. Ответ ДОЛЖЕН включать объект, содержащий список характеристик ресурса и местоположения (местоположений), из которого агент пользователя или агент пользователя могут выбрать одно самое соответствующее. Формат объекта указан типом среды, данным в поле заголовка Типа контента. *
Последние звуки больше в соответствии со спецификацией Http, но я нисколько не ясен что
Ответ ДОЛЖЕН включать объект, содержащий список характеристик ресурса и местоположения (местоположений)
средства.
Рекомендации? Интерпретации?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19
Это просто разделенная двоеточием клавиша-значение.
ETag: "xyzzy"
Это могут быть текстовые данные любого типа - обычно я включаю JSON строку с идентификатором созданного элемента. Простота тестирования сама по себе делает его включение оправданным.
ETag: "{ id: 1234, uri: 'http://domain.com/comments/1234', type: 'comment' }"
В данном примере идентификатор, uri и тип создаваемого элемента являются "характеристиками и местоположением ресурса".
Я думаю atompub REST API является отличным примером спокойного сервиса. Смотрите фрагмент ниже из спецификации атомпба:
POST /edit/ HTTP/1.1
Host: example.org
User-Agent: Thingio/1.0
Authorization: Basic ZGFmZnk6c2VjZXJldA==
Content-Type: application/atom+xml;type=entry
Content-Length: nnn
Slug: First Post
<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<title>Atom-Powered Robots Run Amok</title>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<author><name>John Doe</name></author>
<content>Some text.</content>
</entry>
Сервер сигнализирует об успешном создании с кодом состояния 201. Ответ включает в себя заголовок Location, указывающий на URI записи члена Atom Entry, и представление этой записи в теле ответа.
HTTP/1.1 201 Created
Date: Fri, 7 Oct 2005 17:17:11 GMT
Content-Length: nnn
Content-Type: application/atom+xml;type=entry;charset="utf-8"
Location: http://example.org/edit/first-post.atom
ETag: "c180de84f991g8"
<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<title>Atom-Powered Robots Run Amok</title>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<author><name>John Doe</name></author>
<content>Some text.</content>
<link rel="edit"
href="http://example.org/edit/first-post.atom"/>
</entry>
Запись, созданная и возвращенная коллекцией, может не совпадать с записью, введенной клиентом в POSTed. Сервер MAY изменяет значения различных элементов во входе, таких как atom:id, atom:update и atom:author, и MAY выбирает удаление или добавление других элементов и атрибутов, или изменение содержимого элемента и значений атрибутов.
.