Web API - HTTP hlavičky

V kontextu API je práce s HTTP hlavičkami klíčovou součástí správné komunikace mezi klientem a serverem. Hlavičky HTTP poskytují důležité informace, které ovlivňují, jak se požadavky zasílají a jak jsou odpovědi interpretovány. Tyto informace mohou zahrnovat údaje o typu obsahu, autentizaci, kompresi dat a mnoho dalších aspektů komunikace. Správné nastavení a interpretace těchto hlaviček je nezbytné pro zajištění bezpečnosti, efektivity a kompatibility různých částí systému. V této kapitole se podrobně zaměříme na popis vybraných polí v HTTP hlavičce a na to.

Hlavička Hodnota
Accept-Encoding

Pole Accept-Encoding v hlavičce HTTP požadavku informuje server o tom, jaké metody komprese je klient schopen rozpoznat a přijmout. Web API systému ABRA Gen podporuje kompresi gzip.

Accept

Pole Accept určuje, jaké typy médií (MIME typy) je klient ochoten přijmout jako odpověď od serveru. Tímto způsobem klient informuje server o formátech obsahu, které může správně zpracovat. Například, nastavením Accept na application/json klient říká, že preferuje nebo očekává odpověď ve formátu JSON. Tento mechanismus pomáhá zajistit, že komunikace mezi klientem a serverem bude efektivní a že data budou vyměňována v požadovaném formátu.

X-Request-ID

Volitelná hlavička. Pokud není vyplněna uživatelem, systém automaticky vygeneruje unikátní identifikátor (GUID) a přidá ho jako hlavičku do zpracovávaného požadavku. Tato identifikace se pak objevuje v logovacích záznamech obou částí systému. A to jak na straně javovského serveru (logování pomocí APIServer.yaml), tak na straně klientské aplikace (logování business logiky pomocí nexus.cfg). V logovacích záznamech je identifikátor uvozen jako "rid". Smyslem této hlavičky je snadná identifikace konkrétního požadavku v obou lozích.

Mějme následující požadavek na endpoint /firms:

GET http://localhost:81/demodata/firms?select=id,name

Výpis z logu nastaveném v APIServer.yaml:

http://localhost:81/demodata/firms?select=id,name   rid:API_57f8e0edcac64d87b2547f0cda1bdd66
...
2024-02-25 16:10:06.842 [5] 0000000F (REQUESTSLOGGER) Request stop: status 200 OK   rid:API_57f8e0edcac64d87b2547f0cda1bdd66

Výpis z logu nastaveném pomocí v NEXUS.CFG:

25.02.2024 16:10:06.743 [4] 00001378 (WA/RESTApplication/ProfilingRequest) TAKE: CRED: data;Supervisor;ekInprocess ID: 00006E5C rid:API_57f8e0edcac64d87b2547f0cda1bdd66
25.02.2024 16:10:06.743 [5] 00006E5C (WA/RESTApplication/ProfilingRequest) Request start: GET http://localhost:8082/data/firms?select=id,name rid:API_57f8e0edcac64d87b2547f0cda1bdd66

25.02.2024 16:10:06.817 [6] 00006E5C (WA/RESTApplication/ProfilingRequest) Start read sql - InputParams: @{$IndexAndWhere}=;
  select T_1.ID as ID, T_1.Name as Name
  from Firms T_1
  where (not (T_1.Hidden = 'A')) and (T_1.Firm_ID is null)
25.02.2024 16:10:06.837 [6] 00006E5C (WA/RESTApplication/ProfilingRequest) Stop read sql duration: 16 ms
25.02.2024 16:10:06.838 [5] 00006E5C (WA/RESTApplication/ProfilingRequest) Request stop: status 200  time: 94 ms rid:API_57f8e0edcac64d87b2547f0cda1bdd66
25.02.2024 16:10:06.839 [5] 00006E5C (WA/RESTApplication/ProfilingRequest) 
25.02.2024 16:10:06.840 [4] 00001378 (WA/RESTApplication/ProfilingRequest) RETURN: CRED: data;Supervisor;ekInprocess ID: 00006E5C rid:API_57f8e0edcac64d87b2547f0cda1bdd66

Seznam nejčastěji používaných hlaviček a jejich popis je dostupný, např. zde.