SOAP kontra REST

Original: http://xfront.com/SOAP-versus-REST/

Introduktion
I åratal har det funnits ett krig rasar mellan dem som förespråkar användning av SOAP för webbtjänster kontra dem som förespråkar använder REST. Det har varit en hel del desinformation. Denna uppsats presenterar fakta du behöver för att göra dina egna beslut.

Först, en snabb genomgång av SOAP och REST.

TVÅL
SOAP är ett sätt att utbyta meddelanden i ett nätverk, såsom Internet. SOAP ger en uppsättning av XML-element och attribut-en XML vokabulär-som du använder för att bygga ditt meddelande. Strukturen för en SOAP dokument är: “stora bilden” data i ett SOAP <Header> elementet, “detalj” data i ett SOAP <Body> element och ett SOAP <Kuvert> elementet som sveper båda. Folk hänvisar ofta till denna struktur som “ramverket SOAP-meddelande.”

SOAP-meddelanden utbyts mellan “SOAP noder.”

Mellan avsändaren av ett SOAP-meddelande och den slutliga mottagaren kan det finnas mellanliggande SOAP noder. De förmedlande noder får bara behandla elementen i huvudsektionen. Endast den slutliga mottagaren får behandla kroppen. Hur SOAP-meddelanden blir dirigeras till mellanhänder är utanför SOAP.

SOAP har en bearbetningsmodell. För att anpassa sig till SOAP specifikation måste en SOAP nod fungera på ett visst sätt. Varje SOAP element och attribut har en väl definierad innebörd och beteende; SOAP noder måste bearbeta SOAP XML vokabulär därefter. Således är SOAP hänvisas till som en “protokoll”.

Här är modellen SOAP bearbetning i ett nötskal: Varje XML-element i rubriksektionen kan riktas till en specifik mellanhand genom att fästa en SOAP roll attribut. En mellanhand kan lägga till, ta bort eller ändra några av de XML-element i sidhuvudet. Förmedlaren kan krävas för att bearbeta ett element genom att lägga ett SOAP mustunderstand attribut. En mellanhand som tar emot ett SOAP-meddelande, men inte förstår ett element i avsnittet header som den förväntas förstå, måste svara till avsändaren med ett SOAP-meddelande som innehåller en beskrivning av problemet. Ingår i SOAP XML vokabulär finns flera “fel” element som används för att beskriva problemet. Efter en mellanhand bearbetar ett XML-element i huvudet, kan förmedlaren bort elementet. Avsändaren av SOAP-meddelandet kan önska en samlingsrörselementet utföras längs hela vägen till den slutliga mottagaren. En SOAP relä attribut kan läggas till en header inslag att informera förmedlaren inte ta bort den.

En stor del av SOAP specifikationen behandlar specificera beteendet hos SOAP förmedlare. Om det inte finns några mellanhänder-vilket vanligtvis är fallet, då SOAP behandlingsmodellen är helt enkelt denna: validera att <Kuvert>, <Header> och <body> element är i SOAP namespace och sedan vidarebefordra dokumentet till lämplig domain-specifik tillämpning (det program som faktiskt kommer att behandla data).

SOAP använder HTTP. Innan ett SOAP-meddelande skickas, en HTTP-meddelande skapas, är webbadressen till destinations SOAP oden placeras i HTTP-huvudet och SOAP-meddelande placeras sedan inuti HTTP kroppen. Notera att SOAP-meddelandet är placerad inom ett HTTP-meddelande. Således finns det ett meddelande inom ett meddelande. HTTP är ett meddelandeprotokoll. SOAP är ett meddelandeprotokoll. Således finns det ett meddelandeprotokoll inom ett meddelandeprotokoll.

Ett SOAP-meddelande måste inte placeras inom en HTTP-meddelande, men det är det mest populära sättet att utbyta SOAP-meddelanden. Det är vanligtvis kallas “SOAP över HTTP.”

