2014-09-17 1 views
8

У меня есть конечная точка запроса POST, где пользователь повторно публикует данные. Прежде чем вставлять данные в базу данных на основе пользовательского запроса, я проверяю, существует ли запись. - Если запись уже существует, я вернусь 200 OK с телом ответа, содержащего table_id и статусом - Если запись не существует, я создаю новую запись и вернуть 200 OK с телом ответа, содержащим table_id и статусомRESTful POST-запрос, если запись уже существует в данных POST, возвращаем ли мы 200 OK или 304 Not Modified?

В основном в обеих случаи, пользователь получает статус 200. Как пользователь, это может смущать, поскольку невозможно было отличить ли его новую запись или существующую запись.

Я думал, что верну 304 тело ответа и сообщите потребителю, что этот запрос «не изменен», таким образом, потребители приняли бы решение.

Является ли это хорошей практикой или существует альтернативный подход в принципах RESTful.

+0

Здесь я нахожу эту интересную тему [http-response-code-for-post-when-resource-уже существует] (https://stackoverflow.com/questions/3825990/http-response-code-for- после когда-ресурсы уже существует? RQ = 1). Какой из них желательно использовать 302 - НАЙДЕН, 303 - См. Прочее, 304 - Не изменено. 302 для меня больше смысла :-) –

+0

RFC [link] (https://tools.ietf.org/html/rfc7231#section-4.3.3) отмечает, что следует использовать 303 (см. Раздел «Прочее»). – Nullius

+0

Возможный дубликат [HTTP-кода ответа для POST, когда ресурс уже существует] (https://stackoverflow.com/questions/3825990/http-response-code-for-post-when-resource-already-exists) –

ответ

9

304 предназначен для использования только для условногоGET ответ, чтобы показать, что запрашиваемое содержание не изменилось с момента последнего времени клиент просил. Это не подходит для ответа POST.

Для POST ответа используйте 201, если создается новая запись, в противном случае использовать 200 или, может быть, вместо того, чтобы 409.

Смотрите следующие за полезные советы при проектировании REST API-интерфейсы:

Using HTTP 304 in response to POST

HTTP response code for POST when resource already exists

Creating an efficient REST API with HTTP

REST lesson learned: Avoid 204 responses

1

304 Not Modified будет использоваться, когда HTTP кэширования заголовков в игре, так что эта лань Не обращайтесь к вашему делу.

Я бы использовал 422 Unprocessable Entity, что касается ошибок проверки, когда запрос хорошо сформирован, но есть семантические ошибки.

И если запись ранее не существовала, вы должны ответить 201 Created (а не 200 OK), что является стандартным ответом на успешное создание ресурса (после запроса на создание POST).

Смежные вопросы