SOAP vs REST (verschillen)

Ik heb artikelen gelezen over de verschillen tussen SOAP en REST als communicatieprotocol voor webservices, maar ik denk dat de grootste voordelen voor REST boven SOAP zijn:

  1. REST is dynamischer, het is niet nodig om UDDI (Universal Description, Discovery en Integration) te maken en bij te werken.

  2. REST is niet beperkt tot alleen XML-indeling. RESTful-webservices kunnen platte tekst/JSON/XML verzenden.

Maar SOAP is meer gestandaardiseerd (bijvoorbeeld: beveiliging).

Dus, heb ik het op deze punten juist?


Antwoord 1, autoriteit 100%

Helaas zijn er veel verkeerde informatie en misvattingen rond REST. Niet alleen uw vraag en het antwoord van @cmdweerspiegelen deze, maar de meeste vragen en antwoorden met betrekking tot het onderwerp op Stack Overloop.

SOAP en REST kunnen niet direct worden vergeleken, aangezien de eerste een protocol is (of dat in ieder geval probeert te zijn) en de tweede een architecturale stijl is. Dit is waarschijnlijk een van de bronnen van verwarring eromheen, aangezien mensen de neiging hebben om REST elke HTTP API te noemen die geen SOAP is.

Een beetje duwen en proberen een vergelijking te maken, het belangrijkste verschil tussen SOAP en REST is de mate van koppeling tussen client- en serverimplementaties. Een SOAP-client werkt als een aangepaste desktoptoepassing, nauw gekoppeld aan de server. Er is een rigide contract tussen client en server, en alles zal naar verwachting breken als een van beide partijen iets verandert. Je hebt constant updates nodig na elke wijziging, maar het is gemakkelijker om na te gaan of het contract wordt nageleefd.

Een rustclient is meer als een browser. Het is een generieke klant die weet hoe een protocol en gestandaardiseerde methoden te gebruiken, en er moet een applicatie binnenin passen. U schendt de protocolstandaarden niet door extra methoden te maken, u maakt gebruik van de standaardmethoden en maakt u de acties met hen op uw mediatype. Als het goed is gedaan, is er minder koppeling en kunnen wijzigingen sierder worden afgehandeld. Een client moet een rustdienst invoeren met nulkennis van de API, behalve het toegangspunt en het mediatype. In zeep heeft de klant vorige kennis nodig over alles wat het zal gebruiken, of het zal niet eens beginnen met de interactie. Bovendien kan een rustclient worden verlengd door code-on-demand die wordt geleverd door de server zelf, het klassieke voorbeeld is dat de JavaScript-code is gebruikt om de interactie met een andere dienst aan de klantzijde te besturen.

Ik denk dat dit de cruciale punten zijn om te begrijpen in welke rusten ongeveer, en hoe het verschilt van zeep:

  • REST IS PROTOCOL ONAFHANKELIJK. Het is niet gekoppeld aan HTTP. Vrijwel zoals je een FTP-link op een website kunt volgen, kan een rusttoepassing elk protocol gebruiken waarvoor een gestandaardiseerde URI-regeling is.

  • RUST is geen in kaart brengen van CruD naar HTTP-methoden. Lees dit antwoord voor een gedetailleerde uitleg over dat.

  • REST is zo gestandaardiseerd als de onderdelen die u gebruikt. Beveiliging en authenticatie in HTTP zijn gestandaardiseerd, dus dat is wat u gebruikt bij rust boven HTTP.

  • REST is geen REST zonder hypermediaen HATEOAS. Dit betekent dat een client alleen de URI van het ingangspunt kent en dat de bronnen verondersteld worden links te retourneren die de client zou moeten volgen. Die fraaie documentatiegeneratoren die URI-patronen geven voor alles wat je in een REST API kunt doen, slaan de plank volledig mis. Ze documenteren niet alleen iets dat de standaard zou moeten volgen, maar als je dat doet, koppel je de klant aan een bepaald moment in de evolutie van de API, en alle wijzigingen aan de API moeten worden gedocumenteerd en toegepast, of het zal breken.

  • REST is de bouwstijl van het web zelf. Wanneer u Stack Overflow binnengaat, weet u wat een gebruiker, een vraag en een antwoord zijn, kent u de mediatypen en de website biedt u de links ernaar. Een REST API moet hetzelfde doen. Als we het web zouden hebben ontworpen zoals mensen denken dat REST moet worden gedaan, in plaats van een startpagina met links naar vragen en antwoorden, zouden we een statische documentatie hebben waarin wordt uitgelegd dat om een vraag te bekijken, u de URI < moet nemen stackoverflow.com/questions/<id>, vervang id door Question.id en plak die in je browser. Dat is onzin, maar dat is wat veel mensen denken dat REST is.

