Konzumovat nejen RESTová API je celkem věda. Teoreticky si vystačíte s HttpClient třídou a můžete vesele provolávat vzdálená (nejen RESTová) API. Jenomže svět není jednoduchý, vývojáři nejsou dokonalí a většina API, se kterými budete chtít komunikovat Vám budou házet klacky pod nohy.
Proto jsem udělal webinář, jehož hlavní teze bych chtěl nasdílet pro ty z Vás, kteří dáváte přednost samostudiu.
- před konzumací REST API zkontroluji, zda k němu neexistuje SDK (NuGet)
- když není NuGet, kouknu zda neexistuje specifikace, ze které mohu něco generovat (OAS, BluePrint)
- když není ani specka, hledám dokumentaci a alespoň si pomohu třeba generováním JSON 2 C#
- pokud mohu, používám HttpClientFactory místo přímého použití HttpClient
- když už musím použít HttpClient, jeho instanci si držím v paměti (static / singleton)
- když nemusím, nepoužívám nic mimo HttpClientFactory / HttpClient
- pro komunikaci s každým API mám speciální třídu (do které se injectuje HttpClient nebo Factory)
- dávám přednost novému System.Text.Json serializeru před Newtonsoft.Json
- když API podporuje JSON, dávám mu přednost před XML
- vždy nastavuji výchozí request HTTP hlavičky a jasně definuji jaká chci data
- vždy kontroluji vrácená data pomocí HTTP hlaviček (zda jsem dostal, co jsem chtěl)
- ve scénářích, kde teče více dat používám Stream místo držení stringů in-memory
- analyzuji konzumované API, protože v něm s jistotou nebudou dodrženy REST principy
- u status kódu accepted, created vždy kontroluji přítomnost hlavičky location
- v souvislosti se streamy a dalšími třídami hlídám pečlivě co je disposable (skoro všechno)
- cancellationtoken je kamarád, který musí být u všeho a všude
- opakované rutiny řeším (pokud to jde) pomocí DelegatingHandlerů (včetně auth)
- ve výchozím nastavení mám přiměřený timeout
- když je aplikace na API voláních hodně závislá, zapojuji RetryPolicy
- i když dělám konzolovku, přidávám do ní extensions pro MS Dependency Injection + Config
Tolik k zásadám konzumace REST API. Pak tu je celá řada věcí, které souvisí s bodem (13). Protože většina RESTových API nedodržuje některé základní zásady (stavové kódy, způsob komunikace, podoba resources, formát dat, chyby dle RFC), je potřeba ke konzumaci každého vzdáleného zdroje přistupovat individuálně.
Pokud Vás body výše zaujaly a nechcete je studovat po vlastní ose, přihlaste se na můj webinář.
Webinář: Konzumace REST API v .NET Core
Během 3 hodin Vás s celou problematikou seznámím. Od scénářů jak si usnadnit práci až po konkrétní ukázky použití HttpClienta v CRUD scénářích. Část webináře věnuji také práci se streamy a otázkám kolem performance. Absolvováním webináře se navíc vžijete do role konzumenta REST API a mimo jiné pochopíte, proč je důležité mít REST API navržené správně.
Registrace na webinář je možná zde.