Idempotency-Key ãããã¼
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
HTTP ã® Idempotency-Key ãªã¯ã¨ã¹ããããã¼ ã使ç¨ãã¦ãPOST ããã³ PATCH ãªã¯ã¨ã¹ããã¹ãçã«ãããã¨ãã§ãã¾ãã
ããã«ããã¯ã©ã¤ã¢ã³ãã¯ããªã¯ã¨ã¹ãããã§ã«ãµã¼ãã¼ã«åä¿¡ããã¦å¦çæ¸ã¿ã§ãããã©ãããæ°ã«ãããã¨ãªããã¬ã¹ãã³ã¹ãè¿ã£ã¦ããªããªã¯ã¨ã¹ããåéä¿¡ãããã¨ãã§ãã¾ãã
| ãããã¼ç¨®å¥ | ãªã¯ã¨ã¹ããããã¼ |
|---|---|
| ç¦æ¢ãªã¯ã¨ã¹ããããã¼ | ããã |
æ§æ
Idempotency-Key: <key>
ãã£ã¬ã¯ãã£ã
<key>-
ç¹å®ã®ãªã¯ã¨ã¹ãã®åºæãã¼ã§ãã å½¢å¼ã¯ãµã¼ãã¼ã«ãã£ã¦å®ç¾©ããã¾ãã
解説
HTTP ã¡ã½ããã®ãã¡ GET, HEAD, PUT, DELETE, OPTIONS ã¯ã¹ãçã§ãã
ã¤ã¾ãããããã®ã¡ã½ããã使ã£ã¦ã¡ãã»ã¼ã¸ãä½åº¦éä¿¡ãã¦ãããµã¼ãã¼ã®ç¶æ
ã¯å¤åããªããããããã¯ã¡ãã»ã¼ã¸ãåå¾ãããã³ã«åãå½¢ã§å¤åãããã¨ã«ãªãã¾ãã
ä¾ãã°ãåã PUT ã¡ãã»ã¼ã¸ãè¤æ°åéä¿¡ããå ´åããµã¼ãã¼ä¸ã®åããªã½ã¼ã¹ãããããã®æç¹ã§åãå¤ã§æ´æ°ããã¾ãã
POST ã¡ã½ãã㨠PATCH ã¡ã½ããã¯ã¹ãçã§ã¯ããã¾ãããã¤ã¾ãããµã¼ãã¼ã®ç¶æ
ããã¡ãã»ã¼ã¸ãåä¿¡ãããã³ã«å¤åããå¯è½æ§ãããã¨ãããã¨ã§ãã
PUT ã¡ãã»ã¼ã¸ã¨ã¯ç°ãªããåä¸ã® POST ãªã¯ã¨ã¹ããè¤æ°åéä¿¡ããå ´åããµã¼ãã¼ã¯ãªã¯ã¨ã¹ããæåãããã³ã«æ°ãããªã½ã¼ã¹ãçæããå¯è½æ§ãããã¾ãã
åæ§ã«ãPATCH ã¯å
·ä½çãªç¶æ
ã«å¯¾ãã夿´ãåæ ãããã®ã§ãããããããé©ç¨ããããã³ã«ãã®ç¶æ
ã夿´ããã¾ãã
ã¯ã©ã¤ã¢ã³ããã¬ã¹ãã³ã¹ãåãåããªãã£ãå ´åãã¹ãçæ§ã¯éè¦ã§ããããã«ãããã¯ã©ã¤ã¢ã³ãã¯å¯ä½ç¨ãå¿é ãããã¨ãªããå®å ¨ã«ãªã¯ã¨ã¹ããåéä¿¡ã§ããããã§ãã
HTTP ã® Idempotency-Key ãããã¼ã使ç¨ããã¨ãã¯ã©ã¤ã¢ã³ã㯠POST ãªã¯ã¨ã¹ã㨠PATCH ãªã¯ã¨ã¹ãã«åºæã®èå¥åï¼ãã¼ï¼ãä»ä¸ãããã¨ã§ããããã®ãªã¯ã¨ã¹ããã¹ãçã«ãããã¨ãã§ãã¾ãã
ããã«ãããã¯ã©ã¤ã¢ã³ãã¯åããªã¯ã¨ã¹ããè¤æ°åéä¿¡ãããã¨ãã§ãããµã¼ãã¼ã¯ã¢ã¯ã·ã§ã³ã 1 åã ãå®è¡ããã°ãããã¨ãèªèã§ãã¾ãã
ã¯ã©ã¤ã¢ã³ãã®è²¬ä»»
ã¯ã©ã¤ã¢ã³ãå´ã® JavaScript ã¯ãIdempotency-Key ãããã¼ãè¦æ±ãããã¨ã³ããã¤ã³ãã¸ã®ãã§ãããªã¯ã¨ã¹ãã«ããã¦ããµã¼ãã¼ãå
¬éãã¦ããè¦ä»¶ã«æºæ ãããã¼ã使ç¨ãã¦ããã®ãããã¼ãæ·»ä»ããå¿
è¦ãããã¾ãã
ããããã®æ°ãããªã¯ã¨ã¹ãã§ä¸æã®ãã¼ã使ç¨ããªããã°ãªããªããããã®ãªã¯ã¨ã¹ããåéä¿¡ããå ´åã¯åããã¼ã使ç¨ããå¿ è¦ãããã¾ãã
ãµã¼ãã¼ã®è²¬ä»»
Idempotency-Key ãããã¼ã«å¯¾å¿ãã¦ãããµã¼ãã¼ã¯ããã®ãããã¼ãè¦æ±ãããã¨ã³ããã¤ã³ããããã¼ã«é¢ããè¦ä»¶ï¼é·ããçææ¹æ³ãæå¹æéãªã©ï¼ãå«ãããã®å¯¾å¿ç¶æ³ãææ¸åããå
¬éãããã¨ãæ±ãããã¾ãã
ãªãããµã¼ãã¼ã¯åä¿¡ãããã¼ãæéçµéã«ä¼´ãç¡å¹åãããã¨ã鏿ã§ããå ´åãããã¾ããã¯ã©ã¤ã¢ã³ããæºæ ãããªã¯ã¨ã¹ããè¡ããããããã¼ã®æå¹æéã«é¢ããåä½ãå®ç¾©ããææ¸åããå¿ è¦ãããã¾ãã
ã¹ãçæ§ãã£ã³ã¬ã¼ããªã³ã
ããããã®ãªã¯ã¨ã¹ãã§ãåºæã®ãã¼ã使ç¨ãããã¨ãæ±ãããã¾ãã
ã¯ã©ã¤ã¢ã³ããæ°ãããªã¯ã¨ã¹ãã§ãã¼ãåå©ç¨ãããã¨ãé²ãããããµã¼ãã¼ã¯ãªã¯ã¨ã¹ãã®ãã¹ãçæ§ãã£ã³ã¬ã¼ããªã³ããã使ãããã¼ã¨ã¨ãã«æ ¼ç´ãããã¨ãããã¾ãã ããã¯ãªã¯ã¨ã¹ãã®å ¨é¨ã¾ãã¯ä¸é¨ã®ããã·ã¥å¤ã§ãããåããã¼ãæã¤ä»ã®ãªã¯ã¨ã¹ãã¨æ¯è¼ãããã¨ãå¯è½ã§ãã
ã¹ãçæ§ãã£ã³ã¬ã¼ããªã³ãã«å¯¾å¿ãã¦ããå ´åãåããã¼ã§ãã£ã¦ããã£ã³ã¬ã¼ããªã³ããç°ãªãã¨ããµã¼ãã¼ã¯ã¨ã©ã¼ã¬ã¹ãã³ã¹ãè¿ããã¨ãã§ãã¾ãã
ãªã¯ã¨ã¹ãã®å¦ç
POST ã¾ã㯠PATCH ã« Idempotency-Key ãè¨å®ããããªã¯ã¨ã¹ããããããå¿
è¦ã¨ããã¨ã³ããã¤ã³ãã§åä¿¡ããã¨ãããµã¼ãã¼ã¯ããã®ãã¼ãå«ããªã¯ã¨ã¹ãããã§ã«åä¿¡ãã¦ãããã©ããã調ã¹ãå¿
è¦ãããã¾ãã
- ã¾ã åä¿¡ãã¦ããªãå ´åããµã¼ãã¼ã¯å¦çãå®è¡ãã¦å¿çãããã¼ãæ ¼ç´ããå¿ è¦ãããã¾ãã
- ãã§ã«åä¿¡ãã¦ããå ´åã¯ãå¦çãå®è¡ãã¾ããããå®è¡ãããã®ããã«å¿çããå¿ è¦ãããã¾ãã
ã¹ãçæ§ãã£ã³ã¬ã¼ããªã³ãã使ç¨ãã¦ãããµã¼ãã¼ã¯ãããããã®æ°ãããªã¯ã¨ã¹ããã¨ã«ãã£ã³ã¬ã¼ããªã³ããçæãã¦ä¿åãã¾ãã ããã使ç¨ãã¦ããã®å¾ã®ãã¼ã¨ãã£ã³ã¬ã¼ããªã³ããä¸è´ããªãå ´åã«ã¨ã©ã¼ãè¿ãã¾ãã
Idempotency-Key ãè¦æ±ãããã¨ã³ããã¤ã³ãã§ãIdempotency-Key ãæããªããªã¯ã¨ã¹ããåãåã£ãå ´åããµã¼ãã¼ã¯ã¨ã©ã¼ãè¿ãã¹ãã§ãã
ãµã¼ãã¼ã¨ã©ã¼ã®å¦ç
ãµã¼ãã¼ã¯ã以ä¸ã®å ´åã«ã¨ã©ã¼ã¬ã¹ãã³ã¹ãæä¾ããå¿ è¦ãããã¾ãã
400 Bad Request: ãã®ãããã¼ãè¦æ±ãããã¨ãã¦ææ¸åããã¦ããã¨ã³ããã¤ã³ãã§ããããã¼ãè¨å®ããã¦ããªãã409 Conflict: åããã¼ãæã¤ãªã¯ã¨ã¹ããç¾å¨å¦çä¸ã§ããã422 Unprocessable Content: ãã®ãã¼ã¯ãå¥ã®ãªã¯ã¨ã¹ãã®å 容ã§ãã§ã«ä½¿ç¨ããã¦ããï¼ã¹ãçæ§ãã£ã³ã¬ã¼ããªã³ãã«å¯¾å¿ããã¦ããå ´åï¼ã
409 Conflict ã¬ã¹ãã³ã¹ãè¿ãããå ´åãã¯ã©ã¤ã¢ã³ãã¯å試è¡ããåã«å¾
æ©ããå¿
è¦ãããã¾ãã
ãã以å¤ã«ããã¯ã©ã¤ã¢ã³ãã¯ãªã¯ã¨ã¹ããä¿®æ£ãã¦ããåéä¿¡ããå¿
è¦ãããã¾ãã
æ¬ä»æ§ã§ã¯ãã¨ã©ã¼ã¬ã¹ãã³ã¹ã®æ¬ä½ã®æ¸å¼ãè¦å®ãã¦ãã¾ãããããã®ã¨ã©ã¼ã«ã¯ããã®ã¨ã©ã¼ã説æããå®è£ åºæã®ææ¸ã¸ã®ãªã³ã¯ãå«ããå¿ è¦ãããã¾ãã RFC 9457: Problem Details for HTTP APIs ã«è¨è¼ããã¦ãã JSON ãã¤ãã¼ãæ¸å¼ãããã®ä¸ä¾ã¨ãªãã¾ãã ä¾ãã°ããã¼ãè¦ã¤ãããªãå ´åãæ¬¡ã®ãããªã¬ã¹ãã³ã¹ã使ç¨ããããã¨ãããã¾ãã
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Content-Language: en
{
"type": "https://developer.example.com/idempotency/docs",
"title": "Idempotency-Key is missing",
"detail": "This operation is idempotent and requires correct usage of Idempotency Key.",
}
ä¾
>ãã¼ä»ãã® POST ãªã¯ã¨ã¹ã
次ã®ã¡ãã»ã¼ã¸ã¯ãæ°ããã¦ã¼ã¶ã¼ãçæããããã® POST ãªã¯ã¨ã¹ãã示ãã¦ãã¾ãã
ãã¼ 9c7d2b4a0e1f6c835a2d1b0f4e3c5a7d ã¯ããã¹ããå
¬éãã¦ããè¦ä»¶ã¨ä¸è´ãã䏿ã®å¤ã§ãï¼example.com ã¯ãã®ãããã¼ã«å¯¾å¿ãã¦ããªããããããã§ã¯æ¶ç©ºã®å¤ãè¨å®ãã¦ãã¾ãï¼ã
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Idempotency-Key: 9c7d2b4a0e1f6c835a2d1b0f4e3c5a7d
{
"user_id": "12345",
"name": "Sharma Chow",
"email": "sharmac@example.com"
}
ã¬ã¹ãã³ã¹ãè¿ã£ã¦ããªãå ´åãã¯ã©ã¤ã¢ã³ãã¯å ¨ãåããªã¯ã¨ã¹ããå®å ¨ã«åéä¿¡ã§ãã¾ãããµã¼ãã¼ãååã®ãªã¯ã¨ã¹ããåå¾ãã¦ããªããã°ããã®ãªã¯ã¨ã¹ãã«å¯¾ãã¦å¦çãè¡ãã¾ããããååã®ãªã¯ã¨ã¹ãããã§ã«åå¾ãã¦ããå ´åã2 ã¤ç®ã®ãªã¯ã¨ã¹ãã¯ç¡è¦ããã¾ããããµã¼ãã¼ã¯ 2 ã¤ç®ã®ãªã¯ã¨ã¹ããé常éãå¦çãããã®ããã«ã¬ã¹ãã³ã¹ãè¿ãã¾ãã
ã¯ã©ã¤ã¢ã³ãããªã¯ã¨ã¹ãããã°ããåéä¿¡ããã¨ã次ã®ãããªã¨ã©ã¼ã¬ã¹ãã³ã¹ãåå¾ããããã¨ãããã¾ãã ãªããå¿ é ã¨ãããã®ã¯ HTTP ã¹ãã¼ã¿ã¹ã³ã¼ãã®ã¿ã§ããããã®ä»ã®æ å ±ã¯ãµã¼ãã¼ã«ãã£ã¦å®ç¾©ããã¾ãã
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
Content-Language: en
{
"type": "https://example.com/idempotency/docs",
"title": "Server processing previous request.",
"detail": "A request with the same key is currently/still being processed.",
}
仿§æ¸
| 仿§æ¸ |
|---|
| Unknown specification > |