Dit laatste punt kan niet genoeg benadrukt worden. Als uw klanten URI’s bouwen op basis van sjablonen in documentatie en geen koppelingen krijgen in de bronrepresentaties, is dat geen REST. Roy Fielding, de auteur van REST, maakte het duidelijk in deze blogpost: REST API’s moeten hypertext-gedreven zijn.

Met het bovenstaande in gedachten realiseert u zich dat terwijl rust niet beperkt is tot XML, om het correct te doen met een ander formaat dat u een formaat moet ontwerpen en standaardiseren voor uw links. Hyperlinks zijn standaard in XML, maar niet in JSON. Er zijn ontwerp-normen voor JSON, zoals hal .

Eindelijk, Rest is niet voor iedereen, en een bewijs van dat is hoe de meeste mensen hun problemen heel goed oplossen met de HTTP API’s die ze per ongeluk rusten en nooit verder gaan dan dat. Rust is moeilijk om soms te doen, vooral in het begin, maar het betaalt in de loop van de tijd met eenvoudiger evolutie aan de serverzijde, en de veerkracht van de klant aan veranderingen. Als je iets snel en gemakkelijk hebt gedaan, doe dan niet de moeite om rustig te krijgen. Het is waarschijnlijk niet wat je zoekt. Als je iets nodig hebt dat al jaren of zelfs tientallen jaren online moet blijven, dan is rust voor jou.


2, Autoriteit 16%

RESTvs SOAPis niet de juiste vraag om te vragen.

REST, in tegenstelling tot SOAPbevindt zich niet een protocol.

RESTis een architecturale stijl en een ontwerp voor op netwerk gebaseerde software-architecturen.

RESTConcepten worden middelen genoemd. Een weergave van een hulpbron moet staatloos zijn. Het wordt vertegenwoordigd via een mediatype. Enkele voorbeelden van mediatypen omvatten XML, JSON, EN RDF. Middelen worden gemanipuleerd door componenten. Componenten aanvragen en manipuleren middelen via een standaard uniforme interface. In het geval van HTTP bestaat deze interface uit standaard HTTP OPS, b.v. GET, PUT, POST, DELETE.

De vraag van @Abdulaziz maakt duidelijk dat RESTen HTTPvaak samen worden gebruikt. Dit komt voornamelijk door de eenvoud van HTTP en de zeer natuurlijke toewijzing ervan aan RESTful-principes.

Fundamentele REST-principes

Client-Server Communicatie

Client-server-architecturen hebben een zeer duidelijke scheiding van zorgen. Alle applicaties die in de RESTful-stijl zijn gebouwd, moeten in principe ook client-server zijn.

Statloos

Elk clientverzoek aan de server vereist dat de status volledig wordt weergegeven. De server moet het clientverzoek volledig kunnen begrijpen zonder enige servercontext of serversessiestatus te gebruiken. Hieruit volgt dat alle status op de client moet worden bewaard.

Cacheable

Er kunnen cachebeperkingen worden gebruikt, waardoor responsgegevens kunnen worden gemarkeerd als cachebaar of niet-cachebaar. Alle gegevens die als cachebaar zijn gemarkeerd, kunnen opnieuw worden gebruikt als antwoord op hetzelfde volgende verzoek.

Uniforme interface

Alle componenten moeten samenwerken via één uniforme interface. Omdat alle interactie met componenten via deze interface plaatsvindt, is interactie met verschillende services heel eenvoudig. De interface is hetzelfde! Dit betekent ook dat implementatiewijzigingen geïsoleerd kunnen worden doorgevoerd. Dergelijke veranderingen hebben geen invloed op de interactie van fundamentele componenten, omdat de uniforme interface altijd ongewijzigd blijft. Een nadeel is dat je vastzit aan de interface. Als er een optimalisatie zou kunnen worden geleverd aan een specifieke service door de interface te wijzigen, heeft u pech omdat REST dit verbiedt. Aan de positieve kant is REST echter geoptimaliseerd voor het web, vandaar de ongelooflijke populariteit van REST via HTTP!

De bovenstaande concepten vertegenwoordigen bepalende kenmerken van REST en onderscheiden de REST-architectuur van andere architecturen zoals webservices. Het is handig om te weten dat een REST-service een webservice is, maar een webservice is niet per se een REST-service.

Bekijk deze blog postop REST Ontwerpprincipesvoor meer details over RESTen de bovengenoemde opsommingstekens.

BEWERKEN:inhoud bijwerken op basis van opmerkingen


Antwoord 3, autoriteit 14%

SOAP (Simple Object Access Protocol) en REST (Representation State Transfer) zijn allebei mooi op hun manier. Ik vergelijk ze dus niet. In plaats daarvan probeer ik de foto weer te geven, wanneer ik liever REST gebruikte en wanneer SOAP.

Wat is laadvermogen?

