2016-10-28 14 views
0

В REST Web Services у нас есть методы GET и DELETE.REST: В чем разница между GET и DELETE, когда мы можем реализовать ту же функциональность в обоих?

Обычно мы читаем GET, чтобы получить данные с сервера, такие как «getCountriesName», и DELETE используется для вызова ресурса, который удаляет определенный объект, например «removeOrganization».

Но если я реализую DELETE на «getCountriesName», он успешно возвращает название страны.

Итак, как оба разные? Любой сценарий в реальном времени?

+0

Кажется, что это плохая реализация больше всего. Технически это возможно, но это было бы очень запутанным, вот почему «ограничения» существуют. – vtortola

ответ

0

Тип используемого метода HTTP - это скорее соглашение и практика, которым необходимо следовать. Это дало бы неправильную информацию, когда API s подвергается воздействию внешних систем

Обратитесь к blog post для получения подробной информации

0

Глядя на Richardson Maturity Model, если вы стремитесь достичь, по крайней мере уровня 2 из REST, вам будете в конечном итоге с ресурсами (Country) и HTTP VERBS:

GET /api/countries/{id}

который также будет возвращать название страны, среди других параметров. Вы также можете подать запрос DELETE по поводу того же URL, при условии, что есть конечная точка, которая поддерживает это - в бэкэнд вы обычно будете иметь методы, которые позволят определенному HTTP VERB на них. Детали реализации зависят от языка, который вы используете, например, в C# у вас будет метод с большей частью одной и той же сигнатурой, но другой атрибут поверх него, например [HttpDelete]).

Мышление в терминах методов (getCountriesName/removeOrganization) не является RESTful вообще, а скорее SOAP/RPC.

+0

Это два примера, но вопрос в том, как DELETE отличается от GET? Если реализация одинакова для обоих? – fatherazrael

+0

Если реализация одинакова для обоих, должна быть какая-то ошибка; в методе 'GET' вы обычно извлекаете объект/ресурс через предоставленный идентификатор, в то время как в методе DELETE вы можете сделать то же самое в начале, но затем удалить его из DB/soft удалить его (обновить некоторые вид статуса) –

1

Это технически возможно, но если вы это сделаете, вы не будете следовать стандартам REST. Я бы порекомендовал использовать delete для удаления ресурсов и получить к ним запрос

+0

Значит, речь идет только о следующих стандартах. Это имеет значение только? Технически использование любого из них одинаково? – fatherazrael

+0

Да. Это технически то же самое. Однако, если вы используете стандарты, каждый будет знать, как назвать ваш API без проверки документации. Таким образом, это полезно в случае разоблачения API – jgou

1

Как ваша служба обрабатывает запросы, полностью зависит от вас. Вы могли бы в основном создавать новые ресурсы при получении GET запросов или удалять вещи с использованием OPTION, хотя я настоятельно рекомендую не делать этого, так как это не соответствует протоколу поддержки (HTTP в этом конкретном случае) и, таким образом, нарушает основные ограничения REST. Обратите внимание, что служба RESTful всегда должна adhere to and respect the supported protocols.

Согласно RFC 7231, одной из основных различий между GET и DELETE является, что последний один удаляет ассоциацию из данного ресурса и его функциональности, а также, что возвращаемый ответ не кэшировать. Это может или не может удалить данные физически, однако влияние на последовательные операции DELETE или GET состоит в том, что удаленный ресурс не может быть получен далее. Последовательный запрос DELETE выдается серверу независимо от предыдущего запроса. Если ресурс был удален ранее, служба должна уведомить клиента с ответом об ошибке propper 404 Not Found, если новый ресурс не был создан между двумя операциями удаления на том же ресурсе.

GET ответы, с другой стороны, являются кэшируемыми и, таким образом, могут сохранять работу на сервере, возвращая результат из предыдущего запроса непосредственно из кеша (прокси), а затем выдавая запрос на сервер. Это может быть мелкозернистым с настройками заголовка кэша propper.

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

  • Нет связанных вопросов^_^