æ¬ èœãã webhook ã®é ä¿¡
äºæãããŠãã Webhook é ä¿¡ãåãåã£ãŠããªãå Žåã¯ãé ä¿¡ãæ¬ èœããŠãããã€ã³ããç¹å®ããå¿ èŠããããŸãã
-
Webhook é ä¿¡ãçºçãããšäºæ³ãããã€ãã³ããããªã¬ãŒããŸãã ããšãã°ãWebhook ã
issues
ã€ãã³ãã«ãµãã¹ã¯ã©ã€ããããŠãããªããžã㪠Webhook ã§ããå Žåããã®ãªããžããªã§ã€ã·ã¥ãŒãéãããšãã§ããŸãã -
Webhook ã®æè¿ã®é ä¿¡ãã°ã確èªããŸãã Webhook ã®çš®é¡ããšã«ãããè¡ãæ¹æ³ã«ã€ããŠã¯ããwebhookã®é ä¿¡ã®è¡šç€ºããåç §ããŠãã ããã
æè¿ã®é ä¿¡ãã°ã«ãåã®æé ã§ããªã¬ãŒãã Webhook ã€ãã³ãã«å¯Ÿå¿ããé ä¿¡ãå«ãŸããŠããªãå ŽåãGitHub ã¯é ä¿¡ã詊è¡ããŸããã§ããã åå ãç¹å®ããã«ã¯:
-
æ°ååŸ ã£ãŠããããäžåºŠç¢ºèªããŸãã Webhook ã®é ä¿¡ã衚瀺ããããŸã§ã«æ°åãããå ŽåããããŸãã
-
Webhook ãæ§æãããŠããå Žæã§ã€ãã³ããããªã¬ãŒããããšã確èªããŸãã ããšãã°ãWebhook ããªããžã㪠webhook ã§ããå Žåã¯ãWebhook ãæ§æãããŠããã®ãšåããªããžããªã§ã€ãã³ããããªã¬ãŒããããšã確èªããŸãã
-
ããªã¬ãŒããã€ãã³ãã« Webhook ããµãã¹ã¯ã©ã€ããããŠããããšã確èªããŸãã ããšãã°ãåé¡ãéãããšãã« Webhook é ä¿¡ãäºæ³ãããå Žåã¯ãWebhook ã
issues
ã€ãã³ãã«ãµãã¹ã¯ã©ã€ããããŠããããšã確èªããŸãã -
Webhook ãã¢ã¯ãã£ãã§ããããšã確èªããŸãã 詳ããã¯ããWebhook ãç¡å¹ã«ããããã芧ãã ããã
-
Webhook ã OAuth app ã¢ã¯ã»ã¹å¶éã®åœ±é¿ãåããªãããšã確èªããŸãã OAuth app ãæ¿èªãããŠãŒã¶ãŒã®ä»£ããã« OAuth app ã«ãã£ãŠ Webhook ãäœæãããå Žåããã® Webhook ã¯ãOAuth app ã«ããã¢ã¯ã»ã¹ãå¶éãããŠããçµç¹ãŸãã¯ãªããžã㪠Webhook ã§ããå Žåãèªåçã«ç¡å¹ã«ãªããŸãã 詳现ã«ã€ããŠã¯ããOAuth ã¢ããªã®ã¢ã¯ã»ã¹å¶éã«ã€ããŠã ãåç §ããŠãã ããã
-
ã€ãã³ããææžåãããå¶éã«éããå¯èœæ§ããããã©ããã確èªããŸãã ããšãã°ãäžåºŠã« 3 ã€ä»¥äžã®ã¿ã°ãããã·ã¥ããå Žåããã®ããã·ã¥ã«å¯ŸããŠ
push
ã€ãã³ãã¯ããªã¬ãŒãããŸããã åã€ãã³ãã®ææžåãããå¶éã®è©³çްã«ã€ããŠã¯ããWebhook ã®ã€ãã³ããšãã€ããŒãããåç §ããŠãã ããã -
githubstatus.com ã§ Webhook ã®ç¶æ ã確èªããŸãã
æè¿ã®é ä¿¡ãã°ã«ãGitHub ã¯é ä¿¡ã詊è¡ããããé ä¿¡ã¯å€±æããŸãããšããé ä¿¡ãšã©ãŒãçºçããããšã瀺ãå Žåã ããã¯éåžžããµãŒããŒã«åé¡ãããããã§ãã ç¹å®ã®ãšã©ãŒã解決ããã«ã¯ã以äžã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
-
-
ãµãŒããŒã®ãã°ã確èªããŸãã ãã°å ã®æ å ±ã¯ãWebhook é ä¿¡ãåŠçããããã«ãµãŒããŒãå®è¡ããã³ãŒãã«ãã£ãŠç°ãªããŸãã ãµãŒããŒã®åé¡ã蚺æããã«ã¯ãã³ãŒãã«ãã° ã¹ããŒãã¡ã³ãã远å ããããšãå¿ èŠãªå ŽåããããŸãã
20 webhook ãè¶ ããããšã¯ã§ããŸãã
ã€ãã³ãã®çš®é¡ããšã«ã20 ãªããžããªãŸãã¯çµç¹ webhook ãäœæã§ããŸãã ããã«äœæããããšãããšã20 webhooks ãè¶ ããããšã¯ã§ããŸãããšãããšã©ãŒã衚瀺ãããŸãã
20 Webhook ãè¶ ããå¿ èŠãããå Žåã¯ãGitHub ãã Webhook ãåä¿¡ããç¡å¶éã®æ°ã®å®å URL ã«è»¢éãããããã·ãå®è¡ã§ããŸãã
URL ãã¹ã localhost ã¯ãµããŒããããŠããŸãã
Webhook URL ãšã㊠localhost
ãŸã㯠127.0.0.1
ã䜿çšããããšã¯ã§ããŸããã
ãã¹ãã®ããã« Webhook ãããŒã«ã« ãµãŒããŒã«é ä¿¡ããå Žåã¯ãwebhook 転éãµãŒãã¹ã䜿çšã§ããŸãã 詳现ã«ã€ããŠã¯ããwebhookã®ãã¹ãããåç §ããããhttps://smee.io/ ãåç §ããŠãã ããã
ãã¹ãã«æ¥ç¶ã§ããŸããã§ãã
failed to connect to host
ãšã©ãŒã¯ãGitHub ã Webhook é
ä¿¡ã詊ã¿ãããWebhook ã® URL ã IP ã¢ãã¬ã¹ã«è§£æ±ºã§ããªãã£ãå Žåã«çºçããŸãã
ãã¹ãåã IP ã¢ãã¬ã¹ã«è§£æ±ºããããã©ããããã§ãã¯ããã«ã¯ãnslookup
ã䜿çšããŸãã ããšãã°ããã€ããŒã URL ã https://octodex.github.com/webhooks
ã§ããå Žåã¯ãnslookup octodex.github.com
ãå®è¡ã§ããŸãã ãã¹ãåã IP ã¢ãã¬ã¹ã«è§£æ±ºã§ããªãã£ãå Žåãnslookup ã³ãã³ãã¯ãµãŒããŒããã¹ãåãèŠã€ããããšãã§ããªãããšã瀺ããŸãã
ãããã¯ãŒã¯ã«æ¥ç¶ã§ããŸããã§ãã
failed to connect to network
ãšã©ãŒã¯ãGitHub ã Webhook ãé
ä¿¡ããããšãããšãã«ããµãŒããŒãæ¥ç¶ãæåŠããããšã瀺ããŸãã
ãµãŒããŒã§ãGitHub ã® IP ã¢ãã¬ã¹ããã®æ¥ç¶ãèš±å¯ãããŠããããšã確èªããå¿
èŠããããŸãã GET /meta
ãšã³ããã€ã³ãã䜿çšããŠãGitHub ã® IP ã¢ãã¬ã¹ã®çŸåšã®äžèЧãèŠã€ããããšãã§ããŸãã 詳ããã¯ããã¡ã¿ããŒã¿çš REST API ãšã³ããã€ã³ãããã芧ãã ããã GitHub 㯠IP ã¢ãã¬ã¹ã倿ŽããããšããããããIP èš±å¯äžèЧã宿çã«æŽæ°ããŠãã ããã
ã¿ã€ã ã¢ãŠã
timed out
ãšã©ãŒã¯ã
10 ç§ã® Webhook é
ä¿¡äžã«ãGitHub ããµãŒããŒããå¿çãåä¿¡ããªãã£ãããšã瀺ããŸãã
Webhook ããªããªãŒãåä¿¡ããŠãã 10 ç§ä»¥å ã«ãµãŒããŒã 2xx å¿çãè¿ãããã«ããŠãã ããã ãµãŒããŒã®å¿çã«ãã以äžã®æéããããå ŽåãGitHub ã¯æ¥ç¶ãçµäºããããªããªãŒã倱æãããšèŠãªããŸãã
ã¿ã€ã ãªãŒã«å¿çããããã«ãWebhook ãã€ããŒããéåæçã«åŠçãããã¥ãŒãèšå®ã§ããŸãã ãµãŒããŒã¯ãWebhook ãåä¿¡ãããšãã«å¿çãããã®åŸã® Webhook ããªããªãŒããããã¯ããããšãªããããã¯ã°ã©ãŠã³ãã§ãã€ããŒããåŠçã§ããŸãã ããšãã°ãHookdeck ãªã©ã®ãµãŒãã¹ããResque (Ruby)ãRQ (Python)ãRabbitMQ ãªã©ã®ã©ã€ãã©ãªã䜿çšã§ããŸãã
ãã¢èšŒææžã¯äžãããã CA èšŒææžã§èªèšŒã§ããŸããã
ãã®ãšã©ãŒã¯ããµãŒããŒã®èšŒææžã«é¢é£ããåé¡ãããããšã瀺ããŠããŸãã æãäžè¬çãªåé¡ã¯æ¬¡ã®ãšããã§ãã
- ãµãŒããŒã¯èªå·±çœ²åèšŒææžã䜿çšããŠããŸãã
- æ¥ç¶ã確ç«ããããšãã«ããµãŒããŒãå®å šãªèšŒææžãã§ãŒã³ãéä¿¡ããŠããŸããã
åé¡ã®èšºæã«åœ¹ç«ã€ãããSSL Labs ãã SSL ãµãŒã㌠ãã¹ãã䜿çšã§ããŸãã ãã®ãµãŒãã¹ã¯ãHTTPS ã®æ¢å®ã®ããŒã (ããŒã 443) ã§ã®ã¿åäœããã€ã³ã¿ãŒãããããã¢ã¯ã»ã¹ã§ãããµãŒããŒã§ã®ã¿æ©èœããŸãã
ãŸããåé¡ã®èšºæã« openssl
ã䜿çšããããšãã§ããŸãã ãããè¡ãã«ã¯ãã¿ãŒããã«ã§ openssl s_client -connect HOST:PORT
ãå®è¡ããŸãã HOST
ããµãŒããŒã®ãã¹ãåã«çœ®ãæããPORT
ãããŒãã«çœ®ãæããŸãã ããšãã°ãopenssl s_client -connect example.com:443
ã®ããã«ããŸãã åé¡ãç¹å®ããã«ã¯ãåºåå
ã§ verify error
ãæ¢ããŸãã
ç¡å¹ãª HTTP å¿çã§ã
invalid HTTP response
ãšã©ãŒã¯ãGitHub ããã® Webhook é
ä¿¡ã«å¿çããŠããµãŒããŒã 4xx ãŸã㯠5xx ã®ç¶æ
ãè¿ãããšãã«çºçããŸãã
2xx ç¶æ ãè¿ãããã«ãµãŒããŒãæ§æããå¿ èŠããããŸãã ãµãŒããŒã 4xx ãŸã㯠5xx ã®ç¶æ ãè¿ããå ŽåãGitHub ã¯é ä¿¡ããšã©ãŒãšããŠèšé²ããŸãã
Webhook ã®é ä¿¡ãé äžåã§ã
GitHub ã¯ãã€ãã³ããçºçããé åºãšã¯ç°ãªãé åºã§ Webhook ãé ä¿¡ããå ŽåããããŸãã ã€ãã³ããå¥ã®ã€ãã³ãã«é¢é£ããŠãã€çºçããããç¥ãå¿ èŠãããå Žåãé ä¿¡ãã€ããŒãã«å«ãŸããã¿ã€ã ã¹ã¿ã³ãã䜿çšããå¿ èŠããããŸãã
Webhook ã®é ä¿¡ã¯å³æã§ã¯ãããŸãã
Webhook é ä¿¡ã¯ãé ä¿¡ãããŠããæè¿ã®é ä¿¡ãã°ã«è¡šç€ºããããŸã§ã«æ°åãããå ŽåããããŸãã Webhook é ä¿¡ã倱æãããšå€æããåã«ãæ°ååŸ ã£ãŠããããäžåºŠç¢ºèªããŠãã ããã
ãèªåã®ã¢ã«ãŠã³ãã§ Webhook é
ä¿¡ã®æ¥å¢ãçºçããå ŽåãGitHub ã¯ã¢ã«ãŠã³ããžã®é
ä¿¡çãäžæçã«èª¿æŽããå¯èœæ§ããããŸãã Webhook ããªããªãŒã GitHub ã«ãã£ãŠé
ããªãå Žåã圱é¿ãåããåé
ä¿¡ã® throttled_at
ããããã£ã«ã¯ãé
ä¿¡ã調æŽããããšãã®ã¿ã€ã ã¹ã¿ã³ãã衚瀺ãããŸãã REST API ã䜿çšããŠããããã§ãã¯ã§ããŸããããªããžã㪠Webhook ã®é
ä¿¡ãäžèŠ§è¡šç€ºããããåç
§ããŠãã ããã
é å»¶ãåé¿ããã«ã¯ãã¢ã«ãŠã³ãã«å¿ èŠãª Webhook ã€ãã³ãã®ã¿ããµãã¹ã¯ã©ã€ãããé ä¿¡ã®é »åºŠãæžãããŸãã ãWebhook ã®äœ¿çšã«é¢ãããã¹ã ãã©ã¯ãã£ã¹ããã芧ãã ããã
眲åã®ç¢ºèªã®å€±æ
Webhook ã·ãŒã¯ã¬ããã䜿çšããŠãWebhookã®é
ä¿¡ãGitHub ããã§ããããšã確èªããã«ã¯ X-Hub-Signature-256
ããããŒã䜿çšããå¿
èŠããããŸãã 詳ããã¯ããWebhook é
ä¿¡ãæ€èšŒããããã芧ãã ããã
ãã€ããŒãã GitHub ãã確å®ã«ååŸãããŠãããã眲åã®æ€èšŒã倱æããå Žå:
- Webhook ã®ã·ãŒã¯ã¬ãããæ§æãããŠããããšã確èªããŸãã Webhook ã®ã·ãŒã¯ã¬ãããæ§æããŠããªãå Žåã
X-Hub-Signature-256
ããããŒã¯ååšããŸããã Webhook ã·ãŒã¯ã¬ããã®èšå®ã®è©³çްã«ã€ããŠã¯ããwebhookã®ç·šéããåç §ããŠãã ããã - æ£ããããããŒã䜿çšããŠããããšã確èªããŸãã GitHub ã§ã¯ãHMAC-SHA256 ã¢ã«ãŽãªãºã ã䜿çšãã
X-Hub-Signature-256
ããããŒã䜿çšããããšããå§ãããŸããX-Hub-Signature
ããããŒã¯HMAC-SHA1 ã¢ã«ãŽãªãºã ã䜿çšããåŸæ¥ã®ç®çã§ã®ã¿å«ãŸããŠããŸãã - æ£ããã¢ã«ãŽãªãºã ã䜿çšããŠããããšã確èªããŸãã
X-Hub-Signature-256
ããããŒã䜿çšããŠããå Žåã¯ãHMAC-SHA256 ã¢ã«ãŽãªãºã ã䜿çšããå¿ èŠããããŸãã - æ£ãã webhook ã·ãŒã¯ã¬ããã䜿çšããŠããããšã確èªããŸãã Webhook ã·ãŒã¯ã¬ããã®å€ãããããªãå Žåã¯ãWebhook ã®ã·ãŒã¯ã¬ãããæŽæ°ã§ããŸãã 詳ããã¯ããwebhookã®ç·šéããã芧ãã ããã
- æ€èšŒã®åã«ãã€ããŒããšããããŒã倿ŽãããŠããªãããšã確èªããŸãã ããšãã°ããããã·ãŸãã¯è² è·ãã©ã³ãµãŒã䜿çšããå Žåã¯ããããã·ãŸãã¯è² è·ãã©ã³ãµãŒããã€ããŒããŸãã¯ããããŒã倿ŽããŠããªãããšã確èªããŸãã
- èšèªãšãµãŒããŒã®å®è£ ã§æåãšã³ã³ãŒãã£ã³ã°ãæå®ãããŠããå Žåã¯ããã€ããŒããUTF-8ãšããŠæ±ãããã«ããŠãã ããã Webhook ãã€ããŒãã«ã¯ Unicode æåãå«ããããšãã§ããŸãã