Část 07 z 16 · Den 1 · 202 Accepted, correlation ID
Odpověď dřív než výsledek
Problém a zkušenost
API řeklo 200. A co se stalo potom?
Žádost se zpracovává minuty. Klient potřebuje vědět, že ji přijmeme, a podívat se, jak to dopadlo.
- POST /applications
- Čeká na všechny služby
- Timeout
- Klient ví jen „chyba“
Zkušenost z praxeCo dnes vrací vaše API, když práce trvá déle než pár vteřin?
TakeawayDlouhá práce potřebuje jiné API než krátká.
Více k tématu
Co to znamená
Synchronní odpověď „hotovo“ u dlouhých procesů nejde. Klient potřebuje potvrzení přijetí a způsob, jak zjistit výsledek.
Proč to používáme
Jinak buď čeká, nebo musí hádat.
Kdy to dává smysl
U všeho, co závisí na asynchronním zpracování.
Kde se to láme
- Držet HTTP spojení, dokud se vše nedokončí.
- Vrátit 200 dřív, než je žádost opravdu přijata.
- Nemít žádný identifikátor operace.
Představme si
Žádost se zpracovává deset minut. Klient odeslal formulář a vidí jen točící se kolečko.
Přijetí a dokončení jsou dvě různé odpovědi.
Princip, aplikace a cvičení
202, identifikátor operace a stopa příčin
API vrátí 202 Accepted a operationId. Každá událost ví, co ji vyvolalo. Stav operace čte klient z projekce.
Klient
- POST /applications
- 202 + operationId
- GET /operations/{id}
- Stav: v řešeníz projekce
Souvislosti
- correlationIddrží celý proces
- causationIdco událost vyvolalo
- Řetěz zpracování
Trade-offKlient se musí umět ptát a čekat. Identifikátory musí projít všemi službami a logy, jinak řetěz neslepíme.
TakeawayCorrelation ID spojuje proces. Causation ID ukazuje, co přímo vyvolalo další krok.
Více k tématu
Co to znamená
Correlation ID propojuje zprávy jednoho procesu. Causation ID ukazuje na bezprostřední zprávu, která vyvolala vznik té další. Pomáhají rekonstruovat řetěz zpracování, ne odhalit motivy klienta.
Proč to používáme
Bez nich dohledáváme, co se s žádostí stalo, ručně v logách deseti služeb.
Kdy to dává smysl
Vždy u procesů přes víc služeb.
Kde se to láme
- Identifikátor se ztratí při přechodu mezi službami.
- Spoléhat na čas místo pořadového čísla v rámci korelace.
- Zaměnit čas události a čas, kdy se o ní systém dozvěděl.
Představme si
Klient odeslal žádost a dostal operationId. Kdykoli se zeptá, vidí aktuální stav, a my podle correlationId dohledáme celý řetěz.
Stav operace je data, ne otázka, na kterou se musí odpovědět hned.
Školení pro váš tým
Chcete školení pro svůj tým?
Školení vedeme na vašem kódu a vašem doménovém problému. Domluvíme rozsah, termín a formu.
Probrat školení →