В чем разница между HTTP и REST?


303

После прочтения о различиях между REST и SOAP у меня сложилось впечатление, что REST - это просто другое слово для HTTP. Может кто-нибудь объяснить, какую функциональность REST добавляет в HTTP?

Примечание : я не ищу сравнение REST и SOAP.

Обновление : спасибо за ваши ответы. Теперь мне стало ясно, что REST - это просто набор правил использования HTTP. Поэтому я опубликовал продолжение о преимуществах этих конвенций .

Примечание : теперь я понимаю значение REST; Как отмечает Эмиль Иванов , REST означает использование HTTP таким, каким оно должно быть. Тем не менее, я не уверен, заслуживает ли это своего собственного термина, и я, конечно, не получаю шумиху вокруг этого.


45
Как примечание, вероятно, 90% ажиотажа, который вы слышите о REST в эти дни, происходят от людей, которые на самом деле не понимают полную картину о REST. К сожалению, REST стал модным словом в продаже. Вы должны преодолеть много дерьма, чтобы узнать реальные преимущества.
Даррел Миллер

7
Шумиха вокруг REST, вероятно, связана с тем, что SOAP сильно раздражает людей. Все просто счастливы избежать ада SOAP: D
aefxx

28
Думайте о HTTP как о мяче для игр, а REST как об особой игре, такой как футбол. Некоторые скажут, что футбол - лучшая игра, другие не согласятся. Почему это заслуживает своего собственного термина? Поскольку называть все игры с мячом, «игра с мячом» означает, что нет никакого способа определить, какой набор правил вы используете. Таким образом, все читают из одного и того же листа песни (извините, смешанная метафора)
Росс Дрю

1
Теперь у нас есть еще один вариант GraphQL по сравнению с REST. Оба используют HTTP.
Хунбо Мяо

1
@RossDrew отличная аналогия .. это облегчает понимание.
Anoop

Ответы:


221

Нет, REST путь HTTP должен быть использован .

Сегодня мы используем лишь небольшую часть методов протокола HTTP, а именно - GETи POST. Самый лучший способ сделать это - использовать все методы протокола.

Например, REST диктует использование DELETEдля стирания документа (будь то файл, состояние и т. Д.) За URI, тогда как в случае HTTP вы бы неправильно использовали a GETили POSTзапрос, подобный ...product/?delete_id=22.


23
И что было бы большим преимуществом использования этих других методов?
Дмитрий С.

7
Я разместил ссылку на пример из реального мира, который покажет вам преимущества. Приветствия.
aefxx

8
-1 за неправильное определение отдыха. Отдых - это тип архитектуры, а не способ отправки сообщений через Интернет. для получения дополнительной информации: en.wikipedia.org/wiki/Representational_state_transfer
Юваль Перельман

4
опять не так. REST НЕ является архитектурным принципом протокола http / 1.0. RESTful архитектура была изобретена намного позже. Функциональные возможности, предлагаемые протоколом http, соответствуют архитектуре REST, но эти 2 не зависят друг от друга. вопрос не в том, чтобы заново изобрести колесо, а в том, чтобы понять эти понятия
Юваль Перельман

4
@aefxx спасибо, я этого не знал и никогда не читал полную диссертацию. я бы поменял голосование на голосование, если бы оно не было заблокировано. у вас есть интересный способ обсуждения, вы можете просто дать мне ссылку и покончить с этим. шиш.
Юваль Перельман

94

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

REST означает, что основной концепцией, которую вы используете при разработке приложения, является ресурс: для каждого действия, которое вы хотите выполнить, вам нужно определить ресурс, на котором вы обычно выполняете только операцию CRUD, что является простой задачей. для этого очень удобно использовать 4 глагола, используемые в протоколе HTTP, против 4 операций CRUD (Get for Read, POST для CREATE, PUT для UPDATE и DELETE для DELETE). это отличается от более старой концепции RPC (удаленного вызова процедур), в которой у вас есть набор действий, которые вы хотите выполнить в результате вызова пользователя. если вы думаете, например, о том, как описать facebook как в сообщении, с помощью RPC вы можете создать службы с именами AddLikeToPost и RemoveLikeFromPost и управлять ими вместе со всеми другими службами, связанными с сообщениями FB, поэтому вам не нужно создавать специальные объект для лайка. с REST у вас будет объект Like, которым будут управлять отдельно функции Delete и Create. Это также означает, что он будет описывать отдельную сущность в вашей базе данных. это может показаться небольшой разницей, но такая работа обычно приводит к гораздо более простому коду и гораздо более простому приложению. при таком дизайне большая часть логики приложения очевидна из структуры (модели) объекта, в отличие от RPC, с которой вам обычно приходится явно добавлять гораздо больше логики.

