RESTful коды ответа HTTP

Я разрабатываю простой RESTful API и совершенно влюблен в то, насколько он минималистичен. Но я не уверен в правильных кодах ответа HTTP для различных ситуаций:

  1. неправильно сформированный запрос

  2. правильно сформированный запрос относится к ресурсу, который не существует

  3. ресурс успешно удалены

  4. ресурс успешно отредактированы

Я в настоящее время думая, что 1 будет 403 Forbidden; 2 будет 410 Gone; 3 и 4 будет 202 Accepted. Они звучат правильно?

5 ответов


для #1 403 предполагает, что ваше приложение поняло запрос, но не выполнит его (т. е. у текущего пользователя нет разрешения на это по какой-либо причине). Я думаю, что 400 плохих запросов могут иметь больше смысла в этом случае.

для #2-я бы подумал, что 404 будет иметь больше смысла, т. е. ресурс не найден, если ресурс действительно существовал в какой - то момент, а затем был удален, и в этом случае 410 было бы справедливо, но не многие клиенты знают, что делать с 410.

для #3 & #4-200 если вы успешно обработали удаление, 202 если удаление поставлено в очередь и будет обработано позже "вне диапазона".

RFC 2616 предоставляет отличные объяснения того, что означает каждый код ответа в довольно понятных терминах.


  1. 400
  2. 404
  3. 200
  4. 200
  5. 201 - ресурс успешно создан

1). 400-стандартный плохой запрос, 403 означает, что запрос отформатирован правильно, но вы не можете получить к нему доступ

2). 404 - a 410 означает, что ресурс существовал, но был преднамеренно перемещен

3). и 4). 200 если действие выполнено успешно к моменту отправки ответа, 202 если действие находится в ожидании. На практике 202, вероятно, для удаления действий (где они могут быть предметом рассмотрения), но вы можете или не хотите немедленно вернуться 200 в любом случае, поэтому он кажется фактически удаленным пользователю. Это вопрос дизайна имхо.


получить Ричардсон & Ruby книга - у него есть полезное приложение по вашему вопросу и требуется чтение в любом случае


Почему бы не использовать стандартный коды ответов http . Вы получите все оптимизации ( например, 303, 304 )/ инфраструктура для HTTP бесплатно .