Опубликовать в дизайне REST API

У меня сложилось впечатление, что Post in Rest означает «Создать». Но после прочтения спецификации http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5

Кажется, что это может быть больше, чем просто Создать? Это также было заявлено Stormpath в своих скринкастах по дизайну остальных API.

Согласно Stormpath, Post означает «Процесс», что может означать что угодно. Это правильный способ увидеть это?

Я могу инициировать настраиваемые действия для своих ресурсов, используя Post?


person Roger Johansson    schedule 02.09.2013    source источник
comment
При разработке службы RESTful сначала подумайте о своих ресурсах. Кто они такие? Затем подумайте о том, что с ними происходит: как они создаются? Кем? С какими данными? Кто может изменить их позже? С какими данными? Только тогда вы сможете выбрать правильный глагол HTTP.   -  person    schedule 02.09.2013
comment
Дело не в том, какой глагол использовать, а в том, что мне разрешено делать с помощью Post в соответствии со спецификацией. могу ли я делать другие вещи, кроме как просто создавать с помощью Post   -  person Roger Johansson    schedule 02.09.2013
comment
Просто помните, что POST не сохраняет и не идемпотент. Как клиент, вы не должны ожидать, что повторяющийся идентичный POST будет иметь идентичный результат. Если действие, которое вызывает запрос POST, может справиться с этим, все в порядке.   -  person    schedule 02.09.2013


Ответы (1)


Теоретически запрос POST должен пытаться создать или изменить какой-либо ресурс на сервере. Как указал @Tichodroma, идемпотентный запрос повлияет на это изменение только при первой отправке, но в остальном важно то, что запрос некоторое состояние на сервере будет изменен.

Более практично. Запросы POST часто используются, когда полезная нагрузка запроса слишком велика, чтобы поместиться в GET URI (например, при загрузке большого файла). Обычно это преднамеренное нарушение стандартов HTTP, чтобы избежать ответа 414 Request-URI Too Long.

С точки зрения многословия, я не знаю, нравится ли мне «процесс», потому что даже запрос GET обычно «обрабатывается», чтобы определить возвращаемый ресурс. Основное отличие на мой взгляд это изменение какого-то состояния на сервере.

person pieman72    schedule 02.09.2013