Wanneer gegevens via internet worden verzonden, bevat elke verzonden eenheid zowel headerinformatie als de daadwerkelijke gegevens die worden verzonden. De header identificeert de bron en de bestemming van het pakket, terwijl de feitelijke gegevens de payload worden genoemd. Over het algemeen bestaat de payload uit de gegevens die namens een applicatie worden vervoerd en de gegevens die door het bestemmingssysteem worden ontvangen.

Nu moet ik bijvoorbeeld een Telegramsturen en we weten allemaal dat de kosten van het telegram van sommige woorden afhangen.

Vertel me eens welke van de onderstaande twee berichten goedkoper is om te verzenden?

<name>Arin</name>

of

"name": "Arin"

Ik weet dat uw antwoord het tweede zal zijn, hoewel beide dezelfde boodschap vertegenwoordigen. De tweede is goedkoper qua kosten.

Dus ik probeer te zeggen dat het verzenden van gegevens via het netwerk in JSON-formaat goedkoper is dan het verzenden in XML-formaat met betrekking tot payload.

Dit is het eerste voordeel of de voordelen van REST boven SOAP. SOAP ondersteunt alleen XML, maar REST ondersteunt verschillende formaten zoals tekst, JSON, XML, enz. En we weten al dat als we Json gebruiken, we zeker op een betere plek zullen zijn met betrekking tot payload.

SOAP ondersteunt nu de enige XML, maar het heeft ook zijn voordelen.

Echt! Hoe?

SOAP vertrouwt op drie manieren op XML
Envelop – die definieert wat er in het bericht staat en hoe het moet worden verwerkt.

Een set coderingsregels voor gegevenstypen en tot slot de lay-out van de procedureaanroepen en verzamelde antwoorden.

Deze envelop wordt verzonden via een transport (HTTP/HTTPS), en een RPC (Remote Procedure Call) wordt uitgevoerd en de envelop wordt teruggestuurd met informatie in een XML-document.

Het belangrijkste punt is dat een van de voordelen van SOAPhet gebruik van het ‘generieke’ transportis, maar REST gebruikt HTTP/HTTPS. SOAP kan bijna elk transport gebruiken om het verzoek te verzenden, maar REST kan dat niet. Dus hier hebben we een voordeel van het gebruik van SOAP.

Zoals ik al zei in de bovenstaande paragraaf ‘REST gebruikt HTTP/HTTPS’, ga dus wat dieper in op deze woorden.

Als we het hebben over REST over HTTP, worden alle toegepaste beveiligingsmaatregelen HTTP overgenomen, en dit staat bekend als beveiliging op transportniveauen het beveiligt berichten alleen terwijl het zich in de draad bevindtmaar als je het eenmaal aan de andere kant hebt afgeleverd, weet je niet hoeveel fasen het zal moeten doorlopen voordat het echte punt bereikt waar de gegevens zullen worden verwerkt. En natuurlijk kunnen al die fasen iets anders gebruiken dan HTTP.Dus Rust is niet helemaal veiliger, toch?

Maar SOAP ondersteunt SSLnet als REST en daarnaast het ondersteunt ook WS-Securitywat een aantal zakelijke beveiligingsfuncties toevoegt. WS-Security biedt bescherming vanaf het maken van het bericht tot aan het verbruik. Dus voor beveiliging op transportniveau, welke maas in de wet we hebben gevonden die kan worden voorkomen met WS-Security.

Afgezien daarvan, aangezien REST wordt beperkt door het HTTP-protocol, is de transactie-ondersteuning dus niet ACID-compatibel en kan het ook niet in twee fasen committen voor gedistribueerde transnationale bronnen.

Maar SOAP biedt uitgebreide ondersteuning voor zowel ACID-gebaseerd transactiebeheervoor transacties van korte duur en op vergoedingen gebaseerd transactiebeheer voor langlopende transacties. Het ondersteunt ook toezegging in twee fasen over gedistribueerde bronnen.

Ik trek geen conclusie, maar ik geef de voorkeur aan een op SOAP gebaseerde webservice, terwijl beveiliging, transacties, enz. de belangrijkste zorgen zijn.

Hier is de “The Java EE 6 Tutorial” waar ze hebben gezegd Een RESTful-ontwerp kan geschikt zijn als aan de volgende voorwaarden wordt voldaan. Kijk eens.

Ik hoop dat je mijn antwoord met plezier hebt gelezen.


4

IMHO U kunt niet vergelijken met zeep en rusten waar die twee verschillende dingen zijn.

Zeep is een protocol en rust is een software-architecturaal patroon. Er is veel misvatting op het internet voor zeep vs rust .

SOAP Definieert XML-gebaseerd berichtformaat dat webservice-enabled applicaties gebruiken om elkaar via internet te communiceren. Om te doen, hebben de aanvragen voorafgaand aan kennis van het berichtcontract, datatypes, enz ..

