Navrhování RESTful API: Základní osvědčené postupy
Navrhování dobře strukturovaného API již není okrajovou dovedností, ale stalo se základním požadavkem pro moderní vývoj softwaru. Špatně navržené API může snížit produktivitu vývojářů, zhoršit výkon systému a vytvořit noční můru pro údržbu. Zvládnutím základních principů REST budete schopni vytvářet webové služby, které se škálují, jsou flexibilní a přinášejí radost ostatním vývojářům, a tím se naučíte navrhovat RESTful API pro webové aplikace, které jsou zároveň výkonné a intuitivní.
Co se naučíte
Na konci této příručky pochopíte základní omezení REST architektury a přejdete od teorie k praktickým návrhovým rozhodnutím. Naučíte se, jak navrhovat URI orientované na zdroje, správně používat HTTP metody a implementovat strategie verzování, zabezpečení a dokumentace, které zajistí spolehlivost a snadné používání vašeho API v průběhu jeho vývoje.
Základní principy REST
Abyste navrhli skutečně RESTful API, musíte dodržovat architektonická omezení definovaná Royem Fieldingem. Tyto principy vytvářejí jednotné rozhraní bez stavu, s možností ukládání do mezipaměti, které odděluje klienta od serveru.
Klient-server a bezstavovost
Oddělení uživatelského rozhraní a úložiště dat zvyšuje přenositelnost uživatelského rozhraní na různé platformy a zjednodušuje serverové komponenty, čímž zlepšuje škálovatelnost. Toto oddělení umožňuje nezávislý vývoj frontendu a backendu. Kromě toho REST vyžaduje model požadavků bez stavu. To znamená, že každý HTTP požadavek od klienta k serveru musí obsahovat všechny informace potřebné k jeho pochopení a zpracování. Server se nemůže spoléhat na uložený kontext předchozích interakcí. Toto omezení je kriticky důležité pro dosažení horizontální škálovatelnosti, protože jakákoli instance serveru může zpracovat jakýkoli požadavek. Bezstavovost je hlavním faktorem jednoduchosti a škálovatelnosti RESTful API.
Jednotné rozhraní
Jednotné rozhraní je určující vlastnost, která odlišuje REST od ostatních architektur. Zjednodušuje a odděluje architekturu a umožňuje každé části vyvíjet se nezávisle. Toto rozhraní se opírá o čtyři klíčová omezení:
- Identifikace zdrojů: Zdroje (např. uživatelé, objednávky, produkty) jsou identifikovány v požadavcích pomocí URI. Jsou považovány za podstatná jména, nikoli za akce.
- Manipulace se zdroji prostřednictvím reprezentací: Klienti interagují s reprezentacemi zdrojů (obvykle JSON nebo XML), nikoli se samotným zdrojem. Reprezentace obsahuje dostatek informací pro změnu nebo odstranění zdroje.
- Samodokumentující zprávy: Každá zpráva obsahuje dostatek informací k popisu toho, jak ji zpracovat, například typy médií a HTTP metody.
- Hypermedia as the Engine of Application State (HATEOAS): Klienti by měli interagovat s aplikací výhradně prostřednictvím hypermediálních odkazů dynamicky poskytovaných serverem. To umožňuje API měnit strukturu URI, aniž by narušilo činnost klientů, protože se pohybují po odkazech.
Navrhování URI orientovaných na zdroje
Identifikace zdrojů je prvním krokem v praktickém návrhu API. Musíte definovat obchodní objekty nebo entity, které bude API poskytovat.
Konvence pojmenování
Dodržování jednotné konvence pojmenování je zásadní pro použitelnost. Používejte podstatná jména k reprezentaci zdrojů, nikoli slovesa. Například použijte /orders, nikoli /create-order. HTTP metody již implikují slovesnou akci. Pro kolekce se doporučuje používat podstatná jména v množném čísle. /customers je srozumitelná cesta ke kolekci a /customers/5 odkazuje na konkrétního zákazníka. Tento přístup je intuitivní a je v souladu s tím, jak mnoho webových frameworků směruje požadavky.
Struktura cesty a vztahy
Navrhujte URI tak, aby odrážely vztahy mezi zdroji, aniž by se staly zbytečně složitými. URL ve tvaru /customers/1/orders efektivně reprezentuje všechny objednávky konkrétního zákazníka. Vyhněte se URI složitějším než collection/item/collection. Pokud mají zdroje hluboké vazby, poskytujte odkazy v tělech odpovědí, místo abyste kódovali celou cestu procházení do URI. To zabraňuje těsnému propojení a činí API flexibilnějším vůči změnám.
Definice HTTP metod a stavových kódů
REST využívá plnou sílu protokolu HTTP k provádění operací nad zdroji.
Standardní metody
Vaše API by mělo používat standardní HTTP metody k provádění operací CRUD (Create, Read, Update, Delete).
- GET: Načítá reprezentaci zdroje. Měl by být bezpečný (bez vedlejších účinků) a idempotentní (více stejných požadavků má stejný účinek jako jeden).
- POST: Vytváří nový zdroj. Server přiřadí URI nového zdroje a vrátí jej klientovi.
- PUT: Nahrazuje celý stav zdroje. Idempotentní.
- PATCH: Aplikuje částečné aktualizace na zdroj.
- DELETE: Odstraňuje zdroj. Idempotentní.
Významné stavové kódy
Vracení správných HTTP stavových kódů je nezbytné pro srozumitelné a uživatelsky přívětivé API. Umožňuje klientovi pochopit výsledek operace bez nutnosti analyzovat tělo odpovědi.
| Kód | Význam | Scénář použití |
|---|---|---|
| 200 OK | Úspěch | Požadavek proveden; užitečné zatížení obsahuje požadovaná data. |
| 201 Created | Zdroj vytvořen | POST požadavek úspěšně vytvořil nový zdroj. |
| 204 No Content | Úspěch, žádný obsah | Požadavek proveden (např. DELETE požadavek), ale není k vrácení žádná reprezentace. |
| 400 Bad Request | Chyba klienta | Požadavek má nesprávný formát nebo obsahuje neplatná data (např. syntaktická chyba). |
| 401 Unauthorized | Chyba autentizace | Klientovi se nepodařilo projít autentizací. |
| 403 Forbidden | Chyba autorizace | Klient je autentizován, ale nemá oprávnění. |
| 404 Not Found | Zdroj nenalezen | Požadované URI neexistuje. |
| 500 Internal Server Error | Chyba serveru | Došlo k obecné chybě serveru. |
Pokročilé aspekty: Verzování a dokumentace
Ochrana do budoucna pomocí verzování
Změny jsou nevyhnutelné a vaše API se musí vyvíjet. Aby nedošlo k narušení činnosti stávajících klientů, je vyžadována robustní strategie verzování. Nejběžnějším a nejprůhlednějším přístupem je verzování v URL, kdy je verze zahrnuta do cesty URI, například /v1/users. Tím je verze API explicitní. Další možnosti zahrnují vlastní hlavičky nebo verzování podle typu média, ale verzování v URL je často preferováno pro svou jednoduchost a snadné použití.
Přístup "API First"
Přístup k API jako k produktu, nikoli jako k rutině, je charakteristickým znakem vyspělých inženýrských týmů. Přístup "API First" znamená navrhování specifikace API před psaním implementačního kódu. Měli byste použít standardní specifikační jazyk, jako je OpenAPI, k definici kontraktu API. Tento kontrakt slouží jako jediný zdroj pravdy a umožňuje používat výkonné nástroje, jako je interaktivní dokumentace a generování klientských SDK. To vás také nutí přemýšlet z pohledu spotřebitele API a zaručuje, že rozhraní bude snadno použitelné ještě před napsáním jakéhokoli kódu.
Často kladené otázky
Jaký je rozdíl mezi PUT a PATCH v RESTful API? PUT se používá k nahrazení celého zdroje novou reprezentací. Pokud odesíláte pouze částečnou aktualizaci, ostatní pole budou přepsána nulovými hodnotami nebo výchozími hodnotami. PATCH se používá k aplikaci částečných aktualizací na zdroj, přičemž se mění pouze uvedená pole. Z tohoto důvodu je PATCH obvykle preferován pro aktualizace, když nechcete odesílat celý stav zdroje.
Má být verzování API v URL nebo v hlavičce?
Verzování v URL (např. /v1/users) je nejběžnější a doporučovaný přístup. Dělá verzi zřejmou a explicitní, což je užitečné pro vývojáře a pro ladění, protože se zobrazuje přímo v cestě požadavku. Ačkoli verzování na základě hlaviček existuje, verzování v cestě URL je jednodušší a lépe zjistitelné pro většinu případů použití.
Co je HATEOAS a je nutné jej implementovat? HATEOAS (Hypermedia as the Engine of Application State) je omezení, při kterém server poskytuje v odpovědi odkazy pro dynamickou navigaci klienta po API. To odděluje klienta od struktury URI a umožňuje serveru měnit URI, aniž by narušil činnost klientů. Ačkoli se "plný" HATEOAS v nejpřísnějším smyslu implementuje zřídka, zahrnutí relevantních odkazů do odpovědí API je osvědčeným postupem, který podporuje objevování a snižuje pevné kódování URI v klientských aplikacích.
Jaké jsou osvědčené postupy pro pojmenování zdrojů API?
Nejlepším postupem je používat podstatná jména pro zdroje a podstatná jména v množném čísle pro kolekce. Vyhněte se používání sloves v URI (např. použijte /orders, nikoli /get-orders). Důvodem je, že HTTP metoda (GET, POST atd.) již definuje prováděnou akci. Jasná struktura založená na podstatných jménech činí vaše API intuitivním a snadno použitelným.
Proč by mělo být RESTful API bezstavové? Bezstavovost znamená, že každý požadavek od klienta obsahuje všechny informace, které server potřebuje k jeho provedení, a server neukládá stav relace mezi požadavky. Toto omezení je kriticky důležité pro škálovatelnost, protože umožňuje jakékoli instanci serveru v clusteru s vyvažováním zátěže zpracovat jakýkoli požadavek, a také zjednodušuje serverovou architekturu. Je to základní princip, který umožňuje RESTful API podporovat webové aplikace v měřítku internetu.
Zdroje
- Lauret, Arnaud. The Design of Web APIs. Manning Publications, 2025.
- Microsoft. "Best practices for RESTful web API design." Azure Architecture Center, 2025.
- Fielding, Roy. "Guiding Principles of REST."
- Oracle. "What Are RESTful Web Services?" Oracle Help Center.
- OGC. "Overview and main concepts." OGC API Workshop.
- [x]cube LABS. "Best Practices for Designing RESTful APIs." 2024.
- Hackney Council. "API Design Principles." Hackney Development System.
— Editorial Team
Zatím žádné komentáře.