REST a SOAP
REST a SOAP představují dva dominantní přístupy k návrhu a implementaci webových služeb. REST (Representational State Transfer) je architektonický styl orientovaný na zdroje a standardní protokoly, zatímco SOAP (Simple Object Access Protocol) je specifický protokol s přísně definovanou strukturou zpráv a rozšiřitelnými standardy. Cílem tohoto článku je systematicky porovnat REST a SOAP z hlediska principů, bezpečnosti, spolehlivosti, výkonu, nástrojů, verzování a typických scénářů použití – a poskytnout doporučení, kdy zvolit kterou technologii.
Historický kontext a motivace
SOAP vznikl na přelomu 90. let jako standardizovaný způsob vzdálených volání s důrazem na interoperabilitu podnikových systémů, transakce a smluvní rozhraní. REST byl formalizován kolem roku 2000 jako reakce na rostoucí web a potřebu jednoduchého, škálovatelného a cacheovatelného přístupu k datům. S nástupem mobilních a cloudových aplikací REST dominoval díky nízké režii, zatímco SOAP si udržel pozici v podnikových integracích vyžadujících komplexní záruky (bezpečnost, spolehlivé doručení, transakce).
Architektonické principy REST
- Orientace na zdroje: každý resource má jedinečné URI (
/customers/123). - Uniformní rozhraní: standardní metody HTTP (
GET,POST,PUT,PATCH,DELETE), stavové kódy a hlavičky. - Bezstavovost (stateless): každý požadavek nese vše potřebné; server neudržuje stav relace (mimo cache/ETag apod.).
- Cacheovatelnost:
Cache-Control,ETag,Last-Modifiedumožňují horizontální škálování a snížení latence. - Reprezentace: typicky JSON, ale také XML, HAL, JSON:API; volba prostřednictvím content negotiation.
Architektonické principy SOAP
- Protokol a obálka: každá zpráva je XML obálka s Header a Body, často přes HTTP(S), ale také SMTP či JMS.
- Smluvní rozhraní: kontrakt je definován ve WSDL (Web Services Description Language), strojově čitelném schématu operací, typů a vazeb.
- Rozšiřitelnost: standardy WS-* (WS-Security, WS-Policy, WS-Addressing, WS-ReliableMessaging, WS-AtomicTransaction) pro pokročilé požadavky.
- RPC i dokumentový styl: podpora volání ve stylu RPC i výměny dokumentů; validace XSD.
Formáty dat a reprezentace
- REST: JSON dominuje díky kompaktnosti a přímé mapovatelnosti do jazykových struktur; možné jsou také XML/YAML/CSV. Hypermediální formáty (HAL, JSON:API) přidávají odkazy a vztahy.
- SOAP: vždy XML podle XSD; přenos binárních dat přes MTOM/XOP; striktní typová kompatibilita a validace.
Adresace a operace
- REST: operace vyjadřují záměr prostřednictvím metody HTTP; URI identifikuje zdroj, nikoli akci. Idempotence (
PUT,DELETE) a bezpečnost (GET) jsou důležité pro správné fungování cache a proxy. - SOAP: operace jsou definovány kontraktem (WSDL portType/operation); endpoint je obvykle jediný a metoda je součástí zprávy (soapAction).
Bezpečnost
- REST: zabezpečení přenosu prostřednictvím TLS (HTTPS), autentizace a autorizace prostřednictvím OAuth 2.0/OIDC, mTLS, klíčů API a HTTP podpisů. Ochranu proti replay a podpisy zpráv lze řešit na aplikační vrstvě (JWS/JWT).
- SOAP: WS-Security standardizuje podpisy, šifrování a tokeny na úrovni zprávy (nezávisle na transportu), časová razítka a nonce, SAML assertion pro federaci identit. Jemnozrnná politika prostřednictvím WS-Policy.
Spolehlivost, doručování a transakce
- REST: spoléhá na HTTP; idempotence a možnost opakování požadavků zvyšují odolnost. Distribuované transakce se řeší pomocí ság, kompenzačních akcí (compensation) a eventual consistency.
- SOAP: WS-ReliableMessaging poskytuje záruky doručení (at-least-once/exactly-once) a pořadí zpráv; WS-AtomicTransaction koordinuje dvoufázové potvrzení (2PC) v omezených scénářích.
Chybové kódy a diagnostika
- REST: využívá nativní kódy HTTP (
200/201/204,400/401/403/404/409,429,5xx) a strukturované chybové payloady (např.type,title,detail,traceId). - SOAP: element Fault s položkami
faultcode,faultstring,detail; mapování na kódy HTTP není povinné (často se vždy vrací200s chybou uvnitř obálky).
Verzování a vývoj rozhraní
- REST: verzování URI (
/v1) nebo typu média (application/vnd.example+json;version=2), řízená kompatibilita (přidávání volitelných polí, zachování kontraktu), hlavičky deprecation. - SOAP: verze/změny typů ve WSDL a XSD; generované klienty je nutné znovu vygenerovat; zpětná kompatibilita prostřednictvím rozšiřitelného schématu.
Výkon, latence a cache
- REST: menší režie, kompaktní JSON, široké využití CDN a HTTP cache;
ETag/If-None-Matchsnižují objem přenosů. Podpora kompresegzip/bra stránkování. - SOAP: rozsáhlé XML a validace schématu zvyšují latenci; MTOM pro binární data; vhodné pro menší počet sémanticky bohatých volání.
Streaming a velké objemy dat
- REST: přenos HTTP typu chunked, požadavky range, SSE/WebSocket pro posílání dat serverem; vhodné pro oznámení v reálném čase a datové toky.
- SOAP: optimalizace prostřednictvím MTOM; zasílání zpráv přes JMS pro asynchronní zpracování.
Nástroje, ekosystém a dokumentace
- REST: OpenAPI/Swagger, JSON Schema, Postman, Insomnia, API gatewaye (omezení počtu požadavků, autentizace, monetizace), snadná integrace do moderních frontendových a backendových rámců.
- SOAP: přístup WSDL-first, šablony a generátory klientů/serverů (JAX-WS, .NET WCF), podnikové ESB a registry služeb (UDDI – historicky).
Testování, kvalita a observabilita
- REST: kontraktní testy proti OpenAPI, simulace, chaos testy, korelace prostřednictvím
traceId/spanId(distribuované trasování), metriky (latence,p95,p99), kontrakty consumer-driven. - SOAP: validační testy proti WSDL/XSD, testovací nástroje (SoapUI), důkladná validace schématu, monitorování hlaviček a zásad WS-*.
Bezpečnostní modely v praxi
- Příklady REST: OAuth 2.0 s OIDC (autentizace uživatele), client credentials pro komunikaci stroj–stroj, mTLS pro B2B; podpisy JWS a šifrování JWE u citlivých payloadů.
- Příklady SOAP: tokeny SAML ve WS-Security, šifrované a podepsané hlavičky, výměna tokenů (token exchange) prostřednictvím STS; jemně odstupňované zásady podle WS-Policy (povinné algoritmy, tolerance časových razítek).
Typické scénáře použití
- REST je vhodný pro: veřejná API, mobilní a SPA aplikace, IoT, mikroslužby, datově orientované operace CRUD, integrace s CDN.
- SOAP je vhodný pro: B2B integrace s požadavky na spolehlivé doručování, bankovnictví/pojišťovnictví, legacy ESB, scénáře s formálními kontrakty, výměnu dokumentů a transakce.
Modelování API: zdroje vs. operace
- REST: pečlivý návrh zdrojů, vztahů a reprezentací; HATEOAS (volitelně) pro navigaci; filtrování, třídění, stránkování a výběr atributů.
- SOAP: definice operací a typů; silně typované vstupy/výstupy; validace proti XSD jako první linie kontroly kvality.
Limity, kompromisy a anti-patterny
- Anti-patterny REST: akce v URI (
/createUser), nadměrné používáníPOSTmístoPUT/PATCH, ignorování stavových kódů, chybějícíETag. - Anti-patterny SOAP: přehnaně složitá schémata a zásady WS-*, ignorování chybových zpráv, neadekvátní mapování chyb na HTTP, kombinace s nestandardními transporty bez důvodu.
Srovnávací tabulka
| Aspekt | REST | SOAP |
|---|---|---|
| Model | Architektonický styl (zdroje, HTTP) | Protokol s obálkou zprávy |
| Kontrakt | OpenAPI/konvence | WSDL/XSD, generovaní klienti |
| Formát | JSON (často), libovolný | Povinně XML |
| Bezpečnost | TLS, OAuth2/OIDC, mTLS, JWS/JWE | WS-Security, SAML, WS-Policy |
| Spolehlivost | Idempotence, opakování, eventual consistency | WS-ReliableMessaging, 2PC (omezeně) |
| Výkon | Nízká režie, cache, CDN | Vyšší režie, silná typovost |
| Verzování | Verzování URI/typu média | Verze WSDL/XSD |
| Streaming | SSE/WebSocket, chunked | MTOM, JMS |
| Typické použití | Veřejná a mobilní API, mikroslužby | Podnikové B2B, finance, legacy ESB |
Doporučení pro výběr
- Zvolte REST, pokud potřebujete rychlou integraci, nízkou latenci, širokou podporu klientů, cacheovatelnost, škálovatelnost a veřejně přístupné API s OAuth 2.0.
- Zvolte SOAP, pokud požadujete standardizované podpisy/šifrování zpráv na úrovni obsahu, formální kontrakt s přísnou validací, spolehlivé doručování a transakční scénáře – typicky v regulovaných odvětvích a heterogenních podnikových prostředích.
- Zvažte hybridní přístup: REST pro čtení/CRUD a události, SOAP pro kritické transakce a B2B kontrakty; případně gRPC/GraphQL pro specifické potřeby (výkonné binární protokoly, selektivní dotazy).
Osvědčené postupy při implementaci
- Konzistence: standardizujte pojmenování, chybové kódy, stránkování a filtrování.
- Bezpečnost již při návrhu: minimální rozsah tokenů, rotace klíčů, rate limiting, ochrana proti replay a injection.
- Observabilita: korelační identifikátory, strukturované logy, metriky a trasování.
- Plánování verzování: zásady ukončování podpory (deprecation policy), komunikace s konzumenty, migrační okna.
- Testy a kontrakty: automatizace validace proti OpenAPI/WSDL, testy consumer-driven.
Praktické příklady vhodného mapování
- REST CRUD:
GET /orders,POST /orders,GET /orders/{id},PATCH /orders/{id},DELETE /orders/{id}. - Operace SOAP:
SubmitOrder,CancelOrder,GetOrderStatuss validací proti XSD a podpisem WS-Security.
Závěr
REST a SOAP nejsou nástroje, které si navzájem konkurují v rámci hry s nulovým součtem, ale slouží k řešení různých typů integračních problémů. REST vyniká jednoduchostí, výkonem a přirozeným využitím webové infrastruktury. SOAP poskytuje robustní rámec pro přísné požadavky na bezpečnost a spolehlivost s formálním kontraktem. Správná volba vychází z potřeb dané domény: požadovaných záruk, regulačních požadavků, ekosystému partnerů a dovedností týmu. V praxi se často uplatňuje kombinace – REST pro škálovatelné, veřejné a datově orientované služby, SOAP pro kritické B2B transakce a legacy integrace.