REST
REST är också ett sätt att göra saker på ett nätverk. Med REST varje punkt i nätverket identifieras av en webbadress. Objekten kallas “resurser.” Således är varje resurs identifieras av en URL. För att hämta en resurs, helt enkelt in webbadressen. Detta är känt som “Namnåtergång URL”. Den hämtade värdet kommer att vara en representation av resursen. Om du hämtade resursen med en webbläsare då representationen kommer sannolikt vara ett HTML-dokument; Om ditt program gjorde hämtningen då representationen kan vara ett XML-dokument. Varje typ av representation kallas en MIME-typ. HTML och XML är två MIME-typer. Det finns över 350 olika MIME-typer (SOAP är en av de MIME-typer). När du hämtar en resurs dereference dess URL-du kan ange vilken MIME-typ som du vill ta emot.

Du kan också uppdatera resurser. Till exempel när du använder din webbläsare för att fylla i ett webbformulär och tryck på knappen Submit, är de data du angett skickas till resursen, som uppdateras med dina data. Om det är ett program som används för att skicka uppdateringarna, kan den skicka dem i form av XML-dokument.

Formatet på de data som returneras från en hämta eller de data som skickas i en uppdatering är upp till dig. REST föreskriver inte vilket format-MIME-typ-att använda.

Det finns bara två parter i en vilsam utbyte; alltså, det är en punkt-till-punkt informationsutbyte.

REST använder HTTP. Innan den hämtar en resurs är ett HTTP-meddelande skapas; URL till resursen sätts in i HTTP-huvudet och HTTP-meddelande skickas till resursen; det finns ingen HTTP kropp. När du uppdaterar en resurs, är en HTTP-meddelande skapas; URL för resursen sätts in i HTTP-huvudet och HTTP kroppen innehåller data. HTTP headers har en väl definierad innebörd. Resurser bearbeta rubriker enligt deras mening. Således är HTTP ett “protokoll”.

Eftersom REST inte specificerar ett visst XML vokabulär, har den ingen bearbetningsmodell i betydelsen SOAP behandlingsmodellen; hur en REST resursprocesser uppdateringsdata är upp till resursen. Likaså hur en resurs bearbetar en hämtningsbegäran inte ordinerats. REST resurser överensstämmer med HTTP-protokollet, som är en bearbetning modell.

Recap
REST är ett sätt att interagera med resurser på ett nätverk. Varje resurs identifieras av en URL. För att hämta en resurs, derereference dess URL. Du kan också uppdatera resurser genom Namnåtergång resursen och skickar det uppgifter. REST föreskriver inte formatet-MIME-typ-av datautbyte.

SOAP kontra REST
SOAP är om att utbyta meddelanden mellan SOAP noder. REST handlar om att få information från resurser och uppdatera resurser med information.

SOAP ger en skelett XML vokabulär-en ram-som du använder för att bygga dina meddelanden. REST ger inte en XML vokabulär; när du vill uppdatera en resurs, kan uppgifterna vara i valfritt format som är lämpligt. Så, är SOAP uteslutande XML-baserat, medan REST informationsutbyte kan potentiellt vara i någon av de 350 + MIME-typer.

SOAP är ett protokoll-SOAP-specifikationen föreskriver hur SOAP-processorer ska bete sig vid mottagandet av ett SOAP-meddelande. Eftersom det inte finns någon REST XML vokabulär, inte REST inte föreskriva hur resurserna ska bearbeta informationen mottagits.

Ett SOAP-meddelande typiskt inbäddad i en HTTP-meddelande. Således måste en SOAP nod följer reglerna för HTTP samt reglerna för SOAP-specifikationen. REST informationsutbyte använder också HTTP. Således måste en REST resurs följer reglerna för HTTP.

En icke-SOAP XML-dokument kan innehålla samma data som ett SOAP-dokument.

