2013-02-28 1 views
2

Я пытаюсь выяснить правильный ответ для магазина REST. Я хорошо осведомлен о соответствующем RFC 2616; соответствующая часть 9 Method DefinitionsПравильные коды возврата для магазинов REST

Теперь ...

Короткий вопрос:

Если создать ресурс с помощью POST или PUT, и не хотите, чтобы вернуть текущие данные о ресурсах, какой код должен я использовать? Хорошо? (Я сомневаюсь)

я описал, как я реализовал эти методы в JsonRestStore здесь: https://github.com/mercmobily/JsonRestStores/blob/master/jsonrest.md

ОК, вот длинная версия.

Стартовые точки:

  • PUT либо СОЗДАЕТ или перезаписывает ресурс (в зависимости от того, уже существует ресурс)
  • POST либо создает или изменяет ресурс (в зависимости от идентификатора передается [в «добавить к нему», то есть„POST проходит определенный идентификатор“], или не прошел [создать])
  • магазин не может вернуть ресурс, как это на сервере, или вернуть NO содержание

Так часто используются магазины. Да, вы можете передать идентификатор ресурса POST - это может показаться странным, но это делается для этого.

Вопрос 1: случай Поставив новый ресурс без возврата содержимого

RFC, говорит:

Если новый ресурс создан, сервер происхождения должен сообщить агенту пользователя через 201 (Создан). Если существующий ресурс изменен, коды ответов 200 (OK) или 204 (Нет содержимого) ДОЛЖНЫ быть отправлены, чтобы указать успешное завершение запроса.

  • ПРИМЕР 1: Существующий ресурс модифицируется путем PUT:
    • 200 (OK), если вы хотите, чтобы вернуть текущий ресурс
    • 204 (Нет содержимого), если вы хотите сказать, "OK" и ничего не вернуть.
  • СЛУЧАЙ 2: Новый ресурс создается
    • 201 (создан), если вы хотите, чтобы вернуть текущий ресурс
    • ??? Если вы не хотите ничего возвращать

Итак, что же, если вы создали новый ресурс, но не хотите, чтобы вернуть его текущее состояние на сервер? Можно ли вернуть 201 с содержимым EMPTY? Разве это не что-то для 204? Но тогда я не могу этого сделать, поскольку (согласно RFC) я должен return 201.

Вопрос 2: случай POSTting нового ресурса, без возврата содержимого

О отправки сообщения, RFC должен сказать:

Действие, выполняемое методом POST не может привести к ресурсу которые могут быть идентифицированы с помощью URI. В этом случае либо 200 (OK), либо 204 (без содержимого) - это соответствующий статус ответа, в зависимости от того, включает ли ответ объект, который описывает результат.

Если ресурс был создан на исходном сервере, ответ должен быть равен 201 (создан) и содержать объект, который описывает статус запроса и ссылается на новый ресурс, и заголовок местоположения (см. Раздел 14.30) ,

Если я принимаю, что вторая часть фактически не применяется к REST магазинов, так как POST всегда будет приводить к ресурсу, который является доступным как-то, я в конечном итоге с:

  • ДЕЛУ 1 : Существующий ресурс «прилагается к», AKA «POST с идентификатором» (ресурс НЕ создан)

    • ???? если вы хотите вернуть текущий ресурс
    • ??? если вы не хотите, чтобы вернуть текущий ресурс
  • СЛУЧАЙ 2: Новый ресурс создается (обычно без передачи идентификатора)

    • 201 (создан), если вы хотите, чтобы вернуть ток ресурс
    • ??? Если вы не хотите, чтобы вернуть текущий ресурс

Однако, если я решу интерпретировать RFC «Действие, выполняемое методом POST может не привести к (...)», как «Если вы делаете Поста добавить», которая является huuuuge растянуть, то я в конечном итоге с:

  • Случай 1: Существующий ресурс будучи„добавлен к“, АКА„ПОСТ с идентификатором“(ресурс не создан)

    • 200 (OK), если вы нт, чтобы вернуть текущий ресурс
    • 204 (Нет содержания), если вы не хотите, чтобы вернуть текущий ресурс
  • СЛУЧАЙ 2: Новый ресурс создается (обычно без передачи идентификатора)

    • 201 (создан), если вы хотите вернуть текущий ресурс
    • ???Если вы не хотите, чтобы вернуть текущий ресурс

Таким образом, даже при интерпретации RFC как широком смысле насколько это возможно, я до сих пор в конечном итоге с вопросом: если я создать ресурс, и не хотите вернуть текущие данные о ресурсах, какой код использовать? Хорошо? (Я сомневаюсь)

Bye,

Merc.

ответ

0

Я всегда возвращаю 201, где вам говорят, что вы должны вернуть его.

Примечание из собственной цитаты:

и содержать объект, который описывает состояние запроса

Заметим, что это не о том, что вы должны включить ресурс, как содержание. Просто объект, который описывает статус. Но если есть только один возможный статус, я не вижу проблемы с отсутствием контента.

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