Jak testovat GraphQL API: oprávnění, chyby a náročné dotazy
GraphQL je způsob, jak mezi aplikacemi zpřístupnit data prostřednictvím API. Klient si v požadavku vybere pole, která potřebuje, a může si vyžádat také související údaje. Tato flexibilita snižuje počet samostatných volání, ale přináší zvláštní rizika v oblasti oprávnění, zpracování chyb a výkonu.
V čem je problém
U GraphQL nestačí pouze zopakovat kontroly připravené pro REST. Aplikace využívající GraphQL často zpřístupňují jeden koncový bod neboli endpoint, který lze volat s mnoha kombinacemi polí a vnořených vztahů.
Pokud se oprávnění kontroluje pouze u hlavního objektu, vnořený dotaz může nechtěně zpřístupnit údaje, které uživatel nemá vidět. Velmi hluboký nebo rozvětvený dotaz zase může spotřebovat nepřiměřené množství prostředků. Uživatelské rozhraní přitom používá pouze několik připravených dotazů, takže tyto situace nemusí odhalit.
Co ověřovat navíc
Základ zůstává stejný jako u kteréhokoli API: správnost odpovědí, chybové stavy a hraniční hodnoty. U GraphQL k tomu přidáváme:
- Různé kombinace vybraných polí – nejen běžný úspěšný požadavek, ale také kombinace, které používají mobilní aplikace, partneři nebo starší verze klienta.
- Oprávnění napříč vnořenými dotazy – zda se přes vztah mezi objekty nelze dostat k datům, na která uživatel nemá právo.
- Chování při chybě – při chybě během provádění dotazu může odpověď obsahovat stav HTTP
200a podrobnosti v polierrors. Proto ověřujeme stavový kód i tělo odpovědi. - Náročnost dotazů – omezení hloubky, složitosti nebo počtu výsledků, aby jeden dotaz nepřiměřeně nezatížil server.
Jak to řešíme
Nejprve si sepíšeme operace, uživatelské role a klienty, kteří API volají. Poté připravíme pozitivní i negativní scénáře v Pythonu s pytestem nebo v Playwrightu a podle potřeby je zapojíme do CI/CD. Autorizační matici ověřujeme také přes vnořené vztahy; náročné dotazy posuzujeme společně s limity a měřením výkonu. Pokud se na API spoléhá více klientů, může být vhodným doplňkem kontraktní testování.
Co z toho máte
- Lepší přehled o tom, které role mají přístup ke kterým údajům.
- Chyby odhalené přímo na vrstvě API, kde se obvykle snáze hledá jejich příčina.
- Rychlejší zpětnou vazbu v CI, pokud testy zapojíte do pipeline.
Další krok
Pokud chcete zjistit, zda vaše GraphQL testy pokrývají oprávnění, kombinace polí i chybové stavy, začněte seznamem operací a uživatelských rolí. Dalším krokem může být nezávazná konzultace, na které společně určíme vhodný rozsah.