Exempel
En FBI-agent får syn på en terrorist i Boston. Genom att använda hans trådlösa netbook han går in data i ett program och trycker sin Skicka-knappen. Med hjälp av data som matats in av agenten, ansöknings konstruktioner och sänder följande SOAP dokumentet till de nationella personer av intresse webbtjänst:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    <soap:Header>        <!-- Big Picture Data -->
        <code>3810</code>
        <location>
            <city>Boston</city>
            <state>MA</state>
        </location>
        <urgency>A1A</urgency>
    </soap:Header>
    <soap:Body>         <!-- Detailed Data -->
        <code>3810</code>
        <field-agent>********************</field-agent>
        <datetime>2010-04-21T15:37:00</datetime>
        <description>Terrorist spotted - Abdhul Bengandetti </description>
        <physical-characteristics>
           <sex>male</sex>
           <height>6"</height>
           <weight>180 pounds</weight>
           <hair-color>black</hair-color>
           <facial-hair>
               <mustache />
               <beard />
           </facial-hair>
        </physical-characteristics>
        <clothing>Traditional Arab ankle-length jillaba</clothing>
        <location>
            <steet-address>202 Boylston Ave.</street-address>
            <city>Boston</city>
            <state>MA</state>
        </location>
    </soap:Body>
</soap:Envelope>

Alternativt kan ansökan konstruera och sända följande icke-SOAP XML-dokument till de nationella personer av intresse webbtjänst. Observera att det innehåller samma data som SOAP dokumentet, men inte använder SOAP element och attribut; snarare, uteslutande använder den domänspecifika element och attribut:

<person-of-interest>
    <header>        <!-- Big Picture Data -->
        <code>3810</code>
        <location>
            <city>Boston</city>
            <state>MA</state>
        </location>
        <urgency>A1A</urgency>
    </header>
    <body>         <!-- Detailed Data -->
        <code>3810</code>
        <field-agent>********************</field-agent>
        <datetime>2010-04-21T15:37:00</datetime>
        <description>Terrorist spotted - Abdhul Bengandetti </description>
        <physical-characteristics>
           <sex>male</sex>
           <height>6"</height>
           <weight>180 pounds</weight>
           <hair-color>black</hair-color>
           <facial-hair>
               <mustache />
               <beard />
           </facial-hair>
        </physical-characteristics>
        <clothing>Traditional Arab ankle-length jillaba</clothing>
        <location>
            <steet-address>202 Boylston Ave.</street-address>
            <city>Boston</city>
            <state>MA</state>
        </location>
    </body>
</person-of-interest>

Med båda versionerna meddelandet behandlas av de nationella personer av intresse webbtjänst. Webbtjänsten inspekterar “stora bilden” data i rubriksektionen och sedan vidarebefordrar den till lämplig byråer-Boston Police Department, Massachusetts State Troopers, NSA, CIA, och FBI. Endast de federala organ har behörighet att se namnet på fältet medlet, så data i elementet är krypterad. Denna kryptering sker i både SOAP versionen och den icke-tvålversionen, och representeras av ****************.

Såvitt FBI agenten är berörda, Personer Intressanta webbtjänst är den slutliga mottagaren. Det faktum att webbtjänsten vidarebefordrar meddelandet till andra webbtjänster är transparent till agenten. Den Personer Intresse webbtjänst är inte en mellanhand. Snarare finns det en sekvens av punkt-till-punkt-börser: FBI-agent till personer av intresse, personer av intresse till Boston Police, personer av intresse för Massachusetts State Troopers, och så vidare.

Betrakta Boston Police webbtjänst. För att det ska bearbeta ovanstående SOAP versionen det måste vara en SOAP nod-det måste ha installerat en SOAP-kompatibel processor. SOAP-processorn kontrollerar att meddelandet överensstämmer med SOAP-specifikationen: det bekräftar att kuvertet, Header, och Body element tillhör SOAP namnrymden. SOAP processor räcker sedan ut dokumentet till en domän-specifik applikation, en terrorist-seende ansökan. Det är där den verkliga bearbetningen sker.

Hela poängen med något budskap eller informationsutbyte är att få ut budskapet / informationen i “händer” i företaget (ansökan) som behöver det och kommer att behandla den. Med SOAP ett extra steg uppkommer-ett SOAP-meddelande behandlas av ett SOAP-processor först och sedan meddelandet överlämnas till den enhet / program som faktiskt behandlar det. Med REST informationen levereras direkt till den enhet / ansökan för bearbetning. Således är en fråga att överväga: gör kostnaden för SOAP processor och fördröjningen införs motivera dess användning? Vilket värde-lägga ger det?

