Почему включение глагола действия в URI в реализации REST нарушает протокол?
Я нахожу необходимым понять, почему включение глаголов действия в URI нарушает протокол REST для синтаксиса URI? Когда я читаю следующую статью, я чувствую, что слишком много людей делают слишком много шума о глаголах, и что они должны делать больше шума о типах контента:
В идеальном мире клиентские браузеры будут поддерживать операции GET, POST, PUT и DELETE для запросов. Однако поддерживаются только GET и POST, это означает, что мы застряли, пытаясь определить операции, которые должны быть помещены и удалены, используя общие глаголы действия в URL, такие как view, create, edit и delete.
Как это нарушает дух остальных архитектурных принципов, и что является препятствием, которое вы испытываете, помещая что-то вроде "delete" в свой URL вместо использования "delete"?
2 ответа:
Единственная уважительная причина для руководства вокруг URIs-поощрять правильное использование остальных глаголов. Если запрос выполняет действие, соответствующее ожиданиям клиента в соответствии со стандартами HTTP, то на самом деле не имеет значения, что содержит url.
Именование URL-адресов на основе существительных делает естественным создание поведения, которое соответствует предполагаемой цели GET, PUT, POST и DELETE.
Когда вы вводите глаголы в URL-адрес, это может стать очень запутанным, потому что часто глагол http будет иметь противоречивое поведение по отношению к тому, что находится в URL. Правила REST говорят, что вы должны уважать глагол HTTP, но обычно url-адрес является более описательным, поэтому он может вводить в заблуждение.
Тот факт, что браузеры поддерживают только подмножество http-глаголов, на самом деле не имеет значения, потому что даже если у вас есть полный доступ ко всем http-глаголам, вы все равно должны иметь возможность моделировать другие глаголы, такие как печать, закрытие, подтверждение, отмена.Вы абсолютно правы в том, что людям нужно сосредоточиться. больше о типах контента, чем о структуре URL, когда речь идет о реализациях REST.
Обращение ваших URL-адресов к существительным - это не ограничение покоя, а поощрение людей к падению в яму успеха.
Отдых-это не протокол, а скорее стиль. Таким образом, вы можете делать все, что соответствует вашим требованиям.
Http-глаголы предпочтительны, если это возможно, поскольку они являются частью протокола HTTP и таким стандартом. Он также позволяет использовать существующие уровни безопасности и кэширования на стандартном веб-сервере, не создавая никакого специального промежуточного программного обеспечения.
REST предполагает, что мы должны использовать HTTP, а не добавлять слои абстракции, как это делают SOAP, RPC или CORBA. Добавление дополнительных глаголы или добавление их в URL-адрес можно рассматривать как, хотя и легковесную, абстракцию.
Однако, как вы справедливо заметили, они не всегда поддерживаются браузерами accross или некоторыми версиями Flash. Поэтому может потребоваться поместить их в URL-адрес в реальном мире, если вы получаете доступ со стороны клиента.
Вы должны внимательно посмотреть на это, хотя, как могут быть серьезные проблемы безопасности при выполнении удаления / положить поверх URL.
Я бы предположил, что глаголы GET POST PUT и DELETE подходят практически для любых нужд. Вам не нужны никакие новые глаголы или коды ответов, поскольку они предназначены для общего использования. Добавьте дополнительную информацию в Данные запроса и ответа.
Проверьте эту статью SO для получения дополнительной информации: понимание REST: глаголы, коды ошибок и аутентификация