Проектирование RESTful-приложения обычно намного сложнее, потому что оно требует простого описания сложных вещей. описание всех функций с использованием только функций CRUD довольно сложно, но после этого ваша жизнь станет намного проще, и вы обнаружите, что будете писать гораздо более короткие методы.

Еще одна существующая архитектура REST-ограничения - не использовать контекст сеанса при взаимодействии с клиентом (без сохранения состояния), то есть вся информация должна понимать, кто является клиентом и что он хочет, передается с веб-сообщением. каждый вызов функции является информативным, нет предыдущего разговора с клиентом, на который можно сослаться в сообщении. поэтому клиент не может сказать вам «дайте мне следующую страницу», так как у вас нет сеанса для сохранения того, что является предыдущей страницей и какую страницу вы хотите, клиент должен будет сказать «меня зовут yuval, получите мне страница 2 конкретного поста в конкретном форуме ". это означает, что в сообщении должно быть передано немного больше данных, но подумайте о разнице между обнаружением ошибки, сообщенной функцией "get me next page" вместо "

Конечно, есть еще много чего, но, на мой взгляд, это основные понятия в чайной ложке.


31

HTTP - это протокол приложения. REST - это набор правил, которые при соблюдении позволяют создавать распределенное приложение, имеющее определенный набор желательных ограничений.

Если вы ищете наиболее существенные ограничения REST, которые отличают RESTful-приложение от любого другого HTTP-приложения, я бы сказал, что ограничение «самоописание» и ограничение гипермедиа (иначе Hypermedia как движок состояния приложения (HATEOAS)) самое важное.

Ограничение самоописания требует, чтобы запрос RESTful был полностью информативным в намерениях пользователей. Это позволяет посредникам (прокси и кешам) безопасно работать с сообщением.

Ограничение HATEOAS касается превращения вашего приложения в сеть ссылок, где текущее состояние клиента основано на его месте в этой сети. Это сложная концепция и требует больше времени, чтобы объяснить, чем у меня сейчас.


19

Насколько я понимаю, REST обеспечивает использование доступных HTTP-команд так, как они должны были использоваться.

Например, я мог бы сделать:

GET
http://example.com?method=delete&item=xxx

Но с остальными я бы использовал метод запроса «DELETE», устраняя необходимость в параметре запроса «method»

DELETE
http://example.com?item=xxx

15

Не совсем...

http://en.wikipedia.org/wiki/Representational_State_Transfer

REST был первоначально описан в контексте HTTP, но не ограничивается этим протоколом. Архитектуры RESTful могут основываться на других протоколах прикладного уровня, если они уже предоставляют богатый и унифицированный словарь для приложений, основанный на передаче значимого состояния представления. Приложения RESTful максимизируют использование ранее существующего, четко определенного интерфейса и других встроенных возможностей, предоставляемых выбранным сетевым протоколом, и сводят к минимуму добавление новых специфичных для приложения функций поверх него.

http://www.looselycoupled.com/glossary/SOAP

(Простой протокол доступа к объектам) Стандарт для сообщений веб-служб. На основе XML SOAP определяет формат конверта и различные правила для описания его содержимого. Считается (с WSDL и UDDI) одним из трех основных стандартов веб-сервисов, это предпочтительный протокол для обмена веб-сервисами, но ни в коем случае не единственный; Сторонники REST говорят, что это добавляет ненужную сложность.


3
Кто сказал что-нибудь о SOAP?
Даррел Миллер

11
Парень, который задал вопрос .... «Прочитав много о различиях между REST и SOAP»
LiamB

8

REST - это особый подход к проектированию больших систем (таких как сеть).

Это набор «правил» (или «ограничений»).

HTTP - это протокол, который пытается подчиняться этим правилам.


Я бы сказал, что если вы используете HTTP в качестве транспорта для службы REST, эти правила легко соблюдать.
Абатищев

7

REST = представительский государственный трансферт

ОСТАЛЬНОЕ - это набор правил, которые при соблюдении позволяют создавать распределенное приложение, имеющее определенный набор желательных ограничений.

REST - это протокол для обмена любыми (XML, JSON и т. Д.) Сообщениями, которые могут использовать HTTP для передачи этих сообщений.

