Při práci s aplikačními rozhraními (API) se často setkáváme s koncepty REST a gRPC. Ačkoli REST dlouhodobě dominuje, gRPC se stává silným konkurentem.
REST a gRPC představují dva odlišné přístupy k návrhu API. API fungují jako komunikační kanály mezi službami, které mohou reprezentovat složité systémy běžící na různých počítačích nebo napsané v různých programovacích jazycích.
Tento článek poskytne přehled o REST i gRPC, porovná jejich podobnosti a rozdíly a nastíní vhodné scénáře jejich využití.
Co je to REST?
REST (Representational State Transfer) je softwarový architektonický styl, který definuje pravidla pro výměnu dat mezi softwarovými komponentami. Využívá standardní komunikační protokol HTTP.
API, která jsou navržena v souladu s architekturou REST, se označují jako RESTful API. Obdobně webové služby, které se řídí principy REST, se nazývají RESTful webové služby.
Architektonický styl REST se řídí těmito klíčovými principy:
- Jednotné rozhraní: Server by měl posílat data v standardizovaném formátu. Přenesená data se mohou lišit od interní reprezentace zdroje na straně serveru.
- Bezstavovost: Server by měl zpracovat každý požadavek od klienta nezávisle na předchozích požadavcích. Požadavky na zdroje mohou být prováděny v libovolném pořadí a každý požadavek je izolován od ostatních.
- Vrstvený systém: Mezi serverem a klientem existuje vrstva autorizovaných zprostředkovatelů. Klient se může spojit s těmito zprostředkovateli a stále dostávat odpovědi ze serveru.
- Možnost ukládání do mezipaměti: Některé odpovědi jsou ukládány u zprostředkovatele nebo klienta, aby se zkrátila doba odezvy.
- Kód na vyžádání: Servery mohou dočasně rozšířit funkcionalitu klienta tím, že mu pošlou softwarový programovací kód.
Výhody REST
- Škálovatelnost: REST API jsou proslulé svou škálovatelností díky optimalizaci interakce mezi klientem a serverem. Klíčové funkce, jako je ukládání do mezipaměti a bezstavovost, snižují zátěž serveru.
- Flexibilita: RESTful API nabízí úplné oddělení klienta od serveru. To umožňuje vývoj různých serverových komponent nezávisle na sobě.
- Nezávislost: Serverové i klientské aplikace mohou být vyvíjeny v různých programovacích jazycích, aniž by to mělo vliv na návrh API.
Případy použití REST
- Webová rozhraní API
- Webové služby
- Mikroslužbová architektura
Co je to gRPC?
gRPC je rámec pro vzdálené volání procedur (RPC), který je použitelný v různých prostředích. Tento open-source framework je navržen pro dosažení vysokého výkonu a efektivní propojení služeb v rámci datových center i mimo ně.
Klientská aplikace může volat metodu serverové aplikace běžící na jiném počítači, jako by to byl lokální objekt. V gRPC definujeme službu a specifikujeme metody, které je možné vzdáleně volat, včetně jejich parametrů a návratových typů.
gRPC nabízí zásuvné mechanismy pro kontrolu stavu, autentizaci, vyvažování zátěže a podporu trasování. Tento framework využívá HTTP/2 a Protocol Buffers pro přenos dat. Namísto adresy URL zdroje se volá procedura.
Výhody gRPC
- Škálovatelnost: gRPC umožňuje instalaci běhového prostředí jediným příkazem a škálování až na miliony RPC za sekundu.
- Jednoduchá definice služby: Služby lze snadno definovat pomocí Protocol Buffers a rychle je zprovoznit.
- Multiplatformní: Framework generuje automaticky klientské a serverové šablony pro různé platformy a jazyky.
- Obousměrné streamování a integrovaná autentizace.
Případy použití gRPC
- Webová rozhraní API
- Webové služby
- Streamovací aplikace
- Komunikace mikroslužeb
Podobnosti mezi REST a gRPC
- Mechanismus výměny dat: Oba architektonické styly umožňují serverům a klientům vyměňovat si data, a to na základě specifických pravidel.
- Vhodné pro škálovatelné a distribuované systémy: Asynchronní komunikace a bezstavový charakter obou přístupů usnadňují škálování API.
- Využití HTTP: Oba přístupy využívají HTTP jako komunikační protokol.
- Flexibilita: REST i gRPC lze používat s různými programovacími jazyky a technologiemi.
REST vs. gRPC: Detailní porovnání
Služby REST a gRPC se liší následujícími charakteristikami:
Výměna dat
V REST API se data předávaná mezi softwarovými komponentami vyjadřují ve formátu JSON. JSON je nutné serializovat a převést do programovacího jazyka pro výměnu dat. REST API však mohou využívat i datové formáty, jako je HTML a XML.
gRPC standardně využívá formát Protocol Buffers, ačkoli nativně podporuje i JSON. Protocol Buffers nejsou čitelné pro člověka. Server používá jazyk pro popis rozhraní Protocol Buffer pro definování datové struktury, kterou gRPC následně serializuje do binárního formátu a deserializuje do požadovaného programovacího jazyka.
Komunikační model
V REST klient odešle jeden požadavek na server, který následně odešle odpověď. Klient musí čekat na odpověď, než může pokračovat v operacích. Jedná se o model typu požadavek-odpověď.
V gRPC může klient poslat jeden nebo více požadavků serveru a obdržet jednu nebo více odpovědí. Datová spojení mohou být typu many-to-many, many-to-one, one-to-many nebo one-to-one. gRPC využívá komunikační model typu klient-reakce.
Generování kódu
gRPC má vestavěné funkce pro generování kódu na straně serveru i klienta. Tyto funkce jsou dostupné v různých jazycích díky kompilátoru Protocol Buffers. gRPC generuje kód na obou stranách po definování struktury v souboru .proto.
REST nemá vestavěné funkce pro generování kódu a je nutné využít nástroje třetích stran.
HTTP protokol
REST API využívají HTTP/1.1. Pro odeslání požadavku na službu REST je nutná adresa URL zdroje. HTTP/1.1 přenáší informace mezi počítačem a webovým serverem. Adresa URL zdroje je v případě REST služby viditelná pro klienta. Návrháři API řídí strukturu adres URL zdrojů.
gRPC využívá HTTP/2, verzi HTTP z roku 2015, která se používá v prohlížečích jako Internet Explorer, Safari a Chrome. HTTP/2, na rozdíl od HTTP/1.1, které uchovává vše v prostém textu, používá zapouzdření binárního formátu, což vede k vyšší rychlosti a efektivitě přenosu dat.
Struktura dat užitečné zátěže
REST používá XML nebo JSON pro odesílání a příjem dat. JSON je nejvíce používaný formát pro odesílání dynamických dat v REST, protože je flexibilní a nevyžaduje žádnou strukturu. Data v JSON jsou čitelná pro člověka, nicméně JSON není tak rychlý, protože vyžaduje serializaci a překlad během přenosu dat.
gRPC používá Protocol Buffers pro serializaci dat. Jedná se o vysoce komprimovaný formát, který minimalizuje objem přenášených dat. Framework používá Protobuf pro automatický převod zpráv se silným typováním do programovacích jazyků klienta a serveru.
Podpora prohlížeče
REST je podporován ve všech prohlížečích díky využití HTTP/1.1. To z něj činí ideální volbu pro webové služby a API.
gRPC má omezenou podporu prohlížečů, protože je založen na HTTP/2. Pro podporu všech prohlížečů je nutné přidat gRPC-web jako proxy vrstvu. Z tohoto důvodu se gRPC nejčastěji používá pro interní systémy.
Propojení klient-server
REST je volně propojený architektonický návrh, což znamená, že klient a server nemusí znát detaily svých implementací. To usnadňuje vývoj RESTful API v čase, protože při změnách definic serveru není nutné měnit klientský kód.
gRPC je pevněji propojený framework, kde server i klient musí mít přístup ke stejnému .proto souboru. Pokud je potřeba v souboru provést změny, musí se aktualizovat i server a klient.
REST vs. gRPC
Funkce | REST | gRPC |
HTTP protokol | HTTP 1.1 | HTTP 2 |
Podpora prohlížeče | Podporuje všechny prohlížeče díky HTTP 1.1 | Menší podpora prohlížečů kvůli HTTP 2 |
Generování kódu | Nástroje třetích stran | Vestavěné funkce generování kódu |
Návrhový přístup | Návrh orientovaný na entity | Přístup orientovaný na služby |
Přístup k datům | Běžné adresy URL | Služby |
Obousměrné streamování dat | Nevyžaduje se | GRPC software je nutný jak na straně klienta, tak i serveru. |
Komunikační model | Jeden klient komunikuje s jedním serverem | Více komunikačních modelů, např. jeden klient odesílá požadavky na více serverů, jeden server komunikuje s více klienty nebo jeden server s jedním klientem. |
Kdy použít REST
RESTful API a webové služby jsou velmi populární. Jsou snadno implementovatelné, strukturují data, jsou flexibilní a čitelné. REST je vhodné použít v následujících případech:
- Webové architektury: REST lze použít k vytváření webových, mobilních a multiplatformních API.
- Jednoduchá datová komunikace: REST používá JSON, snadno čitelný datový formát.
- Public-facing API: Pokud chcete zpřístupnit data veřejnosti a umožnit využití API, REST bude díky své čitelnosti dobrou volbou.
Kdy použít gRPC
gRPC není tak rozšířené jako RESTful služby, má však unikátní vlastnosti, které ho předurčují pro následující aplikace:
- Vícejazyčné systémy: gRPC je vhodné pro mikroslužbové architektury napsané v různých programovacích jazycích, kde se rozhraní API pravděpodobně nebudou často měnit.
- Připojení mikroslužeb: Funkce jako obousměrné streamování a nízká podpora prohlížečů činí gRPC dobrou volbou pro interní API.
- Sítě streamování v reálném čase: gRPC lze využít s interními službami, které zpracovávají velké objemy dat a vyžadují streamování v reálném čase.
Názor autorů
I když má gRPC specifické funkce, které mohou převážit nad REST v aplikacích, jako je Internet věcí, REST dominuje díky své čitelnosti, flexibilitě a širokému přijetí. Nižší podpora prohlížečů dělá z gRPC méně vhodnou volbu pro vývojáře, kteří chtějí vytvářet webové služby.
Univerzální podpora pro RESTful služby z něj dělá ideální architektonický styl API pro integraci webu a mikroslužeb.
Závěr
REST a gRPC patří mezi mnoho architektonických stylů API, které můžete použít při návrhu vašeho API. Konečná volba bude záviset na produktu, který chcete vytvořit. RESTful služby jsou vhodné pro tvorbu veřejných API, zatímco gRPC je dobrou volbou pro služby, jako jsou mobilní aplikace, které nevyžadují podporu prohlížeče.
Doporučujeme vám také prostudovat si náš článek o tom, jak vytvořit gRPC od nuly pomocí Java.