Rust Vertegenwoordigt de staat (als bronnen) van een server van een URL.it is staatloos en cliënten mogen geen voorkennis hebben om met de server te communiceren die verder gaat dan het begrip van Hypermedia.


Antwoord 5

Onder de vele andere die al in de vele antwoorden zijn behandeld, wil ik benadrukken dat SOAP het mogelijk maakt om een contract, de WSDL, te definiëren dat de ondersteunde bewerkingen, complexe typen, enz. definieert.
SOAP is gericht op operaties, maar REST is gericht op middelen.
Persoonlijk zou ik SOAP kiezen voor complexe interfaces tussen interne bedrijfsapplicaties en REST voor openbare, eenvoudigere, stateless interfaces met de buitenwereld.


Antwoord 6

Toevoeging voor:

++ Een fout die vaak wordt gemaakt bij het benaderen van REST is om het te zien als “webservices met URL’s” – om REST te zien als een ander RPC-mechanisme (Remote Procedure Call), zoals SOAP, maar aangeroepen via gewone HTTP-URL’s en zonder de forse XML-naamruimten van SOAP.

++ Integendeel, REST heeft weinig te maken met RPC. Terwijl RPC servicegericht is en gericht is op acties en werkwoorden, is REST resourcegericht, waarbij de nadruk ligt op de dingen en zelfstandige naamwoorden waaruit een toepassing bestaat.


Antwoord 7

Veel van deze antwoorden zijn helemaal vergeten hypermedia-besturingselementen (HATEOAS) te noemen, wat volledig fundamenteel is voor REST. Een paar anderen raakten het aan, maar legden het niet zo goed uit.

Dit artikelmoet het verschil tussen de concepten uitleggen, zonder in het onkruid te komen over specifieke SOAP-functies.


Antwoord 8

Wat is REST

REST staat voor representatieve statusoverdracht, het is eigenlijk een architecturale stijl voor het maken van een web-API die alles (gegevens of functionaliteit) als toevlucht behandelt.
Het verwacht; bronnen blootstellen via URI en reageren in meerdere formaten en representatieve overdracht van de staat van de bronnen op een staatloze manier. Hier heb ik het over twee dingen:

  1. Statistische manier: geleverd door HTTP.
  2. Representatieve staatsoverdracht: bijvoorbeeld als we een werknemer toevoegen. .
    in ons systeem, het is in de POST-status van HTTP, daarna zou het ook in de GET-status van HTTP, PUT en DELETE zijn.

REST kan SOAP-webservices gebruiken omdat het een concept is en elk protocol zoals HTTP kan gebruiken, SOAP.SOAP gebruikt service-interfaces om de bedrijfslogica bloot te leggen. REST gebruikt URI om bedrijfslogica bloot te leggen.

REST is geen REST zonder HATEOAS. Dit betekent dat een client alleen de URI van het ingangspunt kent en dat de bronnen verondersteld worden links te retourneren die de client zou moeten volgen. Die fraaie documentatiegeneratoren die URI-patronen geven voor alles wat je in een REST API kunt doen, slaan de plank volledig mis. Ze documenteren niet alleen iets dat de standaard zou moeten volgen, maar als je dat doet, koppel je de klant aan een bepaald moment in de evolutie van de API, en alle wijzigingen aan de API moeten worden gedocumenteerd en toegepast, of het zal breken.

HATEOAS, een afkorting voor Hypermedia As The Engine Of Application State, is een beperking van de REST-toepassingsarchitectuur die deze onderscheidt van de meeste andere netwerktoepassingsarchitecturen. Het principe is dat een client volledig interageert met een netwerktoepassing via hypermedia die dynamisch wordt geleverd door toepassingsservers. Een REST-client heeft geen voorkennis nodig over de interactie met een bepaalde applicatie of server, behalve een algemeen begrip van hypermedia. In sommige servicegeoriënteerde architecturen (SOA) werken clients en servers daarentegen samen via een vaste interface die wordt gedeeld via documentatie of een interfacebeschrijvingstaal (IDL).

Referentie 1
Referentie 2


Antwoord 9

Hoewel zeep en rust gelijkheden over het HTTP-protocol, zeep is een rigide set berichtenpatronen dan rusten. De regels in zeep zijn relevant omdat we geen enkele mate van standaardisatie zonder hen kunnen bereiken. Rust heeft geen verwerking nodig als architectuurstijl en is inherent veelzijdiger. In de geest van informatie-uitwisseling zijn zowel zeep als rust afhankelijk van de gevestigde wetten die iedereen heeft besloten zich aan te houden.
De keuze van zeep versus rust is afhankelijk van de programmeertaal die u gebruikt de omgeving die u gebruikt en de specificaties.

Other episodes