Особенности:

Он не имеет состояния, что означает, что в идеале не должно поддерживаться соединение между клиентом и сервером. Клиент несет ответственность за передачу своего контекста на сервер, а затем сервер может сохранить этот контекст для обработки дальнейшего запроса клиента. Например, сеанс, поддерживаемый сервером, идентифицируется идентификатором сеанса, переданным клиентом.

Преимущества безгражданства:

  1. Веб-службы могут обрабатывать каждый вызов метода отдельно.
  2. Веб-сервисы не должны поддерживать предыдущее взаимодействие с клиентом.
  3. Это в свою очередь упрощает дизайн приложения.
  4. HTTP сам по себе является протоколом без сохранения состояния в отличие от TCP, и поэтому веб-службы RESTful без проблем работают с протоколами HTTP.

Недостатки безгражданства:

  1. Один дополнительный слой в форме заголовка должен быть добавлен к каждому запросу, чтобы сохранить состояние клиента.
  2. В целях безопасности нам нужно добавлять информацию заголовка к каждому запросу.

Методы HTTP, поддерживаемые REST:

GET: / string / someotherstring Он идемпотентен и в идеале должен возвращать одинаковые результаты при каждом вызове

PUT: так же, как GET. Идемпотент и используется для обновления ресурсов.

POST: должен содержать url и body. Используется для создания ресурсов. Несколько вызовов в идеале должны возвращать разные результаты и создавать несколько продуктов.

УДАЛИТЬ: Используется для удаления ресурсов на сервере.

ГЛАВА:

Метод HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН возвращать тело сообщения в ответе. Мета-информация, содержащаяся в заголовках HTTP в ответ на запрос HEAD, ДОЛЖНА быть идентична информации, отправленной в ответ на запрос GET.

ПАРАМЕТРЫ:

Этот метод позволяет клиенту определять параметры и / или требования, связанные с ресурсом, или возможности сервера, не предполагая действия ресурса или не инициируя извлечение ресурса.

HTTP-ответы

Пойди сюда для всех ответов .

Вот несколько важных: 200 - OK 3XX - Требуется дополнительная информация от клиента и перенаправление URL 400 - Неверный запрос
401 - Несанкционированный доступ к
403 - Запрещено
Запрос был действителен, но сервер отклонил действие. Пользователь может не иметь необходимых разрешений для ресурса или ему может потребоваться какая-либо учетная запись.

404 - Не найдено
Запрошенный ресурс не найден, но может быть доступен в будущем. Последующие запросы клиента допустимы.

405 - Метод не разрешен Метод запроса не поддерживается для запрошенного ресурса; например, запрос GET для формы, которая требует представления данных через POST, или запрос PUT для ресурса, доступного только для чтения.

404 - Запрос не найден
500 - Внутренняя
ошибка сервера 502 - Ошибка неверного шлюза


5

HTTP - это коммуникационный протокол, который транспортирует сообщения по сети. SOAP - это протокол для обмена сообщениями на основе XML, который может использовать HTTP для передачи этих сообщений. Rest - это протокол для обмена любыми (XML или JSON) сообщениями, которые могут использовать HTTP для транспортировки этих сообщений.


Ваш ответ не отвечает на вопрос.
Анис

Ваше определение HTTP и SOAP было великолепным и прояснило вопрос для меня. Но я не верю, что Отдых - это протокол. Это архитектурное руководство, которое обеспечивает правильное использование транспортного протокола HTTP.
CapturedTree

5

HTTP is a contract, a communication protocol and REST is a concept, an architectural style который может использовать HTTP, FTP или другие протоколы связи, но широко используется с HTTP.

REST implies a series of constraints about how Server and Client should interact, HTTP is a communication protocol with a given mechanism for server-client data transferчаще всего используется в REST API только потому, что REST was inspired by WWW (world wide web) which largely used HTTPдо того, как был определен REST, проще реализовать стиль REST API с помощью HTTP.

There are three major constraints in REST (but there are more):

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

2.Сервер и клиент должны быть слабо связаны и не делать предположений друг о друге. Клиент должен знать только точку входа в ресурс. Данные о взаимодействии должны быть предоставлены сервером в ответе.

3.Сервер не должен хранить информацию о контексте запроса. Запросы должны быть независимыми и идемпотентными (то есть, если один и тот же запрос повторяется бесконечно, то получается один и тот же результат)

А HTTP - это просто протокол связи (инструмент), который может помочь достичь этого.

