Čá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.

  1. POST /applications
  2. Čeká na všechny služby
  3. Timeout
  4. 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

  1. POST /applications
  2. 202 + operationId
  3. GET /operations/{id}
  4. Stav: v řešeníz projekce

Souvislosti

  1. correlationIddrží celý proces
  2. causationIdco událost vyvolalo
  3. Ř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í