Я разрабатываю веб-сервис RESTful с использованием WebApi, и мне было интересно, какие HTTP-ответы и тела ответов нужно возвращать при обновлении / создании объектов.
Например, я могу использовать метод POST для отправки некоторого JSON в веб-сервис, а затем создать объект. Рекомендуется ли затем установить для HTTP-статуса статус созданный (201) или ok (200) и просто вернуть сообщение, например «Новый сотрудник добавлен», или вернуть объект, который был отправлен изначально?
То же самое касается метода PUT. Какой HTTP-статус лучше всего использовать и нужно ли возвращать созданный объект или просто сообщение? Учитывая тот факт, что пользователь в любом случае знает, какой объект он пытается создать / обновить.
Есть предположения?
Пример:
Добавить нового сотрудника:
POST /api/employee HTTP/1.1
Host: localhost:8000
Content-Type: application/json
{
"Employee": {
"Name" : "Joe Bloggs",
"Department" : "Finance"
}
}
Обновить существующего сотрудника:
PUT /api/employee HTTP/1.1
Host: localhost:8000
Content-Type: application/json
{
"Employee": {
"Id" : 1
"Name" : "Joe Bloggs",
"Department" : "IT"
}
}
Ответы:
Ответ с созданным / обновленным объектом
HTTP/1.1 201 Created
Content-Length: 39
Content-Type: application/json; charset=utf-8
Date: Mon, 28 Mar 2016 14:32:39 GMT
{
"Employee": {
"Id" : 1
"Name" : "Joe Bloggs",
"Department" : "IT"
}
}
Ответ только с сообщением:
HTTP/1.1 200 OK
Content-Length: 39
Content-Type: application/json; charset=utf-8
Date: Mon, 28 Mar 2016 14:32:39 GMT
{
"Message": "Employee updated"
}
Ответ только с кодом состояния:
HTTP/1.1 204 No Content
Content-Length: 39
Date: Mon, 28 Mar 2016 14:32:39 GMT
UPDATE/INSERT ... RETURNING
вариант Postgresql для SQL. Это очень удобно, особенно потому, что сохраняет представление новых данных и запрос на обновленную версию на атомарном уровне.