REST vs SOAP

от автора

Лучшее из описаний разницы между подходами REST и SOAP нашлось в книге "Zend Framework: разработка веб-приложений на PHP". Спешу поделиться с хабровчанами, чтобы вы были вооружены на тот случай, если вас спросят о разнице между REST и SOAP на вечеринке собеседовании.

Для начала, взгляните разницу между пакетами запроса и ответа SOAP и REST. Вот пакеты запроса и ответа SOAP:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope"  xmlns:ns1="http://rpc.geocoder.us/Geo/Coder/US/"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance"  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body>  <ns1:geocode>    <location xsl:type="xsd:string">1600 Pennsylvania Av, Washington, DC</location>  </ns1:geocode> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope   xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance"  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body>  <geocodeREspose xmlns="http://rpc.geocoder.us/Geo/Coder/US/">  <geo:results soapenc:arrayType="geo:GeocoderAddressResult[1]"   xsl:type="soapenc:Array"   xmlns:geo="http://rpc.geocoder.us/Geo/Coder/US/">  <geo:item xsl:type="geo:GeocoderAddressResult" xmlns:geo="http://rpc.geocoder.us/Geo/Coder/US/">     <geo:number xsl:type="xsd:int">1600</geo:number>    <geo:lat xsl:type="xsd:float">38.898748</geo:lat>    <geo:street xsl:type="xsd:string">Pensylvania</geo:street>    <geo:state xsl:type="xsd:string">DC</geo:state>    <geo:city xsl:type="xsd:string">Washington</geo:city>    <geo:zip xsl:type="xsd:int">20502</geo:zip>    <geo:suffix xsl:type="xsd:string">NW</geo:suffix>    <geo:long xsl:type="xsd:float">-77.037684</geo:long>    <geo:type xsl:type="xsd:string">Ave</geo:type>    <geo:prefix xsl:type="xsd:string">  </geo:item> </geo:results> </geocodeResponse> </soap:Body> </soap:Envelope> 

Вот запрос и ответ REST:

GET http://geocoder.us/service/rest/geocode?address=1600+Pennsylvania+Ave,+Washington+DC 

<?xml version="1.0"?> <rdf:RDF  xmls:dc="http://purl.org/dc/elements/1.1/"  xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">  <geo:Point rdf:nodeID="aid47091944">    <dc:description>1600 Pensylvaia Ave NW, Washington DC 20502</dc:description>    <geo:long>-77.037684</geo:long>    <geo:lat>38.898748</geo:lat>  </geo:point> </rdf:RDF> 

А теперь, отличнейшее описание из книги:

Если на какой-нибудь вечеринке вам зададут вопрос об основных различиях между подходами SOAP и REST, а неподалеку будет находиться привлекательный представитель противоположного пола, вот ответ на этот вопрос:

  • SOAP активно использует XML для кодирования запросов и ответов, а также строгую типизацию данных, гарантирующую их целостность при передаче между клиентом и сервером. С другой стороны, запросы и ответы в REST могут передаваться в ASCII, XML, JSON или любых других форматах, распознаваемых одновременно и клиентом, и сервером. Кроме того, в модели REST отсутствуют встроенные требования к типизации данных. В результате пакеты запросов и ответов в REST имеют намного меньшие размеры, чем соответствующие им пакеты SOAP.
  • В модели SOAP уровень передачи данных протокола HTTP является «пассивным наблюдателем», и его роль ограничивается передачей запросов SOAP от клиента серверу с использованием метода POST. Детали сервисного запроса, такие как имя удаленной процедуры и входные аргументы, кодируются в теле запроса. Архитектура REST, напротив, рассматривает уровень передачи данных HTTP как активного участника взаимодействия, используя существующие методы НТТР, такие как GET, POST, PUT и DELETE, для обозначения типа запрашиваемого сервиса. Следовательно, с точки зрения разработчика, запросы REST в общем случае более просты для формулирования и понимания, так как они используют существующие и хорошо понятные интерфейсы HTTP.
  • Модель SOAP поддерживает определенную степень интроспекции, позволяя разработчикам сервиса описывать его API в файле формата Web Service Description Language (WSDL, язык описания веб-сервисов). Создавать эти файлы довольно сложно, однако это стоит затраченных усилий, поскольку клиенты SOAP могут автоматически получать из этих файлов подробную информацию об именах и сигнатурах методов, типах входных и выходных данных и возвращаемых значениях. С другой стороны, модель REST избегает сложностей WSDL в угоду более интуитивному интерфейсу, основанному на стандартных методах HTTP, описанных выше.
  • В основе REST лежит концепция ресурсов, в то время как SOAP использует интерфейсы, основанные на объектах и методах. Интерфейс SOAP может содержать практически неограниченное количество методов; интерфейс REST, напротив, ограничен четырьмя возможными операциями, соответствующими четырем методам HTTP.

ссылка на оригинал статьи http://habrahabr.ru/post/158605/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *