Slovník pojmů

REST API: jak funguje architektonický styl pro HTTP rozhraní

REST není formát JSON ani hotová knihovna. Popisuje principy, podle kterých spolu komunikují klient a server.

Stručná definice

REST je konkrétní styl návrhu distribuovaného rozhraní.

REST znamená Representational State Transfer. Popisuje soubor omezení pro distribuované aplikace: oddělení klienta a serveru, jednotné rozhraní, bezstavovou komunikaci a práci s reprezentacemi zdrojů. Nestanovuje jednu knihovnu ani povinný datový formát.

Klient nepracuje přímo s databázovou tabulkou nebo vnitřním objektem serveru. Volá zdroj, například objednávku, a dostává jeho reprezentaci — často JSON. REST je užší pojem než API: API může být lokální, RPC nebo asynchronní, REST popisuje konkrétní styl webové komunikace.

Použití

Kdy REST API dává smysl

REST API se hodí pro stabilní rozhraní nad identifikovatelnými daty a stavy aplikace.

  • produktový katalog, zákazníci a uživatelské účty
  • objednávky, skladová dostupnost a administrace e-shopu
  • backend pro webový nebo mobilní klient
  • partnerské integrace se sdíleným HTTP kontraktem
  • exportní nebo dlouhé úlohy modelované jako samostatný zdroj

Praktický příklad

Správa objednávky a katalogu

Administrace načte objednávku přes GET /orders/4812. Fronta expedice používá GET /orders?status=paid&sort=createdAt&limit=50&cursor=… a nestahuje tak všechny objednávky najednou. Změnu adresy může provést přes PATCH /orders/4812 s předem stanoveným formátem změny.

Pokud už je objednávka odeslaná a pravidlo změnu zakazuje, API vrátí zdokumentovaný konflikt stavu, nikoli obecný úspěch. Vytvoření nové objednávky na POST /orders potřebuje navíc idempotency key: při ztrátě spojení klient neví, zda první požadavek uspěl.

Jak funguje

Zdroj, reprezentace a HTTP požadavek

Zjednodušený průběh práce s REST rozhraním:

  1. Zdroj URL identifikuje koncept, například /orders/4812; nemusí jít o jeden řádek tabulky.
  2. Požadavek Klient odešle metodu, URL, hlavičky a případně tělo se změnou.
  3. Pravidla Server ověří oprávnění, vstupy i obchodní podmínky změny.
  4. Reprezentace Odpověď vrátí HTTP status a aktuální stav zdroje nebo popis chyby.
  5. Další stránka U kolekcí klient pokračuje podle zdokumentovaného cursoru, filtru a řazení.

Důležité vlastnosti

Sémantika, kterou klient potřebuje znát

Největší přínos RESTu není v názvu URL, ale v předvídatelném chování kontraktu.

URL a jednotné rozhraní

Kolekce může být /orders, konkrétní objednávka /orders/4812. Cílem není mechanicky zakázat každé sloveso v cestě, ale dát klientovi čitelnou sémantiku.

HTTP metody

GET čte a nemá měnit business stav. POST typicky vytváří nebo spouští zpracování. PUT nastavuje cílový stav, PATCH popisuje částečnou změnu a DELETE žádá odstranění.

Statusy a chyby

201 obvykle značí vytvořený zdroj, 202 přijatou asynchronní práci, 204 úspěch bez těla. Pro chyby je nutná konzistentní dohoda o 4xx, 5xx a formátu odpovědi.

Bezstavovost a cache

Každý požadavek nese informace nutné k pochopení. Neznamená to zákaz databáze; jde o stav komunikace. Vhodně označené odpovědi lze cachovat.

Návrh kolekcí

Stránkování, filtry, řazení a změny

Seznam objednávek může růst bez omezení. Kontrakt musí říct, jak získat pouze relevantní a další výsledky.

Filtrování
Například status=paid musí mít jednoznačný význam a validaci povolených hodnot.
Řazení
Stabilní řazení je důležité pro návaznost stránek, zvlášť při souběžných změnách dat.
Cursor
Cursor často lépe zvládá velká nebo proměnlivá data než pouhý offset; jeho tvar je součástí kontraktu.
Verzování a OpenAPI
REST neurčuje místo verze. OpenAPI může popsat cesty, parametry a odpovědi, samo o sobě však z API REST nedělá.

Výhody a omezení

REST není šablona pro každou business akci

Přínosy

  • využívá známé HTTP metody, statusy, hlavičky a nástroje
  • konzistentní zdroje a metody snižují počet výjimek pro klienta
  • odděluje klienta a server a umožňuje více typů klientů
  • bezstavové požadavky usnadňují opakování a horizontální provoz

Časté chyby

  • GET použitý pro změnu stavu
  • vždy HTTP 200 a neurčitý text success v JSONu
  • rušení starých polí bez období kompatibility
  • stateless vykládané jako zákaz přihlášení nebo databáze

Hranice použití

Ne každé JSON API je skutečně RESTful.

API s POST /doSomething a vždy stejným statusem může fungovat, ale nevyužívá dobře HTTP sémantiku. Opačná chyba je vytvářet nepřirozené URL jen kvůli nálepce REST. U dlouhé operace je často čitelnější vytvořit zdroj úlohy a vrátit 202, než předstírat okamžité dokončení.

Idempotentní HTTP metoda sama neřeší duplicitu business operace, která zasahuje více systémů. Při vytvoření objednávky nebo zásilky je potřeba navrhnout ochranu na úrovni konkrétní operace.

Na co myslet

Pravidla pro čitelné HTTP rozhraní

Kontrakt by měl popsat i výjimečné a provozní stavy, ne jen šťastnou cestu.

  • GET bez mutace business stavu
  • jednoznačné statusy, strojový typ chyby a korelační ID
  • maximální limit a stabilní řazení kolekcí
  • zpětně kompatibilní změny nebo jasný plán migrace
  • bezpečné předávání tokenů mimo query string

Časté otázky

Co znamená REST v praxi

Je REST API a HTTP API totéž?

Ne. HTTP API může používat HTTP bez dodržení REST omezení. REST je jeden architektonický styl s jednotným rozhraním, zdroji a dalšími principy.

Je každé API s JSONem REST?

Ne. JSON je datový formát. O RESTu rozhoduje sémantika zdrojů, metod, stavů a komunikace, ne koncovka odpovědi.

Jaký je rozdíl mezi PUT a PATCH?

PUT nastavuje reprezentaci cílového zdroje, PATCH popisuje částečnou změnu. Kontrakt PATCH musí přesně určit, jak se změna interpretuje; idempotence PATCH není automatická.

Musí REST API verzovat URL?

Ne. REST neurčuje umístění verze. Důležitější je vyhnout se nekompatibilním změnám a předem popsat přechod.

Jak REST API používám v praxi

API navrhuji s ohledem na provoz integrace.

U integračních služeb řeším vedle endpointů také datové kontrakty, chybové stavy, opakování požadavků a dohledatelnost synchronizací.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.