GraphQL.cz/Fórum/Jak správně verzovat GraphQL API, když používám SQL databázi?

Jak správně verzovat GraphQL API, když používám SQL databázi?

Zajímalo by mě, jaké jsou nejlepší postupy pro verzování GraphQL API, když mám za zády SQL databázi. Chápu, že verzování je důležité, abych mohl spravovat změny a nové funkce bez toho, abych narušil stávající aplikace, ale jak na to v praxi? Jak bych měl přistupovat k různým verzím schémat a dotazů? Mám vytvořit novou verzi API pokaždé, když udělám změny v databázi nebo stačí nějaké drobné úpravy v existujících typových definicích? Slyšel jsem o různých metodách jako je například použití URL pro verze nebo dokonce i hlavičky HTTP, ale co je vhodné v případě GraphQL? A co se týká backward compatibility? Jak zajistit, aby starší klienti mohli stále fungovat i po provedení změn? Je lepší mít více endpointů pro různé verze nebo to raději řešit nějak jinak? A co třeba migrace schémat – musím migrovat i data v databázi při každé změně verze API? Rád bych slyšel názory a zkušenosti ostatních, protože se snažím udržet svůj projekt dobře organizovaný a přehledný i po více verzích. Díky všem za pomoc!

169 slov
1.7 minut čtení
23. 6. 2020
Věra Dubská

Pokud jde o verzování GraphQL API, doporučuji se zaměřit na backward compatibility. Místo vytváření nových endpointů pro každou verzi API, můžeš udržovat jedno schéma a přidávat nové pole nebo typy. Takže když uděláš změny, tak spíš jen přidávej než měň nebo mazat existující věci. Tímhle způsobem starší klienti nebudou mít problém, protože budou pořád moci používat to, co už mají.

Co se týče verzování, tak jedna z možností je použít header pro verzi API, což umožní větší flexibilitu. URL verze taky funguje, ale s GraphQL to může být trochu matoucí. Hlavně se vyvaruj velkých změn v databázi, pokud to není potřeba - migrace dat by měla být co nejméně častá.

Doporučuji mít dobrou dokumentaci k API a jasně komunikovat o změnách. A pokud děláš nějaké breaking changes, dej klientům dostatek času se na to připravit. Všechny tyhle věci ti pomůžou mít projekt pod kontrolou i s vícero verzemi.

148 slov
1.5 minut čtení
30. 5. 2024
Viktor Hloušek

Pokud jde o verzování GraphQL API, tak to je trošku jiný příběh než u REST. Tady máš několik tipů, jak na to. Místo verzování přes URL (jako třeba /v1/ nebo /v2/) je lepší se spolehnout na evoluční přístup. To znamená, že bys měl designovat schémata tak, aby byla zpětně kompatibilní. Můžeš přidávat nové typy a pole, ale snaž se nemazat existující věci. Když už potřebuješ změnu, můžeš přidat nové pole s jiným názvem místo úpravy toho stávajícího.

Co se týká databáze, nemusíš migrovat data pokaždé, když provedeš změny v API. Spíš se snaž mít samostatné migrace pro strukturu databáze a pak další pro nová pole v API. Hlavně si dej pozor na to, aby byly query volány co nejméně problematicky pro klienty. Zkus používat direktivy v GraphQL pro podmínkovou logiku nebo třeba fragmenty pro sdílení částí dotazů.

A co se týče vícero endpointů? Osobně bych šel spíš cestou jednoho endpointu a správy verzí v rámci schématu. Takže radši předělávej a přizpůsobuj existující typy než vytvářet další koncové body. Klienti si pak můžou vybrat, které dotazy použijí a nemusíš mít chaos v dokumentaci.

V konečném důsledku je klíčové udržet API co nejjednodušší a nejčitelnější pro uživatele, takže sleduj, co tvé klienty bolí a přizpůsobuj se tomu.

204 slov
2 minut čtení
30. 4. 2024
Nikola Valentová

Verzování GraphQL API může být trochu složitější než u REST. Obecně bych doporučil se vyhnout vytváření nových endpointů pro každou verzi, protože to může rychle zkomplikovat věci. Místo toho se snaž udržovat jedno schéma a používat přístup, který je forward a backward compatible. To znamená, že když přidáš nové pole nebo typy, stávající dotazy by neměly přestat fungovat. Pokud musíš udělat nějaké breaking changes, tak je dobré je pečlivě zdokumentovat a třeba dávat klientům možnost přepnout na starší verzi pomocí hlavičky nebo argumentu v dotazu.

K migraci databáze – obvykle nemusíš migrovat data při každé malé změně API. Ale pokud děláš velké změny, pak se může hodit mít migrační skripty, které zajistí, že data budou odpovídat novému schématu. Použij třeba verze schémat v názvu typu a dej na to jasné příklady v dokumentaci API.

Zamysli se i nad tím, jak budou klienti používat tvé API – pokud máš dlouhodobé klienty, možná bude lepší mít nějaký způsob, jak podpořit starší verze. Takže shrnuto, drž se kompatibility, dokumentuj změny a migrace dat řeš podle potřeby.

171 slov
1.7 minut čtení
22. 1. 2023
Štěpán Vaculík
GraphQL.cz/Články/GraphQL a SQL databáze
Usnadnění verzování API s GraphQL a SQL databázemiČlánek se zaměřuje na techniky správy verzí GraphQL API ve spojení se změnami ve struktuře SQL databáze a přináší užitečné tipy pro vývojáře.
1000 slov
10 minut čtení
15. 2. 2020
Barbora Němcová
Přečíst článek
Podobné otázky