GraphQL.cz/Fórum/Jak řešit konflikty ve verzování API s GraphQL a SQL?

Jak řešit konflikty ve verzování API s GraphQL a SQL?

Zajímalo by mě, jak se vlastně řeší konflikty při verzování API, když pracujeme s GraphQL a SQL. Mám pocit, že když používáme GraphQL, tak máme tu svobodu v dotazech a v tom, jak data strukturovat, ale zároveň to může znamenat i problémy, pokud se rozhodneme měnit strukturu našeho API. Jakým způsobem tedy zajistit, aby naše změny neovlivnily klienty, kteří už používají starší verze? Co se týče SQL databáze, tam zase často narážíme na to, že změny v databázích mohou znamenat nutnost upravit nejen backend, ale i front-end aplikace. Jaké jsou nejlepší praktiky pro správu verzí API tak, aby se minimalizovaly tyto konflikty? Rád bych slyšel také názory na to, jestli je lepší mít více verzí API nebo spíše dodržovat nějakou strategii evoluce stávajícího API. Měly by být změny dokumentovány nějakým specifickým způsobem, nebo stačí jen základní přehled? Co se tedy osvědčilo vám v praxi? Jak si s tímto problémem poradili ostatní vývojáři? Klidně podělte se o konkrétní příklady a zkušenosti.

160 slov
1.6 minut čtení
17. 12. 2020
Zdeněk Koudelka

Verzování API je celkem oříšek, obzvlášť když jedeš na GraphQL. Základní pravidlo je snažit se dělat zpětně kompatibilní změny. Když měníš strukturu, třeba přidáváš nové pole místo toho, abys něco mazal. Klient, co už funguje, by měl mít pořád šanci se dostat k těm starším datům. Pokud už musíš něco vyhodit, je lepší to udělat až po nějakém přechodném období, kdy to budeš deprekovat a dáš lidem vědět, že to zmizí. Co se týče verzování, tak jsou dva přístupy – buď mít víc verzí API (např. /v1/, /v2/), nebo se snažit evolvovat to stávající bez verzí. Osobně preferuju evoluci, ale je to na zvážení. Dokumentace je pak zásadní – jasně popiš změny v changelogu a dej tam příklady dotazů. U SQL databáze pak musíš dávat pozor na migrace a dodržovat pravidla pro úpravy tabulek, aby se to nedotklo front-endu. Takže v krátkosti: zpětná kompatibilita, jasná dokumentace a přechodné období jsou klíčové faktory.

152 slov
1.5 minut čtení
10. 3. 2021
Viktor Polák

Takže ohledně verzování API s GraphQL a SQL, to je fakt oříšek. Když máš GraphQL, tak si můžeš šáhnout na cokoliv a to je super, ale přesně jak říkáš, ty změny pak můžou rozbít starší klienty. Osobně doporučuju používat versioning na úrovni endpointů, třeba /api/v1/ a pak /api/v2/, i když někteří říkají, že bys měl spíš evolvovat to stávající API a ne dělat nové verze. Záleží na tom, jak velké změny děláš. Pokud měníš strukturu dat, tak je dobrý mít nějaký systém na přesměrování nebo fallback, aby ti to nebombardovalo staré aplikace.

Co se týče SQL, tam se snažím dodržovat migrace a verzování databáze. Každá změna v DB by měla mít migraci, což ti pomůže udržet přehled o tom, jak se struktura mění. Měj na paměti, že někdy je lepší udělat "non-breaking changes", jako třeba přidat nový field místo toho, abys přepsal existující. A dokumentace? Určitě mít nějakou formu dokumentace pro změny je klíčový, ale nemusíš to přehánět s detaily. Měl bys mít aspoň poznámky o tom, co se kdy změnilo a proč.

Každý to dělá trochu jinak, ale u mě se osvědčilo mít pravidelný schůzky s týmem a projít si plánované změny a co to znamená pro klienty. Když se dělají větší refaktoringy, tak je fajn mít beta verzi pro testování před tím, než to vypustíš do světa. Takže tak nějak v kostce - versioning endpointů, migrace DB, non-breaking changes a solidní dokumentace. Snad to pomůže!

235 slov
2.4 minut čtení
11. 5. 2022
Eva Švábová

Takže, když jde o verzování API s GraphQL a SQL, tak to může být docela oříšek. U GraphQL máš tu výhodu, že si klienti můžou dotazovat, co potřebují, ale jakmile změníš strukturu, můžeš narazit na problémy. Nejlepší je asi se snažit dodržet zpětnou kompatibilitu. Třeba přidávat nové pole místo toho, abys stávající měnil nebo mazal. To pomůže udržet stávající klienty v chodu.

Co se týká SQL, tam je to často o migracích. Změny v databázi by měly být dobře naplánované, a pokud je to možné, tak používat přidání nových sloupců a tabulek místo zásahů do existujících. Pokud už něco měníš, tak je dobré mít nějaký testovací prostředí, kde to vyzkoušíš.

Pokud jde o verze API, já bych doporučil mít spíš jednu verzi a vyvíjet ji evolučně. Různé verze mohou zbytečně komplikovat údržbu. A ohledně dokumentace – měl bys mít jasný přehled změn, ideálně s příklady dotazů a odpovědí. V tomhle ohledu se hodí nástroje jako Swagger nebo něco podobného pro generaci dokumentace.

V praxi jsme si osvědčili mít changelog, kde jasně popíšeme, co se změnilo. To pak usnadní život nejen nám, ale i klientům, kteří to používají. Obecně se snažím komunikovat se všemi uživateli API, aby věděli o změnách dopředu.

197 slov
2 minut čtení
18. 11. 2021
Bohuslav Dostál
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