Recap
Med den icke-SOAP-version (dvs, REST-versionen), domänen specifika program-terroristen seende applikations direkt emot och omedelbart behandlar meddelandet.

Med SOAP meddelandet får till ansökan först efter en SOAP-processor har bearbetat den.

Meddelande Säkerhetskontroll
Säkerhet är ofta (miss) nämns som en distinguisher mellan SOAP och REST. Detta avsnitt ger dig fakta.

I ovanstående personer av intresse exempel värdet av krypteras för att säkerställa att endast vissa mottagare kan visa sitt värde. XML Encryption är en teknik som kan användas för att kryptera XML-dokument (hela dokumentet eller bara delar av den). XML Encryption kan appliceras på både SOAP dokument och icke-SOAP XML-dokument.

HTTP har en inbyggd krypteringsmekanismen så ofta är det inte nödvändigt att använda XML Encryption. När du gör ett köp på internet, är din transaktion säker eftersom datautbyte krypteras. Du kan märka URL börjar med https: // …, vilket tyder på att säker HTTP (https) används. Webbläsare visar ett hänglås på botten, att högra hörnet av fönstret visar att ditt köp genomförs på ett säkert sätt. Även HTTP redan ger inbyggd kryptering och det är ofta tillräckligt, det finns inget som hindrar dig från att även med hjälp av XML Encryption eller ens med hjälp av XML Encryption istället för säker HTTP.

XML digital signatur är en teknik som blir allt populärare som ett sätt att säkerställa att XML-meddelanden inte ändras i transit (detta kallas att säkerställa “integritet” av meddelandet). Denna teknik kan också användas med SOAP dokument och icke-tvål-XML-dokument. HTTP har en inbyggd integritetsmekanismen så ofta är det inte nödvändigt att använda XML digital signatur. Även HTTP redan ger inbyggd integritet och det är ofta tillräckligt, det finns inget som hindrar dig från att även använder XML digital signatur eller ens med hjälp av XML digital signatur istället för integritetsmekanismer tillhandahålls av HTTP.

För många webbtjänster säkerhet inbyggd i HTTP räcker.

Den WS- * teknik-XML Encryption, Digital signatur, och andra-utvecklas för XML-dokument. Ett SOAP dokument är ett XML-dokument så WS- * teknik kan användas med SOAP-dokument. De kan också användas med icke-tvål XML-dokument. Till exempel, de ovannämnda personer av intresse exempel visade XML-kryptering tillämpas på element i både SOAP versionen och den icke-SOAP-version.

Det finns en betydande diskussion bland webbtjänst utvecklare om komplexiteten i de WS- * teknik. Vissa hävdar att de är alltför tung vikt och lättare vikt alternativa tekniker ska användas i stället. Även om detta är en användbar diskussion är det inte relevant för SOAP kontra REST debatt. Den punkt som skall göras vanligt med SOAP kontra REST debatten är att WS- * teknik kan användas med både SOAP dokument och icke-SOAP XML-dokument.

Recap
När det gäller meddelandesäkerhet, finns det ingenting som kan göras med SOAP-dokument som inte kan också göras med icke-SOAP XML-dokument.

Sammanfattning
SOAP är en XML-vokabulär, avsett för användning med webbtjänster. En SOAP-processor är ett program som behandlar SOAP element och attribut enligt SOAP-specifikationen, och sedan händer det dokument över till en domänspecifik applikation. Med vila, är hela meddelandet områdesspecifik, och XML-dokumentet omedelbart bearbetas av domän-specifika tillämpningen. Således, med SOAP finns en viss förbehandling innan de kommer till domänspecifika program. Med REST uppgifterna kommer direkt till den domänen specifika program.

Säkerhet är ofta (miss) nämns som ett kännetecken mellan SOAP och REST. Detta dokument förklarar varför det är ogrundat. Varje XML säkerhetsteknik-XML Encryption, kan XML Digital Signature och andra-som kan tillämpas på ett SOAP-dokument också tillämpas på ett icke-SOAP XML-dokument.