Для получения дополнительной информации проверьте эти ссылки:

https://martinfowler.com/articles/richardsonMaturityModel.html http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven


4

REST не обязательно привязан к HTTP . Веб-сервисы RESTful - это просто веб-сервисы, которые следуют архитектуре RESTful.

What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface

HTTP является 1-Client-server, 2-stateless, 3-casheable. Тогда какие дополнительные функции / ограничения REST накладывают на HTTP? Что мы можем сделать с REST, что нельзя сделать только с помощью HTTP?
Wafeeq

4

От Вы не знаете разницу между HTTP и REST

Таким образом, архитектура REST и протокол HTTP 1.1 независимы друг от друга, но протокол HTTP 1.1 был создан, чтобы быть идеальным протоколом, чтобы следовать принципам и ограничениям REST. Один из способов взглянуть на отношения между HTTP и REST состоит в том, что REST - это проект, а HTTP 1.1 - это реализация этого проекта.


2

API REST должны управляться гипертекстом

Из блога Рой Филдинг здесь множество способов , чтобы проверить , если вы строите HTTP API или REST API:

Разработчики API, обратите внимание на следующие правила, прежде чем называть свое создание REST API:

  • API REST не должен зависеть от какого-либо отдельного протокола связи, хотя его успешное отображение на данный протокол может зависеть от доступности метаданных, выбора методов и т. Д. В общем, любой элемент протокола, который использует URI для идентификации, должен позволять любая схема URI, которая будет использоваться для этой идентификации. [Ошибка здесь подразумевает, что идентификация не отделена от взаимодействия.]
  • API REST не должен содержать каких-либо изменений в протоколах связи, кроме заполнения или исправления деталей недостаточно определенных битов стандартных протоколов, таких как метод PATCH HTTP или поле заголовка Link. Обходные пути для неработающих реализаций (например, тех браузеров, которые достаточно глупы, чтобы полагать, что HTML определяет набор методов HTTP) должны определяться отдельно или, по крайней мере, в приложениях, с ожиданием того, что обходной путь в конечном итоге будет устаревшим. [Ошибка здесь подразумевает, что интерфейсы ресурса являются объектно-ориентированными, а не универсальными.]
  • API-интерфейс REST должен потратить почти все свои описательные усилия на определение типов носителей, используемых для представления ресурсов и управления состоянием приложения, или на определение имен расширенных отношений и / или разметки с поддержкой гипертекста для существующих стандартных типов носителей. Любое усилие, затрачиваемое на описание того, какие методы использовать с какими интересующими URI, должно быть полностью определено в рамках правил обработки для типа носителя (и в большинстве случаев уже определено существующими типами носителя). [Ошибка здесь подразумевает, что внешняя информация является движущей силой взаимодействия, а не гипертекста.]
  • API REST не должен определять фиксированные имена ресурсов или иерархии (очевидная связь клиента и сервера). Серверы должны иметь свободу управления своим собственным пространством имен. Вместо этого позвольте серверам инструктировать клиентов о том, как создавать соответствующие URI, например, в HTML-формах и шаблонах URI, определяя эти инструкции в типах мультимедиа и отношениях ссылок. [Ошибка здесь подразумевает, что клиенты принимают структуру ресурса из-за внеполосной информации, такой как специфичный для области стандарт, который является ориентированным на данные эквивалентом функциональной связи RPC].
  • REST API никогда не должен иметь «типизированных» ресурсов, значимых для клиента. Авторы спецификаций могут использовать типы ресурсов для описания реализации сервера за интерфейсом, но эти типы должны быть неактуальными и невидимыми для клиента. Единственные типы, которые важны для клиента, - это тип носителя текущего представления и стандартизированные имена отношений. [То же самое]
  • API REST следует вводить без каких-либо предварительных знаний, кроме начального URI (закладки) и набора стандартизированных типов мультимедиа, подходящих для целевой аудитории (то есть ожидается, что их поймет любой клиент, который может использовать API). С этого момента все переходы состояния приложения должны определяться выбором клиентом предоставленных сервером вариантов, которые присутствуют в полученных представлениях или подразумеваются манипуляциями пользователя с этими представлениями. Переходы могут быть определены (или ограничены) знаниями клиента о типах мультимедиа и механизмах обмена ресурсами, которые могут быть улучшены на лету (например, код по запросу). [Ошибка здесь подразумевает, что внешняя информация является движущей силой взаимодействия, а не гипертекста.]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.