Webhookã®ä¿¡é Œæ§ãã§ãã¯ãªã¹ãïŒãªãã©ã€ãåªçæ§ãåå®è¡
å®ååãWebhookä¿¡é Œæ§ãã§ãã¯ãªã¹ãïŒãªãã©ã€ãåªçæ§ãåå®è¡ãã°ãç£æ»ãšåä¿¡/éä¿¡Webhookã®éçšã§ããŒãããŒé害ã«åããããã®å®è·µã¬ã€ãã

å®åã§Webhookãä¿¡é Œã§ããªãæããçç±
Webhookã¯ã·ã³ãã«ã§ãïŒäœããèµ·ãããšãã«äžæ¹ã®ã·ã¹ãã ãããäžæ¹ãžHTTPãªã¯ãšã¹ããéãã ãã§ãã ãæ³šæãçºéããããããã±ãããæŽæ°ãããããããã€ã¹ããªãã©ã€ã³ã«ãªã£ãããã¢ããªå士ã®ããã·ã¥éç¥ã®ãããªãã®ã§ãã
ãã¢ã§ã¯ããããŒãã¹ãéããŠããããªã®ã§ä¿¡é Œã§ããŠèŠããŸããå®åã§ã¯ãWebhookã¯ããªãã®ç®¡çå€ã«ããã·ã¹ãã ã®éã«å ¥ããŸãïŒCRMãé 鿥è ããã«ããã¹ã¯ãããŒã±ãã£ã³ã°ããŒã«ãIoTãã©ãããã©ãŒã ãå¥ããŒã ãéçšããå éšã¢ããªãªã©ã決æžä»¥å€ã§ã¯ãé ä¿¡ä¿èšŒãå®å®ããã€ãã³ãã¹ããŒããäžè²«ãããªãã©ã€åäœãæåŸ ãã«ãããªããŸãã
æåã«åºãçç¶ã¯ãããŠãæ··ä¹±ãæããŸãïŒ
- ã€ãã³ãã®éè€ïŒåãæŽæ°ãäºåºŠå±ãïŒ
- ã€ãã³ãã®æ¬ èœïŒå€æŽããã£ãã®ã«éç¥ãå±ããªãïŒ
- é å»¶ïŒæŽæ°ãæ°åãæ°æéåŸã«å±ãïŒ
- é åºã®ããïŒãéãããããéãããããå ã«å±ãïŒ
äžå®å®ãªãµãŒãããŒãã£ã¯å€±æã®å£°ãå°ãããããã©ã³ãã ã«èŠããŸãããããã€ããã¿ã€ã ã¢ãŠããããå®éã«ã¯ãªã¯ãšã¹ããåŠçããŠããããããŒããã©ã³ãµãæ¥ç¶ãåã£ãåŸã«éä¿¡åŽãå詊è¡ããããçæéã®ããŠã³ã®åŸã«å€ãã€ãã³ããäžæã«éã£ãŠããããšããããŸãã
äŸãã°é éããŒãããŒããé éæžã¿ãã®WebhookãéããšããŸããåãåŽããã®æ¥3ç§é ãå¿çããããã«éä¿¡åŽããªãã©ã€ãè¡ããäºéé ä¿¡ãèµ·ããŠé¡§å®¢ã«äºéã¡ãŒã«ãè¡ããµããŒããæ··ä¹±ãããå¥ã®æ¥ã«ããŒãããŒãé害ãèµ·ãããŠãŸã£ãããªãã©ã€ããªããã°ããé éæžã¿ããå±ããããã·ã¥ããŒããæŽæ°ãããªããŸãŸã«ãªããŸãã
Webhookã®ä¿¡é Œæ§ã¯ãå®ç§ãª1åã®ãªã¯ãšã¹ããã§ã¯ãªããçŸå®ã®æ··ä¹±ã«å¯ŸåŠã§ããèšèšã§ãïŒãªãã©ã€ãåªçæ§ïŒidempotencyïŒãåŸããåå®è¡ããŠç¢ºèªã§ããä»çµã¿ã
3ã€ã®åºæ¬èŠçŽ ïŒãªãã©ã€ãåªçæ§ãåå®è¡ïŒreplayïŒ
Webhookã«ã¯åä¿¡ïŒinboundïŒãšéä¿¡ïŒoutboundïŒã®äž¡æ¹ããããŸããåä¿¡Webhookã¯å€éšïŒæ±ºæžãããã€ããCRMãé éããŒã«ïŒããããªããåãåãã³ãŒã«ãéä¿¡Webhookã¯ããªãã顧客ãããŒãããŒãžéãã³ãŒã«ã§ããã©ã¡ããããªãã®ã³ãŒãã«åå ããªãçç±ã§å€±æããããšããããŸãã
ãªãã©ã€ã¯å€±æåŸã«èµ·ããããšã§ããéä¿¡åŽã¯ã¿ã€ã ã¢ãŠãã500ç³»ãšã©ãŒãæ¥ç¶åæããããã¯å¿çãé ããšå€æãããšãã«å詊è¡ããŸããè¯ããªãã©ã€ã¯çšãªäŸå€ã§ã¯ãªãæ³å®ãããåäœã§ãåä¿¡åŽãéè² è·ã«ããå¯äœçšãäºéã«ããªãã®ãç®çã§ãã
åªçæ§ã¯éè€ãå®å šã«ããæ¹æ³ã§ãããäºååãåã£ãŠãäžåºŠã ãå®è¡ããããšããæå³ã§ããåãWebhookãå床å±ãããæ€åºããŠæåãè¿ããããžãã¹ã¢ã¯ã·ã§ã³ãäºåºŠå®è¡ããªãïŒäŸãã°è«æ±æžãäºåºŠäœããªãïŒããã«ããŸãã
åå®è¡ïŒreplayïŒã¯å埩ã®ãã¿ã³ã§ãããã°ä¿®æ£åŸãããŒãããŒã®é害åŸã«ãéå»ã®ã€ãã³ããæå³çãã€å¶åŸ¡ãããæ¹æ³ã§ååŠçããæ©èœã§ãããªãã©ã€ã¯èªåã§å³æçãreplayã¯æå³çã§æ°æéãæ°æ¥åŸã«è¡ãããããšãå€ãç¹ãéããŸãã
Webhookã®ä¿¡é Œæ§ãç®æããªããããã€ãã®ç®æšã決ããŠèšèšããŠãã ããïŒ
- 倱ãããªãã€ãã³ãïŒåä¿¡ãŸãã¯éä¿¡ãã詊è¡ããã€ã§ãèŠã€ããããïŒ
- å®å šãªéè€ïŒãªãã©ã€ãreplayã§äºéè«æ±ãäºéäœæãäºéã¡ãŒã«ãçºçããªãïŒ
- æç¢ºãªç£æ»ãã¬ã€ã«ïŒãäœãèµ·ããïŒãã«çŽ æ©ãçããããïŒ
å®åçã«ã¯ããã¹ãŠã®Webhook詊è¡ãã¹ããŒã¿ã¹ãšäžæã®idempotencyããŒã§ä¿åããã®ã广çã§ããå€ãã®ããŒã ã¯ãããå°ããªãwebhook inbox/outboxãããŒãã«ãšããŠå®è£ ããŸãã
åä¿¡WebhookïŒåå©çšã§ããåä¿¡ãããŒ
ã»ãšãã©ã®Webhookåé¡ã¯éä¿¡åŽãšåä¿¡åŽã®ã¯ããã¯ãšå®è¡ç°å¢ãç°ãªãããšããèµ·ããŸããåä¿¡è ãšããŠã®ããªãã®åœ¹å²ã¯äºæž¬å¯èœã§ããããšïŒãã°ããåçããå±ãããã®ãèšé²ããå®å šã«åŠçããããšã§ãã
ãåçããšãåŠçããåãã
HTTPãªã¯ãšã¹ããéãä¿ã¡ãæ¬åœã®ä»äºã¯å¥ã®å Žæã§è¡ããããŒãäœã£ãŠãã ãããããã«ããã¿ã€ã ã¢ãŠããæžãããªãã©ã€ã®ãã¡ãŒãžãå°ãããªããŸãã
- éããã«åçããããªã¯ãšã¹ããåãå ¥ãå¯èœãªãéããã«2xxãè¿ãã
- åºæ¬ãã§ãã¯ããããContent-Typeãå¿ é ãã£ãŒã«ããããŒã¹ã®æ€èšŒãè¡ãã眲åããããªãããã§æ€èšŒããã
- çã®ã€ãã³ããæ°žç¶åãããæ¬æãšå¿ èŠãªãããïŒçœ²åãã€ãã³ãIDïŒãåä¿¡ã¿ã€ã ã¹ã¿ã³ãããreceivedããªã©ã®ã¹ããŒã¿ã¹ãšäžç·ã«ä¿åããã
- äœæ¥ããã¥ãŒã«å ¥ãããããã¯ã°ã©ãŠã³ãåŠççšã®ãžã§ããäœãã2xxãè¿ãã
- æç¢ºãªçµæã§åŠçãããå¯äœçšãæåãããšãã ãã€ãã³ãããprocessedãã«ããŒã¯ããã倱æãããçç±ãšå詊è¡ãå¿ èŠãã©ãããèšé²ããã
ãéãå¿çãããã®ç®å®
çŸå®çãªç®æšã¯1ç§æªæºã§å¿çããããšã§ããéä¿¡åŽãç¹å®ã®ã³ãŒããæåŸ ããŠãããªãããã«åãããŠãã ããïŒå€ãã¯200ãããã€ãã¯202ã奜ãïŒãéä¿¡åŽãå詊è¡ãã¹ãã§ãªãå Žåã¯4xxãè¿ããŸãïŒäŸãã°ç¡å¹ãªçœ²åïŒã
äŸïŒdbãé«è² è·ã®ãšãã«customer.createdã®Webhookãå±ããŠãããã®ãããŒãªãçã®ã€ãã³ããä¿åãããã¥ãŒã«å
¥ããŠ2xxã§å¿çã§ããŸããã¯ãŒã«ãŒã¯åŸã§å詊è¡ã§ããŸãããéä¿¡åŽã®åéã¯äžèŠã«ãªããŸãã
é ä¿¡ãå£ããªãåä¿¡æã®ã»ãã¥ãªãã£ãã§ãã¯
ã»ãã¥ãªãã£ãã§ãã¯ã¯éèŠã§ãããç®çã¯æªæãããã©ãã£ãã¯ããããã¯ãã€ã€æ£åœãªã€ãã³ãã¯é®ããªãããšã§ããå€ãã®é ä¿¡åé¡ã¯åä¿¡åŽãå³ãããããã誀ã£ãã¬ã¹ãã³ã¹ãè¿ãããããããšãåå ã§ãã
ãŸãéä¿¡è ã蚌æããŸãããã眲åä»ããªã¯ãšã¹ãïŒHMAC眲åãããïŒãå ±æã·ãŒã¯ã¬ããããããåªå ãã倧ããªåŠçãè¡ãåã«æ€èšŒããŠãæ¬ ããŠãããééã£ãŠããå Žåã¯ããã«å€±æãããŸãã
ã¹ããŒã¿ã¹ã³ãŒãã®æ±ãã«æ³šæããŠãã ããããªãã©ã€ã®åäœãå¶åŸ¡ããŸãïŒ
- èªèšŒå€±æã«ã¯401/403ãè¿ããŠéä¿¡åŽãæ°žä¹ ã«ãªãã©ã€ããªãããã«ããã
- JSONã®äžæ£ãå¿ é ãã£ãŒã«ãã®æ¬ èœã«ã¯400ãè¿ãã
- ããªãã®ãµãŒãã¹ãäžæçã«åãå ¥ããããªãå Žåã®ã¿5xxãè¿ãã
IPã®èš±å¯ãªã¹ãã¯ãããã€ããå®å®ããããã¥ã¡ã³ãåãããIPç¯å²ãæäŸããå Žåã«æå¹ã§ããIPãé »ç¹ã«å€ããããŸãã¯å€§ããªã¯ã©ãŠãããŒã«ã䜿ããããã€ãã§ã¯ãèš±å¯ãªã¹ããæ£åœãªWebhookãéãã«èœãšããŠããšã§ããæ°ã¥ããªãããšããããŸãã
ãããã€ããã¿ã€ã ã¹ã¿ã³ããšäžæã®ã€ãã³ãIDãæäŸããŠãããªããreplayä¿è·ãå¯èœã«ãªããŸãïŒå€ãããã¡ãã»ãŒãžãæåŠããæè¿ã®IDã远跡ããŠéè€ãæ€åºããŸããã¿ã€ã ãŠã£ã³ããŠã¯å°ããä¿ã¡ã€ã€ãã¯ããã¯ã®ããã蚱容ããç¶äºãå ¥ããŠãã ããã
åä¿¡è åãã®ç°¡åãªã»ãã¥ãªãã£ãã§ãã¯ãªã¹ãïŒ
- 倧ããªãã€ããŒããããŒã¹ããåã«çœ²åãå ±æã·ãŒã¯ã¬ãããæ€èšŒããã
- æå€§ããã£ãµã€ãºãšçãã¿ã€ã ã¢ãŠããèšå®ããã
- èªèšŒå€±æãäžæ£ãªã¹ããŒãã«ã¯401/403ã400ãè¿ããåçããã€ãã³ãã«ã¯2xxãè¿ãã
- ã¿ã€ã ã¹ã¿ã³ãããã§ãã¯ãããªããæ°åçšåºŠã®ç¶äºã蚱容ããã
ãã°ã§ã¯ç£æ»ãã¬ã€ã«ãæ®ãã€ã€ãææãªããŒã¿ãæ°žä¹ ä¿åããªãã§ãã ãããã€ãã³ãIDãéä¿¡è åãåä¿¡æéãæ€èšŒçµæãçã®æ¬æã®ããã·ã¥ãä¿åããŸãããã€ããŒããä¿åããå¿ èŠãããå Žåã¯ä¿ææéãèšããã¡ãŒã«ã¢ãã¬ã¹ãããŒã¯ã³ãæ¯æãæ å ±ãªã©ã¯ãã¹ã¯ããŠãã ããã
å©ãã«ãªããªãã©ã€èšèš
ãªãã©ã€ã¯çæã®åé¡ãé ä¿¡æåã«å€ããã®ã§æçšã§ããäžæ¹ã§ãã©ãã£ãã¯ãå¢å¹ ãããæ¬åœã®ãã°ãé ãããéè€ãçãã ããããšå®³ã«ãªããŸããå·®ã¯ãäœãå詊è¡ãããããã©ã®ããã«ééããããããããã€æ¢ãããããæç¢ºã«ããããšã§ãã
åºæºãšããŠã¯ãåä¿¡åŽãåŸã§æåããèŠèŸŒã¿ããããšãã ããªãã©ã€ããŠãã ãããç°¡åãªèãæ¹ã¯ãäžæçãªé害ã¯å詊è¡ãéä¿¡åŽã®ééãã¯å詊è¡ããªããã§ãã
å®åçãªHTTPçµæã®åé¡ïŒ
- å詊è¡ããïŒãããã¯ãŒã¯ã¿ã€ã ã¢ãŠããæ¥ç¶ãšã©ãŒãHTTP 408ã429ã500ã502ã503ã504
- å詊è¡ããªãïŒHTTP 400ã401ã403ã404ã422
- å Žåã«ããå詊è¡ïŒHTTP 409ïŒéè€ãå®éã®ç«¶åãã«ããïŒ
ééã®ä»ãæ¹ãéèŠã§ããææ°ããã¯ãªããšãžãã¿ãŒã䜿ãã倿°ã®ã€ãã³ããåæã«å€±æããŠããªãã©ã€åµã«ãªããªãããã«ããŸããäŸïŒ5ç§ã15ç§ã45ç§ã2åã5åããããŠååã«å°ããªã©ã³ãã ãªãã»ãããå ããã
å詊è¡ã®æå€§ãŠã£ã³ããŠãšæç¢ºãªæã¡åããèšããŠãã ãããããããéžæã¯ãæå€§24æéå詊è¡ãããããæå€§10åãŸã§ããªã©ããããè¶ ãããé ä¿¡åé¡ã§ã¯ãªã埩æ§åé¡ãšããŠæ±ããŸãã
éçšã®ããã«ã€ãã³ãèšé²ã«ã¯æ¬¡ãå¿ ãæ®ããŠãã ããïŒ
- 詊è¡åæ°
- æåŸã®ãšã©ãŒ
- 次ã®è©Šè¡æå»
- æçµã¹ããŒã¿ã¹ïŒå詊è¡ããããå Žåã¯ãããã¬ã¿ãŒç¶æ ïŒ
ãããã¬ã¿ãŒã¢ã€ãã ã¯æ€æ»ãããããåé¡ä¿®æ£åŸã«å®å šã«åå®è¡ã§ããããã«ããŠãããŸãã
å®åã§äœ¿ããåªçæ§ãã¿ãŒã³
åªçæ§ã¯åãWebhookãäœåºŠåãåã£ãŠãäœèšãªå¯äœçšãèµ·ããªãããšãä¿èšŒããŸãããªãã©ã€ãã¿ã€ã ã¢ãŠãã¯èµ·ãããã®ãªã®ã§ãåªçæ§ãåãå ¥ããã ãã§ä¿¡é Œæ§ã倧ããäžãããŸãã
å®å®ããããŒãéžã¶
ãããã€ããã€ãã³ãIDãããããªãããã䜿ãã®ãæãç°¡åã§ãã
ã€ãã³ãIDããªãå Žåã¯ã次ã®ãããªå®å®ãããã£ãŒã«ãããããŒãäœããŸãïŒããã·ã¥ãªã©ã§ïŒïŒ
- ãããã€ãå + ã€ãã³ãçš®å¥ + ãªãœãŒã¹ID + ã¿ã€ã ã¹ã¿ã³ã
- ãããã€ãå + ã¡ãã»ãŒãžID
ããŒãšåä¿¡æå»ããããã€ããã€ãã³ãçš®å¥ãçµæãäžç·ã«ä¿åããŠãã ããã
äžè¬çã«å¹ãã«ãŒã«ïŒ
- ããŒã¯å¿ é æ±ãã«ãããäœããªãã€ãã³ãã¯æšæž¬ããéé¢ããã
- ããŒã¯TTLïŒ7ã30æ¥ãªã©ïŒãä»ããŠããŒãã«ãç¡éã«å¢ããªãããã«ããã
- åŠççµæãä¿åããŠãéè€æã«äžè²«ããå¿çãè¿ããããã«ããã
- ããŒã«ãŠããŒã¯å¶çŽãä»ãã䞊åã®åæåŠçã§äºéå®è¡ãããªãããã«ããã
ããžãã¹åŠçèªäœãåªçã«ãã
ããŒã®ããŒãã«ããã£ãŠããå®éã®æäœèªäœãå®å
šã§ãªããã°æå³ããããŸãããäŸïŒcreate orderã®Webhookã¯ãæåã®æ¿å
¥ãã¿ã€ã ã¢ãŠãããåŸã«äºã€ç®ã®æ³šæãäœã£ãŠããŸããªãããã«ãå€éšã®æ³šæIDãå€éšãŠãŒã¶ãŒIDã䜿ã£ãŠupsertãããªã©ã®ãã¿ãŒã³ã䜿ããŸãã
é åºãååŸããããšã¯ãããããŸããuser_updatedãuser_createdããå
ã«å±ããå Žåãevent_versionãæ°ãããšãã ãé©çšããããããã¯updated_atãæ¢åããæ°ããå Žåã®ã¿æŽæ°ããããªã©ã®ã«ãŒã«ã決ããŠãã ããã
ãã€ããŒããç°ãªãéè€ã¯æãåä»ã§ããäºåã«æ¹éãæ±ºããŠãããŸãããïŒ
- ããŒãäžèŽããããã€ããŒããç°ãªãå Žåã¯ãããã€ãã®ãã°ãšããŠã¢ã©ãŒããäžããã
- ããŒãäžèŽããå·®åãç¡èŠã§ãããã£ãŒã«ãã ãã§ããã°ç¡èŠããã
- ãããã€ããä¿¡çšã§ããªããªãããã€ããŒãå šäœã®ããã·ã¥ãçšããæŽŸçããŒã«åãæ¿ããç«¶åã¯æ°ããã€ãã³ããšããŠæ±ãã
ç®çã¯åçŽïŒçŸå®äžçã®äžã€ã®å€æŽããäžã€ã®çµæã ããçã¿åºãããšãã¡ãã»ãŒãžãäžåå±ããŠãèŠããäžã¯äžåºŠããåŠçãããªãç¶æ ãäœãããšã§ãã
å埩ã®ããã®åå®è¡ããŒã«ãšç£æ»ãã°
ããŒãããŒãäžå®å®ãªãšããä¿¡é Œæ§ã¯å®ç§ãªé ä¿¡ãããçŽ æ©ãå埩ã«ããã£ãŠããŸããreplayããŒã«ãããã°ãããã€ãã®ã€ãã³ãã倱ã£ãããã«ãŒãã³äœæ¥ã«å€ãããŸãã
ãŸãåWebhookã®ã©ã€ããµã€ã¯ã«ã远ãã€ãã³ããã°ãäœã£ãŠãã ããïŒreceivedãprocessedãfailedãignoredãæéãã€ãã³ãçš®å¥ãé¢é£IDã§æ€çŽ¢ã§ããããã«ããŠããµããŒãããæ³šæ18432ã«äœãèµ·ããïŒãã«çããããããã«ããŸãã
åã€ãã³ãã«åå®è¡ã«ååãªã³ã³ããã¹ããä¿æããŠãã ããïŒ
- çã®ãã€ããŒããšããŒãšãªããããïŒçœ²åãã€ãã³ãIDãã¿ã€ã ã¹ã¿ã³ãïŒ
- æ£èŠåããŠæœåºãããã£ãŒã«ã
- åŠççµæãšãšã©ãŒã¡ãã»ãŒãžïŒããã°ïŒ
- åœæäœ¿ãããã¯ãŒã¯ãããŒïŒãããã³ã°ã®ããŒãžã§ã³
- åä¿¡ãéå§ãçµäºã®ã¿ã€ã ã¹ã¿ã³ã
ãããããã°ã倱æããã€ãã³ãã«å¯ŸããŠãReplayãã¢ã¯ã·ã§ã³ã远å ã§ããŸãããã¿ã³èªäœãããã¬ãŒãã¬ãŒã«ãéèŠã§ããè¯ãreplayãããŒã¯ä»¥åã®ãšã©ãŒãåå®è¡æã«äœãèµ·ããããå®å šã«åå®è¡å¯èœãã衚瀺ããŸãã
誀æäœãé²ãã¬ãŒãã¬ãŒã«äŸïŒ
- åå®è¡åã«çç±ãå¿ ãèšå ¥ããã
- åå®è¡æš©éãéãããããŒã«ã«éå®ãã
- åååŠçãšåãidempotencyãã§ãã¯ãåå®è¡æã«ãè¡ã
- åå®è¡ã®ã¬ãŒãå¶éãèšããŠã€ã³ã·ãã³ãäžã«æ°ããªã¹ãã€ã¯ãäœããªã
- æžã蟌ã¿ã䌎ããªãæ€èšŒã®ã¿ã®ãã©ã€ã©ã³ã¢ãŒããçšæãã
ã€ã³ã·ãã³ãã§ã¯è€æ°ã®ã€ãã³ããé¢ä¿ããããšãå€ãã®ã§ãæéç¯å²ã§ã®åå®è¡ïŒäŸïŒã10:05ã10:40ã®å€±æã€ãã³ããåå®è¡ãïŒããµããŒããã誰ããã€ãªãåå®è¡ãããããã°ã«æ®ããŠãã ããã
éä¿¡WebhookïŒç£æ»ã§ããéä¿¡ãããŒ
éä¿¡Webhookã¯éå±ãªçç±ã§å€±æããŸãïŒåä¿¡åŽãé ããçæéã®é害ãDNSã®åé¡ããããã·ãé·æéãªã¯ãšã¹ããåããªã©ãä¿¡é Œæ§ã¯åéä¿¡ã远跡å¯èœã§åçŸå¯èœãªãžã§ããšããŠæ±ãããšããçãŸããŸããåãªãäžåºŠããã®HTTPåŒã³åºãã«ããªãã§ãã ããã
äºæž¬å¯èœãªéä¿¡ãããŒ
åã€ãã³ãã«å®å®ããäžæã®ã€ãã³ãIDãä»äžããŠãã ããããã®IDã¯ãªãã©ã€ãreplayããµãŒãã¹åèµ·åã®éãåãã§ããã¹ãã§ãã詊è¡ããšã«æ°ããIDãçæãããšåä¿¡åŽã®éè€æé€ãããªãåŽã®ç£æ»ãé£ãããªããŸãã
åãªã¯ãšã¹ãã«ã¯çœ²åãä»ããã¿ã€ã ã¹ã¿ã³ããå«ããŠãã ãããã¿ã€ã ã¹ã¿ã³ãã¯å€ããªã¯ãšã¹ããæåŠããå©ãã«ãªãã眲åã¯è»¢éäžã«æ¹ãããããŠããªãããšã蚌æããŸãã眲åã«ãŒã«ã¯åçŽã«ããŠããŒãããŒãå®è£ ããããããã«ããŠãã ããã
é ä¿¡ã®å±¥æŽã¯ã€ãã³ãåäœã§ã¯ãªããšã³ããã€ã³ãåäœã§è¿œè·¡ããŸããåãã€ãã³ããäžã€ã®é¡§å®¢ãžéããªããããããã®éä¿¡å ããšã«è©Šè¡å±¥æŽãšæçµã¹ããŒã¿ã¹ãå¿ èŠã§ãã
å€ãã®ããŒã ãå®è£ ã§ããå®åçãªãããŒïŒ
- event IDãendpoint IDããã€ããŒãããã·ã¥ãåæã¹ããŒã¿ã¹ã§ã€ãã³ãã¬ã³ãŒããäœã
- 眲åãã¿ã€ã ã¹ã¿ã³ããidempotencyããŒããããã«ä»ããŠHTTPãªã¯ãšã¹ããéã
- ãã¹ãŠã®è©Šè¡ïŒéå§æå»ãçµäºæå»ãHTTPã¹ããŒã¿ã¹ãçããšã©ãŒã¡ãã»ãŒãžïŒãèšé²ãã
- ã¿ã€ã ã¢ãŠãã5xxã«å¯ŸããŠææ°ããã¯ãªãïŒãžãã¿ãŒã§ãªãã©ã€ãã
- æç¢ºãªäžéïŒæå€§è©Šè¡åæ°ãŸãã¯æå€§çµéæéïŒãè¶ ããã忢ããŠã¬ãã¥ãŒçšã«å€±ææ±ãã«ãã
éä¿¡åŽã§ãidempotencyããŒã¯éèŠã§ããåä¿¡åŽãæåã®ãªã¯ãšã¹ããåŠçãããã¯ã©ã€ã¢ã³ãã200ãåãåããªãã£ãå ŽåãåãããŒãããã°åä¿¡åŽã¯éè€ãæç¢ºã«æ±ããŸãã
æåŸã«ã倱æãå¯èŠåããŠãã ãããã倱æãã¯ãåªå€±ãã§ã¯ãªããåå®è¡ã§ããããã«äžæåæ¢ããŠãããããšãæå³ããã¹ãã§ãã
äŸïŒäžå®å®ãªããŒãããŒãšã¯ãªãŒã³ãªåŸ©æ§
ãµããŒãã¢ããªããã±ããã®æŽæ°ãããŒãããŒã«éã£ãŠã圌ãã®ãšãŒãžã§ã³ããåãç¶æ
ãèŠãããããã«ããŠãããšããŸãããã±ãããæŽæ°ããããã³ã«ticket.updatedã®Webhookããã¹ãããŸãã
ããååŸãããŒãããŒã®ãšã³ããã€ã³ããã¿ã€ã ã¢ãŠããè¿ãå§ããŸãããæåã®é ä¿¡ã¯ããªãåŽã®ã¿ã€ã ã¢ãŠãã«éããŠãå°éãããäžæããšæ±ãããŸããè¯ããªãã©ã€æŠç¥ãªãããã¯ãªããè¡ããªããå詊è¡ããåæã«ã€ãã³ãã¯åãã€ãã³ãIDã§ãã¥ãŒã«æ®ããå詊è¡ãèšé²ãããŸãã
åé¡ã®æ¬è³ªïŒåªçæ§ããªããšããŒãããŒãéè€åŠçããŠããŸããŸãã詊è¡#1ã¯åœŒãã«å±ããŠåŠçããããã¬ã¹ãã³ã¹ãè¿ããªãã£ããããããªãã詊è¡#2ãåŸã§å°çãããšäºéã«ããã±ãããéãããããåŠçãèµ°ããäºéã®ã¡ãŒã«ãäºã€ã®ã¿ã€ã ã©ã€ã³ãšã³ããªãçºçããŸãã
åªçæ§ã䜿ãã°åé ä¿¡ã«ã€ãã³ãIDç±æ¥ã®idempotencyããŒãä»ããããŒãããŒåŽã¯äžå®æéãã®ããŒãä¿åããŠãããéè€æã«ã¯ããã§ã«åŠçæžã¿ããšè¿ããŸããããªãã¯æ³åã§å€æããå¿ èŠããªããªããŸãã
ããŒãããŒã埩æ§ãããreplayã§æ¬ èœããäžååã®æŽæ°ãçŽããŸããç£æ»ãã°ããã€ãã³ããéžã³ãåããã€ããŒããšidempotencyããŒã§äžåºŠã ãåå®è¡ããã°ãæ¢ã«åãåã£ãŠããå Žåã§ãå®å šã§ãã
ã€ã³ã·ãã³ãäžã®ãã°ã«ã¯æ¬¡ãæç¢ºã«åºãã¹ãã§ãïŒ
- Event IDããã±ããIDãã€ãã³ãçš®å¥ããã€ããŒãã®ããŒãžã§ã³
- 詊è¡çªå·ãã¿ã€ã ã¹ã¿ã³ããæ¬¡ã®ãªãã©ã€æå»
- ã¿ã€ã ã¢ãŠããé2xxãæåã
- éã£ãidempotencyããŒãšããŒãããŒããduplicateããšå ±åãããã©ãã
- 誰ãåå®è¡ããããšæçµçµæã®replayã¬ã³ãŒã
ããããééããšèœãšã穎
å€ãã®Webhookã€ã³ã·ãã³ãã¯äžã€ã®å€§ããªãã°ã§ã¯ãªããå°ããªéžæãç©ã¿éãªã£ãŠä¿¡é Œæ§ãå£ããŸãã
ãã¹ãã¢ãŒãã ã§ããåºãçœ ïŒ
- ãªã¯ãšã¹ããã³ãã©å ã§éãåŠçïŒDBæžã蟌ã¿ãå€éšAPIåŒã³åºãããã¡ã€ã«ã¢ããããŒãïŒãããŠéä¿¡åŽãã¿ã€ã ã¢ãŠãâãªãã©ã€ã«ãªã
- ãããã€ããéè€ãéããªããšä»®å®ããŠäºéè«æ±ãäºéäœæãäºéã¡ãŒã«ãèµ·ãã
- ééã£ãã¹ããŒã¿ã¹ã³ãŒããè¿ãïŒåãä»ããŠããªãã®ã«200ãè¿ããå詊è¡ããŠãæå³ã®ãªãããŒã¿ã§500ãè¿ãïŒ
- çžé¢IDãã€ãã³ãIDããªã¯ãšã¹ãIDãªãã§åºè·ãããã°ãšé¡§å®¢å ±åãçªåããã®ã«äœæéãããã
- æ°žé ã«ãªãã©ã€ããèšèšãããã¯ãã°ãäœããããŒãããŒã®é害ãèªåã®é害ã«è»¢åãã
åçŽãªã«ãŒã«ãæå¹ã§ãïŒéããã«åçããå®å šã«åŠçãããåçã«å¿ èŠãªæ€èšŒã ããè¡ããä¿åïŒãŸãã¯ãã¥ãŒïŒããŠããæ®ããéåæã§åŠçããŠãã ããã
ã¹ããŒã¿ã¹ã³ãŒãã¯æã£ãããéèŠã§ãïŒ
- 2xxã¯ã€ãã³ããä¿åïŒãŸãã¯ãã¥ãŒã€ã³ã°ïŒããŠåŠçããããšç¢ºä¿¡ã§ãããšãã®ã¿äœ¿ãã
- 4xxã¯éä¿¡åŽãä¿®æ£ãã¹ãå ¥åãšã©ãŒãèªèšŒå€±æã«äœ¿ãã
- 5xxã¯ããªãåŽã®äžæçãªåé¡ã«ã®ã¿äœ¿ãã
ãªãã©ã€ã®äžéãèšå®ããŠãã ãããåºå®ãŠã£ã³ããŠïŒäŸïŒ24æéïŒãåºå®è©Šè¡åæ°ã§æ¢ããŠãèŠã¬ãã¥ãŒãã«ç§»ãã人éãreplayãã¹ãã倿ããããã«ããŸãã
éæ»ãã§ãã¯ãªã¹ããšæ¬¡ã®ã¹ããã
Webhookã®ä¿¡é Œæ§ã¯ç¿æ £åã倧ããã§ãïŒéãåçããç©æ¥µçã«éè€æé€ããæ³šææ·±ããªãã©ã€ããåå®è¡ãã¹ã確ä¿ããããšã
åä¿¡ïŒReceiverïŒã®éæ»ãã§ãã¯
- ãªã¯ãšã¹ããå®å šã«ä¿åãããéããã«2xxãè¿ãïŒéãåŠçã¯éåæã§ïŒ
- åä¿¡ããããšã蚌æããã®ã«ååãªã€ãã³ããä¿åããïŒåŸã§ãããã°ã§ããããã«ïŒ
- idempotencyããŒãèŠæ±ãããããããã€ãïŒã€ãã³ãIDããå°åºããŠDBã§åŒ·å¶ãã
- 眲åäžæ£ãã¹ããŒãäžæ£ã«ã¯4xxããµãŒãã®äžæçåé¡ã«ã¯5xxã䜿ã
- åŠçã¹ããŒã¿ã¹ïŒreceivedãprocessedãfailedïŒãšæåŸã®ãšã©ãŒã¡ãã»ãŒãžã远跡ãã
éä¿¡ïŒSenderïŒã®éæ»ãã§ãã¯
- åã€ãã³ãã«äžæã®ã€ãã³ãIDãå²ãåœãŠã詊è¡éã§å®å®ããã
- ãã¹ãŠã®ãªã¯ãšã¹ãã«çœ²åãšã¿ã€ã ã¹ã¿ã³ããä»ãã
- ãªãã©ã€ããªã·ãŒïŒããã¯ãªããæå€§è©Šè¡åæ°ãæã¡åãïŒãå®çŸ©ãå®ã
- ãšã³ããã€ã³ãããšã®ç¶æ ãèšé²ããïŒæåŸã®æåãæåŸã®å€±æãé£ç¶å€±ææ°ã次åè©Šè¡æå»
- ãã¹ãŠã®è©Šè¡ããµããŒãã»ç£æ»ã«ååãªè©³çްã§ãã°ã«æ®ã
éçšã§ã¯ãã©ã®ç¯å²ïŒåäžã€ãã³ããæéç¯å²ãã¹ããŒã¿ã¹å¥ïŒãreplayãããã誰ãã§ãããããããã¬ã¿ãŒã¬ãã¥ãŒã®æé ãäºåã«æ±ºããŠãããŸãããã
æåŸã«ïŒãããããã¹ãŠæäœæ¥ã§é ç·ããã«æ§ç¯ããããã°ãããŒã³ãŒããã©ãããã©ãŒã ã®AppMasterã䜿ããšå®çšçã§ããPostgreSQLã§Webhookã®inbox/outboxããŒãã«ãã¢ãã«åããBusiness Process Editorã§ãªãã©ã€ã»replayãããŒãäœãã倱æã€ãã³ããæ€çŽ¢ããŠåå®è¡ã§ããå éšç®¡çããã«ãããŒã³ãŒãã§çšæã§ããŸãã
ãããã質å
Webhooksã¯ããªãã管çããŠããªãã·ã¹ãã å士ã®éã«å ¥ãããããã®ã¿ã€ã ã¢ãŠããé害ããªãã©ã€ãã¹ããŒã倿ŽãåŒãç¶ããŸããã³ãŒãã«åé¡ããªããŠããéè€ãæ¬ èœãé å»¶ãé åºã®ãããçºçããŸãã
æåãããªãã©ã€ãšéè€åä¿¡ãæ³å®ããŠèšèšããããšãæãç°¡åã§ããå ¥ã£ãŠããã€ãã³ãã¯ãã¹ãŠä¿åããèšé²ãå®å šã«è¡ãããéããã«2xxã§å¿çããidempotencyããŒã䜿ã£ãŠéåæã§åŠçããããšã§ãåé ä¿¡ãå¯äœçšãéè€ãããªãããã«ããŸãã
åºæ¬çãªæ€èšŒãšä¿åãæžãã ãéããã«å¿çããéåžžã¯1ç§ä»¥å ãç®å®ã«ããŸãããªã¯ãšã¹ãå ã§éãåŠçãè¡ããšéä¿¡åŽãã¿ã€ã ã¢ãŠãããŠãªãã©ã€ãå¢ããéè€ãã€ã³ã·ãã³ãã®åãåããé£ãããªããŸãã
idempotencyã¯ãã¡ãã»ãŒãžãäœåºŠå±ããŠãããžãã¹åŠçã¯äžåºŠã ãè¡ãããšããããšã§ããäžè¬ã«ãããã€ãã®ã€ãã³ãIDã®ãããªå®å®ããããŒã䜿ãããããä¿åããŠéè€æã«ã¯æåãè¿ããåŠçãéããªãããã«ããŸãã
å¯èœãªããããã€ãã®ã€ãã³ãIDã䜿ã£ãŠãã ããããªãå Žåã¯ããããã€ãåïŒã€ãã³ãçš®å¥ïŒãªãœãŒã¹IDïŒã¿ã€ã ã¹ã¿ã³ãã®ããã·ã¥ãªã©ãå€ããã«äœ¿ããå®å®ãããã£ãŒã«ãããå°åºããŸããå®å®ããããŒãäœããªãå Žåã¯ãæšæž¬ããã«ã€ãã³ããéé¢ããŠã¬ãã¥ãŒããã®ãå®å šã§ãã
éä¿¡åŽãå詊è¡ãå¶åŸ¡ããéãã¹ããŒã¿ã¹ã³ãŒããéèŠã§ããéä¿¡åŽãä¿®æ£ã§ããªãåé¡ïŒèªèšŒå€±æãäžæ£ãªãã€ããŒãïŒã¯4xxãè¿ããŠå詊è¡ãæ¢ããããªãåŽã®äžæçãªé害ã ãã¯5xxã§ç€ºããŸããäžè²«ãã䜿ãåãããªãã©ã€åäœãå®å®ãããŸãã
ã¿ã€ã ã¢ãŠããæ¥ç¶ãšã©ãŒãHTTP 408ã»429ã»5xxã®ãããªäžæçãªå¿çã«ã€ããŠã¯ãªãã©ã€ããŸããææ°ããã¯ãªããšãžãã¿ãŒã䜿ããåèšè©Šè¡åæ°ãæå€§åè©Šè¡æéïŒäŸïŒ24æéããŸãã¯æå€§10åãªã©ïŒã§æã¡åãã®ãå®å šã§ããæã¡åã£ãããèŠã¬ãã¥ãŒãã«ç§»ããŠãã ããã
ãªãã©ã€ã¯èªåãã€å³æã«è¡ãããåŠçã§ãreplayã¯ãã°ä¿®æ£ãé害埩æ§åŸã«æå³çã«éå»ã®ã€ãã³ããååŠçããããšã§ããreplayã¯ã€ãã³ããã°ãidempotencyãã§ãã¯ã誀æäœé²æ¢ã®ã¬ãŒãã¬ãŒã«ãéèŠã§ãã
é åºãååŸããããšãåæã«ãããã¡ã€ã³ã«åã£ãã«ãŒã«ã決ããŸãããããã察å¿ã¯ãã€ãã³ãã«ããŒãžã§ã³ãã¿ã€ã ã¹ã¿ã³ããããã°ããããçŸåšã®ããŒã¿ããæ°ããå Žåã«ã®ã¿é©çšããããšããæ¹æ³ã§ããããã«ããé å»¶å°çãå€ãç¶æ ã«å·»ãæ»ãã®ãé²ããŸãã
ã·ã³ãã«ã«Webhookã®inbox/outboxããŒãã«ãäœãã倱æã€ãã³ããæ€çŽ¢ã»æ€æ»ã»åå®è¡ã§ããå°ããªç®¡çãã¥ãŒãçšæããŸããAppMasterã䜿ãã°ãPostgreSQLã§ãããã®ããŒãã«ãã¢ããªã³ã°ããBusiness Process Editorã§ããã¥ãŒãããªãã©ã€ãreplayã®ãããŒãäœã£ãŠããµããŒãåãã®å éšããã«ãããŒã³ãŒãã§çšæã§ããŸãã


