Konzumace REST API a HttpClient

Miroslav Holec       07.08.2020       .NET Tips, .NET Core, ASP.NET Core       1810 zobrazení

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.


 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

 

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback