Использует ли Delicious GET-запросы на создание вместо POST, и почему я не должен делать то же самое? - PullRequest
1 голос
/ 10 января 2012

Я смотрю на Delicious API и вижу следующую операцию для создания новой закладки:

https://api.del.icio.us/v1/posts/add?&url={URL}&description={description}

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

Я пишу свой собственный API прямо сейчас, и я думаю, что это невероятно - позволить пользователям взаимодействовать с API напрямую с URL.Но вы не сможете сделать это, если не разрешите операции CRUD через GET.

Итак, действительно ли Delicious выполняет операции CRUD через GET?Есть ли важная причина, по которой я не должен делать то же самое в своем API, или POST просто обязал CRUD предотвращать случайный вызов?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Случайный вызов является его частью;это то, что означает спецификация HTTP, когда речь идет о «идемпотентных» методах.Но вы можете утверждать, что то, что делает Delicious, на самом деле идемпотентно, если URL добавляется только один раз, независимо от того, сколько раз вы получаете.Но более важно то, что GET безопасен :

The important distinction here is that the user
did not request the side-effects, so therefore
cannot be held accountable for them.

С точки зрения дизайна интерфейса, вы хотите пользовательских агентов, чтобы сделать POST, PUT и DELETE более сложнымичем GET, или, по крайней мере, явно отличается, так что пользователи могут полагаться на это различие, чтобы подсказать, когда их действия могут вызвать изменение состояния ресурса, потому что они несут ответственность за эти изменения.Использование GET для внесения изменений, даже если идемпотент, размывает эту линию ответственности, особенно когда широко используются prefetchers .

1 голос
/ 10 января 2012

Это зависит от того, будете ли вы следовать принципам REST. GET для изменения вещей запрещен.Поэтому большинство людей говорят, что с REST использовать POST для изменений.

Однако есть разница между GET и POST.Согласно RFC GET запросы всегда имеют ответный ответ.А если вы используете POST, вам нужно следовать шаблону Redirect-After-Post.

Еще одно ограничение заключается в том, что URL-адреса могут иметь ограниченный размер.Так что GET будет работать только до тех пор, пока ваши входные данные достаточно короткие.Так что в восхитительном API есть ошибка.Вы не сможете добавить все возможные URL через параметр GET.

...