| ã€ã³ã¿ãŒãããæè¡ã¿ã¹ã¯ãã©ãŒã¹ (IETF) | J. Reschke |
| Request for Comments: 10008 | greenbytes |
| åé¡: æšæºåéçš | J. Snell |
| ISSN: 2070-1721 | Cloudflare |
| M. Bishop | |
| Akamai | |
| 2026幎6æ |
HTTP QUERY ã¡ãœãã
æŠèŠ
æ¬ä»æ§ã¯ãHTTP ã® QUERY ã¡ãœãããå®çŸ©ãããQUERY ã¯ããªã¯ãšã¹ã 察象ã«å¯Ÿããåå°ãããã³ã³ãã³ããå®å šãã€åªçãªæ¹æ³ã§åŠçãããã®åŸã åŠççµæãå¿çãšããŠè¿ãããšãèŠæ±ããããã㯠POST ãªã¯ãšã¹ãã«äŒŒãŠããããQUERY ãªã¯ãšã¹ãã¯ã éšåçãªç¶æ 倿Žãæžå¿µããããšãªããèªåçã«ç¹°ãè¿ãããåéãããã§ããã
æ¬ã¡ã¢ã®äœçœ®ä»ã
æ¬ææžã¯ãã€ã³ã¿ãŒãããã®æšæºåéçšã®ææžã§ããã
æ¬ææžã¯ãã€ã³ã¿ãŒãããæè¡ã¿ã¹ã¯ãã©ãŒã¹ (IETF) ã®ææç©ã§ãããæ¬ææžã¯ã IETF ã³ãã¥ããã£ãŒã®åæã衚ããŠãããå ¬éã¬ãã¥ãŒãåãã ã€ã³ã¿ãŒãããæè¡éå¶ã°ã«ãŒã (IESG) ã«ãã£ãŠå ¬éãæ¿èªãããã ã€ã³ã¿ãŒãããæšæºã«ã€ããŠã®è©³çްã¯ãRFC 7841 ã®ç¬¬2ç¯ãåç §ã
æ¬ææžã®çŸåšã®ç¶æ ãæ£èª€æ å ±ãããã³æ¬ææžã«å¯Ÿãã ãã£ãŒãããã¯ã®æäŸæ¹æ³ã«ã€ããŠã¯ãhttps://www.rfc-editor.org/info/rfc10008ãåç §ã
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
1. ã¯ããã«
æ¬ä»æ§ã¯ãå®å šãã€åªçãªãªã¯ãšã¹ããè¡ãææ®µãšã㊠HTTP QUERY ãªã¯ãšã¹ãã¡ãœããã å®çŸ©ããïŒç¬¬9.2ç¯ã[HTTP]ãåç §ïŒããã®ãªã¯ãšã¹ãã«ã¯ã 察象ãªãœãŒã¹ããªã¯ãšã¹ããã©ã®ããã«åŠçããããèšè¿°ãã衚çŸãåå°ãããã
äžè¬çãªã¯ãšãªã®ãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ãã:
GET /feed?q=foo&limit=10&sort=-published HTTP/1.1 Host: example.org
ããããäŒéããããŒã¿ã倧éã§ããªã¯ãšã¹ãã® URI ã«ç¬Šå·åã§ããªãå Žåããã® ãã¿ãŒã³ã«ã¯åé¡ãçãã:
- ãªã¯ãšã¹ãã¯ãçžäºã«èª¿æŽãããŠããªã倿°ã®ã·ã¹ãã ãééãåŸãããã ãµã€ãºå¶éã¯äºåã«ã¯ããããªãããšãå€ãïŒãã ãã第4.1ç¯ã[HTTP]ã§ã¯ãéä¿¡è ãš åä¿¡è ã«å¯Ÿããå°ãªããšã 8000 ãªã¯ãããããµããŒãããããšãæšå¥šããŠããç¹ã«æ³šæïŒã
- ããçš®ã®ããŒã¿ã察象 URI ã§è¡šçŸããããšã¯ããã®ããŒã¿ãæå¹ãª URI ã«ç¬Šå·åãã ãªãŒããŒãããã®ãããéå¹çã§ããã
- ãªã¯ãšã¹ã URI ã¯ããªã¯ãšã¹ãã³ã³ãã³ãããããã°ã«èšé²ãããããã ããã¯ããŒã¯ã«çŸããããšãããã
- ã¯ãšãªããªã¯ãšã¹ã URI ã«çŽæ¥ç¬Šå·åãããšãã¯ãšãªå ¥åã®ããããçµã¿åããã äºå®äžãå¥åã®ãªãœãŒã¹ãšããŠæ±ãããšã«ãªãã
GET ã®äœ¿çšã«ä»£ããæ¹æ³ãšããŠãå€ãã®å®è£ 㯠HTTP POST ã¡ãœããã䜿çšããŠã 以äžã®äŸã«ç€ºãããã«ã¯ãšãªãå®è¡ããããã®å Žåãã¯ãšãª æäœãžã®å ¥åã¯ããªã¯ãšã¹ã URI ã®ã¯ãšãªæåã䜿çšãã代ããã«ã ãªã¯ãšã¹ãã³ã³ãã³ããšããŠæž¡ãããã
ã¯ãšãªãèŠæ±ããããã® HTTP POST ã®å žåçãªäœ¿çšäŸã¯ã次ã®ãšããã§ãã:
POST /feed HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded q=foo&limit=10&sort=-published
ãããããã®æ¹æ³ã§ã¯ããªã¯ãšã¹ãã®éä¿¡å ã§ãã ãªãœãŒã¹ãšãµãŒããŒã«ã€ããŠã®å ·äœçãªç¥èããªããã°ãå®å šãã€åªçãªã¯ãšãªã å®è¡ãããŠããããšã¯ã容æã«ã¯æããã«ãªããªãã
QUERY ã¡ãœããã¯ãGET ãš POST ã®äœ¿çšã®éã«ããéãããåãã解決çãæäŸããã äžèšã®äŸã¯ã次ã®ããã«è¡šçŸããã:
QUERY /feed HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded q=foo&limit=10&sort=-published
POST ãšåæ§ã«ãã¯ãšãªæäœãžã®å ¥åã¯ããªã¯ãšã¹ã URI ã®äžéšã§ã¯ãªãã ãªã¯ãšã¹ãã®ã³ã³ãã³ããšããŠæž¡ããããããããPOST ãšã¯ç°ãªãããã®ã¡ãœããã¯æç€ºçã«å®å šã〠åªçã§ããããã£ãã·ã¥åŠçãèªåå詊è¡ãªã©ã®æ©èœãåäœãããããšãã§ããã
éèŠãªãªãœãŒã¹ã¯ãã¹ãŠ URI ã«ãã£ãŠèå¥ãããã¹ãã§ãããšããèšèšååãèžãŸãã æ¬ä»æ§ã¯ããµãŒããŒãã¯ãšãªèªäœã«ãã ç¹å®ã®ã¯ãšãªçµæã«ã URI ãå²ãåœãŠãåŸã§ GET ãªã¯ãšã¹ãã«äœ¿çšã§ããããã«ããæ¹æ³ãèšè¿°ããã
èŠçŽãããšã次ã®ãšããã§ãã:
| GET | QUERY | POST | |
|---|---|---|---|
| å®å š | ã¯ã | ã¯ã | ããã§ãªãå¯èœæ§ããã |
| åªç | ã¯ã | ã¯ã | ããã§ãªãå¯èœæ§ããã |
| ã¯ãšãªèªäœã® URI | ããïŒå®çŸ©ã«ããïŒ | ä»»æïŒLocation å¿çãã£ãŒã«ãïŒ | ãªã |
| ã¯ãšãªçµæã® URI | ä»»æïŒContent-Location å¿ç ãã£ãŒã«ãïŒ | ä»»æïŒContent-Location å¿ç ãã£ãŒã«ãïŒ | ä»»æïŒContent-Location å¿ç ãã£ãŒã«ãïŒ |
| ãã£ãã·ã¥å¯èœ | ã¯ã | ã¯ã | ã¯ãããã ããå°æ¥ã® GET ãŸã㯠HEAD ãªã¯ãšã¹ãã«å¯ŸããŠã®ã¿ |
| ã³ã³ãã³ãïŒããã£ïŒ | ãå®çŸ©ãããæå³è«ãªãã | æ³å®ãããïŒæå³è«ã¯å¯Ÿè±¡ ãªãœãŒã¹ã«äŸåïŒ | æ³å®ãããïŒæå³è«ã¯å¯Ÿè±¡ ãªãœãŒã¹ã«äŸåïŒ |
1.1. çšèª
ããã«ãURI ã®ã¯ãšãªæåã«å«ãŸãããã©ã¡ãŒã¿ãŒãæãçšèªãšããŠãURI ã¯ãšãªãã©ã¡ãŒã¿ãŒã 䜿çšããïŒç¬¬4.2.2ç¯ã [HTTP]ïŒããŸããã¯ãšãª ã³ã³ãã³ãã¯ããªã¯ãšã¹ãã³ã³ãã³ãïŒç¬¬6.4ç¯ã[HTTP]ïŒã®ãã¡ãQUERY ãªã¯ãšã¹ãã®ãã®ãæãã
1.2. 衚èšèŠå
ããŒã¯ãŒã "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", ããã³ "OPTIONAL" ã¯ãæ¬ææžã§ã¯ã次ã«èšè¿°ããããšããã«è§£éããã: BCP 14 [RFC2119] [RFC8174]ã ãã ããããã«ç€ºãããã«ããã¹ãŠå€§æåã§çŸããå Žåã«éãã
2. QUERY ã¡ãœãã
QUERY ã¡ãœããã¯ããµãŒããŒåŽã®ã¯ãšãªãéå§ããããã«äœ¿çšããããGET ã¡ãœããã¯ã 察象 URI ã«ãã£ãŠèå¥ããããªãœãŒã¹ã®è¡šçŸãèŠæ±ããïŒç¬¬7.1ç¯ã[HTTP]ã§å®çŸ©ãããïŒã®ã«å¯ŸããQUERY ã¡ãœããã¯ã 察象ãªãœãŒã¹ã«å¯Ÿãããã®å¯Ÿè±¡ãªãœãŒã¹ã®ç¯å²å ã§ã¯ãšãªæäœãå®è¡ãããã èŠæ±ããããã«äœ¿çšãããã
ãªã¯ãšã¹ãã®ã³ã³ãã³ããšãã®ã¡ãã£ã¢ã¿ã€ãããã¯ãšãªãå®çŸ©ããããªãªãžã³ãµãŒããŒã¯ã 察象ãªãœãŒã¹ã«åºã¥ããŠæäœã®ç¯å²ã決å®ããã
ãµãŒããŒã¯ å¿ ã ãªã¯ãšã¹ãã倱æãããªããã°ãªããªããContent-Type ãªã¯ãšã¹ããã£ãŒã«ãïŒ[HTTP]ã第8.3ç¯ïŒã æ¬ èœããŠãããããªã¯ãšã¹ãã³ã³ãã³ããšæŽåããªãå Žåããããã«è©²åœããã
ãã¹ãŠã® HTTP ã¡ãœãããšåæ§ã«ã察象 URI ã®ã¯ãšãªéšåã¯ãã¯ãšãªå¯Ÿè±¡ã®ãªãœãŒã¹ã® èå¥ã«é¢äžããããããã¯ãšãªçµæã«çŽæ¥åœ±é¿ãããã©ãããããã³ã©ã®ããã«åœ±é¿ãããã¯ã ãªãœãŒã¹ã«åºæã§ãããæ¬ä»æ§ã®ç¯å²å€ã§ããã
QUERY ãªã¯ãšã¹ãã¯ã察象ãªãœãŒã¹ã«é¢ããŠå®å šã§ããïŒ[HTTP]ã第9.2.1ç¯ïŒã ããªãã¡ãã¯ã©ã€ã¢ã³ãã¯ã察象ãªãœãŒã¹ã®ç¶æ ã倿Žãããããšã èŠæ±ãæåŸ ãããªããããã¯ããµãŒããŒã远å ã® HTTP ãªãœãŒã¹ãäœæãã ãããéããŠè¿œå æ å ±ãååŸã§ããããã«ããããšã劚ããªãïŒ2.3ç¯ããã³2.4ç¯ãåç §ïŒã
ããã«ãQUERY ãªã¯ãšã¹ãã¯åªçã§ããïŒ[HTTP]ã第9.2.2ç¯ïŒã ããšãã°æ¥ç¶é害ã®åŸãªã©ãå¿ èŠã«å¿ããŠå詊è¡ãããç¹°ãè¿ãããã§ããã
第15.3ç¯ã [HTTP]ã«åŸãã2xxïŒæåïŒ å¿çã³ãŒãã¯ããªã¯ãšã¹ããæ£åžžã«åä¿¡ãããçè§£ãããåãå ¥ããããããšã瀺ãã
ç¹ã«ã200 (OK) å¿çã¯ãã¯ãšãªãæ£åžžã«åŠçããã ãã®åŠççµæãå¿çã³ã³ãã³ããšããŠåå°ãããŠããããšã瀺ãã
2.1. ã¡ãã£ã¢ã¿ã€ããšã³ã³ãã³ãããŽã·ãšãŒã·ã§ã³
QUERY ãªã¯ãšã¹ãã®æå³è«ã¯ããªã¯ãšã¹ãã³ã³ãã³ããšãããã«é¢é£ä»ãããã ã¡ã¿ããŒã¿ïŒã¡ãã£ã¢ã¿ã€ããªã©ïŒã®äž¡æ¹ã«äŸåããïŒ[HTTP]ã第8.3.1ç¯ïŒã äžè¬ã«ãã³ã³ãã³ããšã¡ã¿ããŒã¿ãæŽåããªããªã¯ãšã¹ãã«åé¡ãããå Žåãå¿ ã 4xxïŒã¯ã©ã€ã¢ã³ããšã©ãŒïŒå¿çã«ãã£ãŠæåŠããªããã°ãªããªãïŒ[HTTP]ã第15.5ç¯ïŒã
以äžã®äžèЧã¯ãããŸããŸãªå€±æã®äºäŸãèšè¿°ããå ·äœçãªã¹ããŒã¿ã¹ã³ãŒããæšå¥šãã:
- ãªã¯ãšã¹ãã«ã¡ãã£ã¢ã¿ã€ãæ å ±ãæ¬ ããŠããå Žåãå®çŸ©äžããã®ãªã¯ãšã¹ãã¯äžæ£ã§ããã 400ïŒã¯ã©ã€ã¢ã³ããšã©ãŒïŒãªã©ã® 4xx ã¹ããŒã¿ã¹ã³ãŒãã§å€±æãããå¿ èŠãããã
- ã¡ãã£ã¢ã¿ã€ããæå®ãããŠãããããªãœãŒã¹ã§ãµããŒããããŠããªãå Žåã415 (Unsupported Media Type) ãé©åã§ãããããã«ã¯ç¹ã«ã ã¡ãã£ã¢ã¿ã€ãèªäœã¯æ¢ç¥ã§ãããã®ã®ã察象ãªãœãŒã¹ãžã® QUERY ã«åºæã® æå³è«ãååšããªãå Žåãå«ãŸããããããã®å ŽåããAccept-Query å¿çãã£ãŒã«ãïŒç¬¬3ç¯ïŒã 䜿çšããŠããµããŒããããã¡ãã£ã¢ã¿ã€ããã¯ã©ã€ã¢ã³ãã«éç¥ã§ããã
- ã¡ãã£ã¢ã¿ã€ããæå®ãããŠããããå®éã®ãªã¯ãšã¹ãã³ã³ãã³ããšæŽåããªãå Žåã 400 (Bad Request) ãè¿ãããšãã§ãããããªãã¡ããµãŒããŒã¯ãªã¯ãšã¹ãã³ã³ãã³ãããã¡ãã£ã¢ ã¿ã€ããæšæž¬ããæ¬ èœããå€ãã誀ã£ããå€ãäžæžãããããšã¯èš±ãããªã ïŒããªãã¡ããã³ã³ãã³ãã¹ãããã£ã³ã°ãïŒã
- ã¡ãã£ã¢ã¿ã€ããæå®ãããçè§£ãããŠãããã³ã³ãã³ããå®éã«ãã®ã¿ã€ããšæŽåãããã ã¯ãšãªã®å®éã®å 容ãåå ã§ã¯ãšãªãåŠçã§ããªãå Žåã ã¹ããŒã¿ã¹ 422 (Unprocessable Content) ã䜿çšã§ãããäŸãšããŠã¯ã ååšããªãããŒãã«ãæå®ãããæ§æäžã¯æ£ãã SQL ã¯ãšãªãæããããã
- ã¯ã©ã€ã¢ã³ãã Accept ãã£ãŒã«ãã䜿çšããŠç¹å®ã®å¿çã¡ãã£ã¢ã¿ã€ããèŠæ±ãïŒ[HTTP]ã第 12.5.1ç¯ïŒãããããªãœãŒã¹ã§ãµããŒããããŠããªãå Žåãã¹ããŒã¿ã¹ã³ãŒã 406 (Not Acceptable) ãé©åã§ããã
2.2. ç䟡ãªãªãœãŒã¹
ãã QUERY ãªã¯ãšã¹ãã®ç䟡ãªãªãœãŒã¹ã¯ãGET ãªã¯ãšã¹ãã«å¿çãã ãã® QUERY ãªã¯ãšã¹ããšãã®å¯Ÿè±¡ã衚ããã¡ãã»ãŒãžã® ã³ã³ãã³ããšã¡ã¿ããŒã¿ã®äž¡æ¹ãèæ ®ãããªãœãŒã¹ã§ããïŒç¬¬6ç¯ã[HTTP]ïŒãç¹ã«ãããã«ã¯ã 衚çŸã¡ã¿ããŒã¿ïŒç¬¬8ç¯ã[HTTP]ïŒãããšãã° ã³ã³ãã³ãã®ã¡ãã£ã¢ã¿ã€ããå«ãŸããã
èšãæãããšãç䟡ãªãªãœãŒã¹ã¯ãQUERY ãå®è£ ãããªãœãŒã¹ããã ãªã¯ãšã¹ãã³ã³ãã³ããçµã¿èŸŒãããšã«ãã£ãŠå°åºãããã
ç䟡ãªãªãœãŒã¹ãšããçšèªã¯ãéžæããã衚çŸãªã©ã HTTP ã®ä»ã®åŽé¢ã®åäœãå®çŸ©ããããã®ææ®µãšããŠäœ¿çšãããããµãŒããŒã¯ã ãããã®ãªãœãŒã¹ã« URI ãå²ãåœãŠãããšãã§ãããããã®å¿ èŠã¯ãªãïŒç¬¬1.1ç¯ã[URI]ãåç §ïŒãå²ãåœãŠã å Žåããããã®ãªãœãŒã¹ã«ã¯ GET ãªã¯ãšã¹ãã§ã¢ã¯ã»ã¹ã§ããããã«ãªãã
2.3. Content-Location å¿çãã£ãŒã«ã
æåå¿çïŒ2xxã第15.3ç¯ã [HTTP]ïŒã«ã¯ã æäœã®çµæã«å¯Ÿå¿ãããªãœãŒã¹ã®èå¥åãå«ã Content-Location ããããŒãã£ãŒã«ãã å«ããããšãã§ããã詳现ã¯ã第8.7ç¯ã[HTTP]ãåç §ãããã¯ã ã¯ã©ã€ã¢ã³ãã瀺ããã URI ã«å¯Ÿã㊠GET ãªã¯ãšã¹ããéä¿¡ããããšã§ã çŽåã«å®è¡ãããã¯ãšãªæäœã®çµæãååŸã§ããããšãããµãŒããŒã®äž»åŒµã衚ãã 瀺ããããªãœãŒã¹ã¯ãäžæçãªãã®ã§ããå¯èœæ§ãããã
ä»é² A.4.1ã äŸãšããŠåç §ã
2.4. Location å¿çãã£ãŒã«ã
ãµãŒããŒã¯ãQUERY ãªã¯ãšã¹ãã®ç䟡ãªãªãœãŒã¹ïŒç¬¬2.2ç¯ïŒã« URI ãå²ãåœãŠãããšãã§ãããå²ãåœãŠã å Žåããã®ãªãœãŒã¹ã® URI ãã2xx å¿çã® Location ããããŒãã£ãŒã«ãã« å«ããããšãã§ããïŒç¬¬10.2.2ç¯ã [HTTP]ãåç §ïŒãããã¯ã ã¯ã©ã€ã¢ã³ãã瀺ããã URI ã« GET ãªã¯ãšã¹ããéä¿¡ããããšã§ãã¯ãšãªã³ã³ãã³ããåéä¿¡ããã«ã çŽåã«å®è¡ãããã¯ãšãªæäœãç¹°ãè¿ããããšãã䞻匵ã衚ãããã®ãªãœãŒã¹ã® URI ã¯ã äžæçãªãã®ã§ããå¯èœæ§ããããå°æ¥ã®ãªã¯ãšã¹ãã倱æããå Žåãã¯ã©ã€ã¢ã³ãã¯ãå ã® QUERY ãªã¯ãšã¹ã察象ãšã以åã«éä¿¡ããã³ã³ãã³ãã䜿çšããŠå詊è¡ã§ããã
ä»é² A.4.2ãäŸãšããŠåç §ã
2.5. ãªãã€ã¬ã¯ã
å Žåã«ãã£ãŠã¯ããµãŒããŒã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ããå¥ã® URI ã«ãªãã€ã¬ã¯ãããããšã§ã QUERY ãªã¯ãšã¹ãã«éæ¥çã«å¿çããããšãéžæããããšãããïŒç¬¬15.4ç¯ã [HTTP]ãåç §ïŒã
ã¹ããŒã¿ã¹ã³ãŒã 301 (Moved Permanentlyã[HTTP]ã第 15.4.2ç¯ïŒããŸã㯠308 (Permanent Redirectã[HTTP]ã第 15.4.9ç¯ïŒã®å¿çã¯ã察象ãªãœãŒã¹ããLocation å¿çãã£ãŒã«ãã«ãã£ãŠåç §ãããå¥ã® URI ã«æä¹ çã«ç§»åããããšã瀺ãïŒ[HTTP]ã第 10.2.2ç¯ïŒãåæ§ã«ãã¹ããŒã¿ã¹ã³ãŒã 302 (Foundã[HTTP]ã第 15.4.3ç¯ïŒããŸã㯠307 (Temporary Redirectã[HTTP]ã第 15.4.8ç¯ïŒã®å¿çã¯ã察象ãªãœãŒã¹ãäžæçã«ç§»åããããšã瀺ããããã4ã€ã® å Žåã®ãããã«ãããŠãããµãŒããŒã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ããåæ§ã® QUERY ãªã¯ãšã¹ãã Location ã«ãã£ãŠåç §ãããæ°ãã察象 URI ã«éä¿¡ããããšã§ãå ã® QUERY ãªã¯ãšã¹ãã éæã§ããããšã瀺åããŠããã
301 ãŸã㯠302 å¿çã®åŸã§ POST ã GET ãªã¯ãšã¹ããšããŠãªãã€ã¬ã¯ãããäŸå€ã¯ã QUERY ãªã¯ãšã¹ãã«ã¯é©çšãããªãããšã«æ³šæã
ã¹ããŒã¿ã¹ã³ãŒã 303 (See Otherã第15.4.4ç¯ã [HTTP]ïŒã® QUERY ãžã®å¿çã¯ã å ã®ã¯ãšãªããLocation å¿çãã£ãŒã«ãã«ãã£ãŠåç §ããã URI ã«å¯Ÿããéåžžã®ååŸãªã¯ãšã¹ãã§ éæã§ããããšã瀺ãïŒ[HTTP]ã第 10.2.2ç¯ïŒãHTTP ã§ã¯ãããã¯ãæ°ãã察象 URI ã« GET ãªã¯ãšã¹ããéä¿¡ããããšãæå³ããã ãã®äŸã¯ãä»é² A.4.3ã«ç€ºãããŠããã
2.6. æ¡ä»¶ä»ããªã¯ãšã¹ã
éžæããã衚çŸïŒç¬¬3.2ç¯ã[HTTP]ïŒã¯ãQUERY ãªã¯ãšã¹ãã®å Žåã ãã® QUERY ãªã¯ãšã¹ãã®ç䟡ãªãªãœãŒã¹ïŒç¬¬2.2ç¯ïŒã«å¯Ÿãã GET ãªã¯ãšã¹ãã® å Žåãšåãã§ããã
æ¡ä»¶ä»ã QUERY ã¯ãéžæããã衚çŸïŒããªãã¡ãã³ã³ãã³ãããŽã·ãšãŒã·ã§ã³åŸã®ã¯ãšãªçµæïŒãã æ¡ä»¶ä»ãããããŒãã£ãŒã«ãã«èšè¿°ãããç¶æ³ã«ãããŠã®ã¿ã å¿çã§è¿ãããšãèŠæ±ãããããã¯ã第13ç¯ã[HTTP]ã§å®çŸ©ããããšããã§ããã
ä»é² A.5ã äŸãšããŠåç §ã
2.7. ãã£ãã·ã¥åŠç
QUERY ã¡ãœãããžã®å¿çã¯ãã£ãã·ã¥å¯èœã§ããããã£ãã·ã¥ã¯ãããäœ¿çš ããŠãããã ãã®çšéã¯ã次ã«åŸã£ãŠåŸç¶ã® QUERY ãªã¯ãšã¹ããæºããããšã§ãã: 第4ç¯ã[HTTP-CACHING]ã
QUERY ãªã¯ãšã¹ãã®ãã£ãã·ã¥ããŒïŒç¬¬2ç¯ã[HTTP-CACHING]ïŒã«ã¯ãå¿ ã ãªã¯ãšã¹ãã³ã³ãã³ãïŒç¬¬6ç¯ã[HTTP-CACHING]ïŒãšé¢é£ãã ã¡ã¿ããŒã¿ïŒç¬¬8ç¯ã [HTTP]ïŒãçµã¿èŸŒãŸãªããã°ãªããªãã
ãã£ãã·ã¥å¹çãæ¹åããããããã£ãã·ã¥ã¯äºåã«é€å» ããŠãããã ãã®å¯Ÿè±¡ã¯ããªã¯ãšã¹ãã³ã³ãã³ããšé¢é£ããã¡ã¿ããŒã¿ã«ããããæå³äžéèŠã§ãªãå·®ç°ã§ãããããšãã°ã 次ã®ãããªæ¹æ³ã«ãã:
- ã³ã³ãã³ã笊å·åãé€å»ããïŒç¬¬8.4ç¯ã [HTTP]ïŒã
- ãªã¯ãšã¹ãã® Content-Type ãã£ãŒã«ãã«ããã¡ãã£ã¢ãµãã¿ã€ãã®æ¥å°ŸèŸã瀺ãã 圢åŒäžã®æ £äŸã«é¢ããç¥èã«åºã¥ããŠæ£èŠåããïŒããšãã° "+json"ã第 4.2.8ç¯ã[RFC6838]ãåç §ïŒã
- ãªã¯ãšã¹ãã® Content-Type ãã£ãŒã«ãã«ãã£ãŠç€ºãããã ã³ã³ãã³ãèªäœã®æå³è«ã«é¢ããç¥èã«åºã¥ããŠæ£èŠåããã
ãã®ãããªå€æã¯ããã£ãã·ã¥ããŒãçæããç®çã§ã®ã¿å®è¡ããã ãªã¯ãšã¹ãèªäœã倿Žãããã®ã§ã¯ãªãããšã«æ³šæã
ã¯ã©ã€ã¢ã³ãã¯ã"no-transform" ãã£ãã·ã¥æä»€ã䜿çšããŠïŒç¬¬ 5.2.1.6ç¯ã[HTTP-CACHING]ïŒããã®ãããªå€æã è¡ãããªãããšãæãæšã瀺ãããšãã§ããïŒãã ãããã®æä»€ã¯å©èšã«ãããªãç¹ã«æ³šæïŒã
QUERY ã¡ãœãããžã®å¿çã®ãã£ãã·ã¥åŠçã¯ãæ¬è³ªçã« GET ãžã®å¿çã®ãã£ãã·ã¥åŠçããè€éã§ããã ãã£ãã·ã¥ããŒã決å®ããããã«ããªã¯ãšã¹ãã®ã³ã³ãã³ããå®å šã«èªã¿åãå¿ èŠã ããããã§ãããQUERY å¿çããLocation å¿çãã£ãŒã«ãïŒç¬¬2.4ç¯ïŒãæäŸããŠã ç䟡ãªãªãœãŒã¹ïŒç¬¬2.2ç¯ïŒã® URI ã瀺ãå Žåãã¯ã©ã€ã¢ã³ãã¯åŸç¶ã®ãªã¯ãšã¹ãã GET ã«åãæ¿ããããšã§ãåŠçãç°¡çŽ åã§ããã
2.8. ç¯å² ãªã¯ãšã¹ã
QUERY ã®ç¯å²ãªã¯ãšã¹ãã®æå³è«ã¯ãGET ã®ãã®ãšåãã§ããã 第14ç¯ã[HTTP]ã§å®çŸ©ããããšããã§ããããã ãããã€ãç¯å²ãªã¯ãšã¹ã ïŒå·çæç¹ã§å®çŸ©ãããŠããå¯äžã®ç¯å²åäœïŒã¯ã QUERY ãªã¯ãšã¹ãã®çµæã«å¯ŸããŠã¯ãã»ãšãã©æçšã§ã¯ãªãã
ã¯ãšãªåœ¢åŒã¯ãçµæéåãå¶éããããããŒãžåäœã§ååŸãããããç¬èªã®æ¹æ³ãå®çŸ©ããããšãå€ãã ããšãã°ãSQL ã® "FETCH FIRST ... ROWS ONLY" ããããHTTP ç¯å²ãªã¯ãšã¹ãã®ä»£ããã«ã ãããã®çµã¿èŸŒã¿æ©èœã䜿çšãããããšãæ³å®ãããã
3. Accept-Query ããããŒãã£ãŒã«ã
"Accept-Query" å¿çããããŒãã£ãŒã«ãã¯ããªãœãŒã¹ã QUERY ã¡ãœããã®ãµããŒããçŽæ¥éç¥ãã åæã«ã䜿çšã§ããå ·äœçãªã¯ãšãªåœ¢åŒã®ã¡ãã£ã¢ã¿ã€ããèå¥ãããã㫠䜿çšã§ããã
Accept-Query ã¯ãã¡ãã£ã¢ç¯å²ã®ãªã¹ãïŒç¬¬12.5.1ç¯ã [HTTP]ïŒããæ§é åãã£ãŒã«ãã® æ§æ [STRUCTURED-FIELDS]ã§å«ããã¡ãã£ã¢ ç¯å²ã¯ãToken ãŸã㯠String ããæã List åã®æ§é åããããŒãã£ãŒã«ãã«ãã£ãŠè¡šããã ãã©ã¡ãŒã¿ãŒãé€ããã¡ãã£ã¢ç¯å²ã®å€ãå«ãã
ã¡ãã£ã¢ã¿ã€ãã®ãã©ã¡ãŒã¿ãŒãããå Žåãããã㯠String åãŸã㯠Token åã®æ§é åãã£ãŒã«ããã©ã¡ãŒã¿ãŒã« 察å¿ä»ãããããToken ãš String ã®éžæã«æå³äžã®éãã¯ãªããããªãã¡ã åä¿¡è ã¯ å€æããŠãããïŒToken ãã String ãžïŒããããŠã¯ ãªããªã ã®ã¯ãåä¿¡ããåã«åºã¥ããŠç°ãªãåŠçãããããšã§ããã
ã¡ãã£ã¢ã¿ã€ãã¯ãToken ã«å®å šã«ã¯å¯Ÿå¿ããªããããšãã°ãå é ã«æ°åã䜿çšã§ããã ãã®ãããªå Žåã«ã¯ãString 圢åŒã䜿çšããå¿ èŠãããã
ãµããŒããããã¯ã€ã«ãã«ãŒãã®äœ¿çšæ³ã¯ãä»»æã®ã¿ã€ãã«äžèŽãã "*/*" ãšã æå®ãããã¿ã€ãã®ä»»æã®ãµãã¿ã€ãã«äžèŽãã "xxxx/*" ã®ã¿ã§ããã
ãã£ãŒã«ãå€ã«åæãããã¿ã€ãã®é åºã«æå³ã¯ãªãã
Accept-Query ãã£ãŒã«ãã®å€ã¯ãåããã¹ãå ±æãããµãŒããŒäžã®ãã¹ãŠã® URI ã«é©çšãããã èšãæãããšãã¯ãšãªæåã¯ç¡èŠããããåããªãœãŒã¹ãžã®ãªã¯ãšã¹ãã ç°ãªã Accept-Query å€ãè¿ãå ŽåãæåŸã«åä¿¡ããæ°é®®ãªå€ïŒç¬¬4.2ç¯ã [HTTP-CACHING]ã«ããïŒã䜿çšãããã
ããšãã°:
Accept-Query: "application/jsonpath", application/sql;charset="UTF-8"
ãã®ãã£ãŒã«ãã®æ§æã¯ã"Accept" ãªã©ã®ä»ã®ãã£ãŒã«ãã®æ§æãšäŒŒãŠããããã«èŠããã ïŒç¬¬12.5.1ç¯ã [HTTP]ïŒãããã¯æ§é åãã£ãŒã«ãã§ããã ãããã£ãŠ å¿ ã æ¬¡ã«æå®ããããšããã«åŠçããªããã°ãªããªã: 第4ç¯ã[STRUCTURED-FIELDS]ã
4. ã»ãã¥ãªãã£äžã®èæ ®äºé
QUERY ã¡ãœããã«ã¯ããã¹ãŠã® HTTP ã¡ãœãããšåãäžè¬çãªã»ãã¥ãªãã£äžã®èæ ®äºé ã é©çšãããããããã¯ã[HTTP]ã«èšè¿°ãããŠããã
ããã¯ãURIïŒããšãã°ãã¯ãšãªæåïŒã«ãªã¯ãšã¹ãæ å ±ãæž¡ãããšã® 代æ¿ãšããŠäœ¿çšã§ãããURI ã¯ãªã¯ãšã¹ãã³ã³ãã³ããããã仲ä»è ã«ãã£ãŠãã°ã«èšé²ããããã ãã®ä»ã®åŠçãåããããããããããå Žåã«ãã£ãŠã¯ãã¡ããæãŸããããŸãã ã¯ãšãªã«æ©å¯æ å ±ãå«ãŸããå Žåã«ã¯ãURI ããã°ã«èšé²ãããå¯èœæ§ãã GET ãã QUERY ã䜿çšããåæ©ãšãªãããšãããã
ãµãŒããŒã QUERY ãªã¯ãšã¹ãã®çµæã衚ãäžæçãªãªãœãŒã¹ãäœæãïŒããšãã°ã Location ãŸã㯠Content-Location ãã£ãŒã«ãã§äœ¿çšããããïŒããã®ãªãœãŒã¹ã« URI ãå²ãåœãŠã ãªã¯ãšã¹ãã«ãã°ãžèšé²ã§ããªãæ©å¯æ å ±ãå«ãŸããå Žåããã® URI 㯠éžã¶ã¹ãã§ããããã®éãå ã®ãªã¯ãšã¹ãã³ã³ãã³ãã®æ©å¯éšåãäžåå«ãŸãªãããã« ããã
QUERY ã³ã³ãã³ãã誀ã£ãŠæ£èŠåãããã£ãã·ã¥ãããªãœãŒã¹ãã³ã³ãã³ããåŠçããæ¹æ³ãš 倧ããç°ãªãæ¹æ³ã§æ£èŠåãããã£ãã·ã¥ã¯ã æ£èŠåã«ãã£ãŠèª€ã£ãäžèŽãçãããšãäžæ£ç¢ºãªå¿çãè¿ãå¯èœæ§ãããã
ãªãªãžã³éãªãœãŒã¹å ±æ (CORS) ãå®è£ ãããŠãŒã¶ãŒãšãŒãžã§ã³ãããã® QUERY ãªã¯ãšã¹ãã«ã¯ã ãããªãã©ã€ãããªã¯ãšã¹ããå¿ èŠãšãªããQUERY ã¯ãCORS ã»ãŒããªã¹ãã«ç»é²ããã ã¡ãœããã®éåã«å±ããŠããªãããã§ããïŒ[FETCH]ãåç §ïŒã
5. IANA ã«é¢ããèæ ®äºé
5.1. QUERY ã¡ãœããã®ç»é²
IANA ã¯ãQUERY ã¡ãœãããããã€ããŒããã¹ã転éãããã³ã« (HTTP) ã¡ãœãã ã¬ãžã¹ããªãŒãã«è¿œå ããããã®å Žæã¯ <http://www.iana.org/assignments/http-methods> ã§ããïŒç¬¬ 16.3.1ç¯ã[HTTP]ãåç §ïŒã
| ã¡ãœããå | å®å š | åªç | 仿§ |
|---|---|---|---|
| QUERY | ã¯ã | ã¯ã | 第2ç¯ãRFC 10008 |
5.2. Accept-Query ãã£ãŒã«ãã®ç»é²
IANA ã¯ãAccept-Query ãã£ãŒã«ããããã€ããŒããã¹ã転éãããã³ã« (HTTP) ãã£ãŒã«ã åã¬ãžã¹ããªãŒãã«è¿œå ããããã®å Žæã¯ <https://www.iana.org/assignments/http-fields> ã§ããïŒç¬¬ 16.1.1ç¯ã[HTTP]ãåç §ïŒã
| ãã£ãŒã«ãå | ç¶æ | æ§é åå | åç § | ã³ã¡ã³ã |
|---|---|---|---|---|
| Accept-Query | æä¹ | List | 第3ç¯ãRFC 10008 |
6. åèæç®
6.1. èŠç¯çåèæç®
- [HTTP-CACHING]
- Fielding, R., ç·š, Nottingham, M., ç·š, ããã³ J. Reschke, ç·š, âHTTP ãã£ãã·ã¥åŠçâ, STD 98, RFC 9111, DOI 10.17487/RFC9111, 6æ 2022幎, <https://www.rfc-editor.org/info/rfc9111>.
- [HTTP]
- Fielding, R., ç·š, Nottingham, M., ç·š, ããã³ J. Reschke, ç·š, âHTTP ã®æå³è«â, STD 97, RFC 9110, DOI 10.17487/RFC9110, 6æ 2022幎, <https://www.rfc-editor.org/info/rfc9110>.
- [RFC2119]
- Bradner, S., âããŒã¯ãŒã: RFC ã«ãããŠèŠæ±ã¬ãã«ã瀺ãããã«äœ¿çšãããã®â, BCP 14, RFC 2119, DOI 10.17487/RFC2119, 3æ 1997幎, <https://www.rfc-editor.org/info/rfc2119>.
- [RFC8174]
- Leiba, B., âææ§ã: RFC 2119 ã®ããŒã¯ãŒãã«ããã倧æåãšå°æåâ, BCP 14, RFC 8174, DOI 10.17487/RFC8174, 5æ 2017幎, <https://www.rfc-editor.org/info/rfc8174>.
- [STRUCTURED-FIELDS]
- Nottingham, M. ããã³ P-H. Kamp, âæ§é åãã£ãŒã«ãå€: HTTP çšâ, RFC 9651, DOI 10.17487/RFC9651, 2024幎9æ, <https://www.rfc-editor.org/info/rfc9651>.
- [URI]
- Berners-Lee, T., Fielding, R., ããã³ L. Masinter, âçµ±äžãªãœãŒã¹ èå¥å (URI): æ±çšæ§æâ, STD 66, RFC 3986, DOI 10.17487/RFC3986, 1æ 2005幎, <https://www.rfc-editor.org/info/rfc3986>.
6.2. åèæ å ±
- [FETCH]
- WHATWG, âFETCHâ, WHATWG çŸè¡
æšæº, <https://fetch.spec.whatwg.org>.
ã³ããã ã¹ãããã·ã§ãã: <https://fetch.spec.whatwg.org/commit-snapshots/3bab31a55154bda73f25b45a23df718616f2f64e/>. - [RFC3253]
- Clemm, G., Amsden, J., Ellison, T., Kaler, C., ããã³ J. Whitehead, âããŒãžã§ã³ç®¡çæ¡åŒµ: WebDAV (Web 忣ãªãŒãµãªã³ã°ããã³ããŒãžã§ã³ç®¡ç) åãâ, RFC 3253, DOI 10.17487/RFC3253, 3æ 2002幎, <https://www.rfc-editor.org/info/rfc3253>.
- [RFC4918]
- Dusseault, L., ç·š, âHTTP æ¡åŒµ: Web 忣ãªãŒãµãªã³ã°ããã³ããŒãžã§ã³ç®¡ç (WebDAV) åãâ, RFC 4918, DOI 10.17487/RFC4918, 2007幎6æ, <https://www.rfc-editor.org/info/rfc4918>.
- [RFC5323]
- Reschke, J., ç·š, Reddy, S., Davis, J., ããã³ A. Babich, âWeb 忣ãªãŒãµãªã³ã° ããã³ããŒãžã§ã³ç®¡ç (WebDAV) SEARCHâ, RFC 5323, DOI 10.17487/RFC5323, 2008幎11æ, <https://www.rfc-editor.org/info/rfc5323>.
- [RFC6838]
- Freed, N., Klensin, J., ããã³ T. Hansen, âã¡ãã£ã¢ã¿ã€ãã®ä»æ§ ããã³ç»é²æç¶ãâ, BCP 13, RFC 6838, DOI 10.17487/RFC6838, 1æ 2013幎, <https://www.rfc-editor.org/info/rfc6838>.
- [RFC8259]
- Bray, T., ç·š, â JavaScript Object Notation (JSON) ããŒã¿äº€æåœ¢åŒâ, STD 90, RFC 8259, DOI 10.17487/RFC8259, 2017幎12æ, <https://www.rfc-editor.org/info/rfc8259>.
- [RFC9535]
- Gössner, S., ç·š, Normington, G., ç·š, ããã³ C. Bormann, ç·š, âJSONPath: ã¯ãšãª åŒïŒJSON çšïŒâ, RFC 9535, DOI 10.17487/RFC9535, 2024幎2æ, <https://www.rfc-editor.org/info/rfc9535>.
- [URL]
- WHATWG, âURLâ, WHATWG çŸè¡æšæº,
<https://url.spec.whatwg.org>.
ã³ããã ã¹ãããã·ã§ãã: <https://url.spec.whatwg.org/commit-snapshots/52526653e848c5a56598c84aa4bc8ac9025fb66b/>. - [XSLT]
- Kay, M., ç·š, âXSL
倿 (XSLT) ããŒãžã§ã³ 3.0â, W3C å§å, 2017幎6æ,
<https://www.w3.org/TR/2017/REC-xslt-30-20170608/>.
ææ° ããŒãžã§ã³ã®å Žæ: https://www.w3.org/TR/xslt-30/.
ä»é² A. äŸ
以äžã®äŸã¯ã説æã®ã¿ãç®çãšãããå®éã«ããã»ã©çãã¯ãšãªãéä¿¡ããå¿ èŠãããå Žåã GET ã䜿çšããæ¹ãããå¯èœæ§ãé«ãã
ã»ãšãã©ã®äŸã§äœ¿çšããã¡ãã£ã¢ã¿ã€ãã¯ã"application/x-www-form-urlencoded" ã§ããïŒãã©ãŠã¶ãŒã® ãŠãŒã¶ãŒã¯ã©ã€ã¢ã³ãããã® POST ãªã¯ãšã¹ãã§äœ¿çšããããã®ã§ã"application/x-www-form-urlencoded" ã[URL]ã§å®çŸ©ãããïŒãContent-Length ãã£ãŒã«ãã¯ã ç°¡æœã«ããããçç¥ããŠããã
A.1. åçŽãªã¯ãšãª
以äžã¯ãçŽæ¥å¿çã䌎ãåçŽãªã¯ãšãªã§ãã:
QUERY /contacts HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Accept: application/json select=surname,givenname,email&limit=10&match=%22email=*@example.*%22
å¿ç:
HTTP/1.1 200 OK
Content-Type: application/json
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Jones",
"givenname": "Sally",
"email": "sally.jones@example.com" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
A.2. QUERY ãµããŒãã®æ€åº
QUERY ã®ãµããŒããæ€åºããåçŽãªæ¹æ³ã¯ãOPTIONSïŒç¬¬9.3.7ç¯ã [HTTP]ïŒã¡ãœããã«ãã£ãŠæäŸããã:
OPTIONS /contacts HTTP/1.1 Host: example.org
å¿ç:
HTTP/1.1 200 OK Allow: GET, QUERY, OPTIONS, HEAD
Allow å¿çãã£ãŒã«ãïŒç¬¬10.2.1ç¯ã [HTTP]ïŒã¯ãæå®ããããªãœãŒã¹ã§ ãµããŒããããã¡ãœããã®éåã瀺ãã
OPTIONS ã®äœ¿çšã«ä»£ããæ¹æ³ããããããšãã°ããµãŒããŒã®ãµããŒãã«é¢ããäºåç¥èãªãã«ã QUERY ãªã¯ãšã¹ãã詊ã¿ãããšãã§ããããã®å ŽåããµãŒããŒã¯ãªã¯ãšã¹ãã åŠçããããããã㯠405 (Method Not Allowedã第15.5.6ç¯ã [HTTP]ïŒãªã©ã® 4xx ã¹ããŒã¿ã¹ã§ã Allow å¿çãã£ãŒã«ããå«ããŠå¿çããããšãããã
A.3. QUERY 圢åŒã®æ€åº
QUERY ã§ãµããŒããããã¡ãã£ã¢ã¿ã€ãã¯ãAccept-Query å¿çãã£ãŒã«ããéããŠæ€åºã§ããïŒç¬¬3ç¯ïŒ:
HEAD /contacts HTTP/1.1 Host: example.org
å¿ç:
HTTP/1.1 200 OK Content-Type: application/xhtml Accept-Query: application/x-www-form-urlencoded, application/sql
ã©ã®ãªã¯ãšã¹ãã¡ãœãããžã®å¿çã« Accept-Query ãå«ãŸãããã¯ã ã¢ã¯ã»ã¹å ã®ãªãœãŒã¹ã«ãã£ãŠç°ãªãã
Accept-Query ã確èªãã代ããã«ãQUERY ãªã¯ãšã¹ããè¡ãããã®åŸã 415 å¿ç (Unsupported Media Typeã第 15.5.16ç¯ã[HTTP]ïŒãªã©ã® 4xx ã¹ããŒã¿ã¹ã®å Žåã«ã Accept å¿çãã£ãŒã«ãã調ã¹ãæ¹æ³ãããïŒç¬¬12.5.1ç¯ã [HTTP]ïŒ:
HTTP/1.1 415 Unsupported Media Type Content-Type: application/xhtml Accept: application/x-www-form-urlencoded, application/sql
A.4. Content-Location, Locationãããã³ éæ¥å¿ç
次ã®åç¯ã§èª¬æããããã«ã2.3ç¯ããã³2.4ç¯ã«ãããæåå¿çã® Content-Location ããã³ Location å¿ç ãã£ãŒã«ãïŒ2xxã第15.3ç¯ã [HTTP]ïŒã¯ã GET ãªã¯ãšã¹ãã«å¿çãã代æ¿ãªãœãŒã¹ãèå¥ããæ¹æ³ãæäŸãããããã¯ãåä¿¡ãããªã¯ãšã¹ãã® çµæãååŸããããããŸãã¯å°æ¥ãåãæäœãå®è¡ãããªã¯ãšã¹ããè¡ãããã®ãã®ã§ããã ä»é² A.1ã®äŸã«æ»ããš:
QUERY /contacts HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Accept: application/json select=surname,givenname,email&limit=10&match=%22email=*@example.*%22
å¿ç:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /contacts/stored-results/17
Location: /contacts/stored-queries/42
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Date: Sun, 17 Nov 2024, 16:10:24 GMT
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Jones",
"givenname": "Sally",
"email": "sally.jones@example.com" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
A.4.1. Content-Location ã®äœ¿çš
äžã§åä¿¡ãã Content-Location å¿çãã£ãŒã«ãã¯ããã®ãã£ãŒã«ããçŸãã QUERY å¿çã®çµæãä¿æãããªãœãŒã¹ãèå¥ãã:
GET /contacts/stored-results/17 HTTP/1.1 Host: example.org Accept: application/json
å¿ç:
HTTP/1.1 200 OK
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Date: Sun, 17 Nov 2024, 16:10:25 GMT
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Jones",
"givenname": "Sally",
"email": "sally.jones@example.com" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
ãµãŒããŒããã®ãªãœãŒã¹ãç¡æéã«å®è£ ãç¶ããä¿èšŒã¯ãªãããšã« 泚æããããã£ãŠããšã©ãŒå¿çã®åŸãã¯ã©ã€ã¢ã³ãã¯ã æ°ãã代æ¿ã®å ŽæãååŸããããã«ãå ã® QUERY ãªã¯ãšã¹ããåå®è¡ããå¿ èŠãããã
A.4.2. Location ã®äœ¿çš
Location å¿çãã£ãŒã«ãã¯ãGET ã«å¯ŸããŠã å ã® QUERY ãªã¯ãšã¹ããšåãåŠçããã³ãã©ã¡ãŒã¿ãŒã«ããçŸåšã®çµæãè¿ããªãœãŒã¹ãèå¥ããã
GET /contacts/stored-queries/42 HTTP/1.1 Host: example.org Accept: application/json
ãã®äŸã§ã¯ã2024-11-17T16:12:01Z ã«1ã€ã®ãšã³ããªãŒãåé€ããã ïŒLast-Modified ãã£ãŒã«ãã§ç€ºããããšããïŒããããã£ãŠãå¿çã«ã¯2ã€ã®ãšã³ããªãŒã®ã¿ãå«ãŸãã:
HTTP/1.1 200 OK
Content-Type: application/json
Last-Modified: Sun, 17 November 2024, 16:12:01 GMT
ETag: "42-1"
Date: Sun, 17 Nov 2024, 16:13:17 GMT
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
ãµãŒããŒãåŒãç¶ããã®ãªãœãŒã¹ãå ¬éããŠããã ã¯ãšãªçµæã«å€æŽããªããšä»®å®ãããšã次ãå«ãåŸç¶ã®æ¡ä»¶ä»ã GET ãªã¯ãšã¹ã:
If-None-Match: "42-1"
ã¯ã304 (Not Modified) å¿çãçããããïŒç¬¬ 15.4.5ç¯ã[HTTP]ïŒã
A.4.3. 鿥å¿ç
ãµãŒããŒã¯ãã鿥ãå¿çïŒç¬¬2.5ç¯ïŒããã¹ããŒã¿ã¹ã³ãŒã 303 (See Otherã第 15.4.4ç¯ã[HTTP]ïŒã䜿çšããŠéä¿¡ã§ããã
次ã®åé ã«ãããªã¯ãšã¹ããäžããããå Žå: ä»é² A.4ã ãµãŒããŒã¯æ¬¡ã®ããã«å¿çããããšããã:
HTTP/1.1 303 See Other Content-Type: text/plain Date: Sun, 17 Nov 2024, 16:13:17 GMT Location: /contacts/stored-queries/42 "/contacts/stored-queries/42" ã«ããä¿åæžã¿ã¯ãšãªãåç §ã
ããã¯ãã¯ãšãªã®çµæãè¿ããªãç¹ãé€ãã°ã çŽæ¥å¿çã« Location ãå«ããããšã«äŒŒãŠãããããã«ããããµãŒããŒã¯ã 代æ¿ãªãœãŒã¹ã®çæãŸãã¯åå©çšã ããè¡ãããšãã§ããããã®ãªãœãŒã¹ã¯ããã®åŸãä»é² A.4.2ã«ç€ºãããã«äœ¿çšã§ããã
A.5. æ¡ä»¶ä»ããªã¯ãšã¹ã
QUERY ãå®è£ ãããªã¯ãšã¹ãã¡ãã£ã¢ã¿ã€ããšã㊠"application/sql" ãš "application/xslt+xml" [XSLT]ããµããŒããã ãªãœãŒã¹ãèããããã®ãªãœãŒã¹ã¯ã"text/csv" ãšããŠå¿çãçæã§ãããã¯ãšãªå¯Ÿè±¡ã®ããŒã¿ã»ããã¯ã RFC ææžã®æ å ±ãå«ã¿ãã¯ãšãªã¯10幎åäœã§ã°ã«ãŒãåãããæ å ±ãè¿ã:
QUERY /rfc-index.xml HTTP/1.1 Host: example.org Date: Sun, 7 Sep 2025, 00:00:00 GMT Content-Type: application/xslt+xml Accept: text/csv ...XSLT ã䜿çšããã¯ãšãªã³ã³ãã³ã...
å¿ç:
HTTP/1.1 200 OK Date: Sun, 7 Sep 2025, 00:00:00 GMT Location: /stored-queries/4815162342 Content-Type: text/csv Accept-Query: "application/sql", "application/xslt+xml" Last-Modified: Sun, 31 Aug 2025, 08:44:00 GMT Vary: Accept-Query, Content-Encoding, Content-Type decade, total, with errata, % with errata, average page count 1960, 26, 5, 19.2, 5.3 1970, 666, 18, 2.7, 6.1 1980, 376, 44, 11.7, 23.4 1990, 1593, 269, 16.9, 25.5 2000, 2888, 1048, 36.3, 27.3 2010, 2954, 895, 30.3, 26.1 2020, 1133, 230, 20.3, 26.2
ããã§ããµãŒããŒã¯ãç䟡ãªãªãœãŒã¹ã«ãã¹ "/stored-queries/4815162342" ã å²ãåœãŠãŠããïŒç¬¬2.4ç¯ïŒã ããã¯ãåŸã§ GET ãšãšãã«äœ¿çšããããã§ããã
ãã®åŸãã¯ã©ã€ã¢ã³ãã¯ã¯ãšãªãç¹°ãè¿ããã çµæã倿Žãããå Žåã«ã®ã¿è¿ãããæå®ãã:
QUERY /rfc-index.xml HTTP/1.1 Host: example.org Date: Mon, 8, Sep 2025, 11:00:00 GMT Content-Type: application/sql Accept: text/csv If-Modified-Since: Sun, 31 Aug 2025, 08:44:00 GMT Vary: Accept-Query, Content-Type ...åãã¯ãšãªã ããSQL ã䜿çš...
ã¯ãšãªå¯Ÿè±¡ã®ããŒã¿ã¯å€æŽãããŠããªãããããµãŒããŒã¯æ¬¡ã®ããã«å¿çãã:
HTTP/1.1 304 Not Modified Date: Mon, 8 Sep 2025, 11:00:00 GMT Content-Type: text/csv Location: /stored-queries/4815162342 Accept-Query: "application/sql", "application/xslt+xml" Last-Modified: Sun, 31 Aug 2025, 08:44:00 GMT Vary: Accept-Query, Content-Type
ãµãŒããŒãç䟡ãªãªãœãŒã¹ã® URI ã瀺ããããããã®ãªãœãŒã¹ã«ã¯ GET ã§ã¢ã¯ã»ã¹ã§ãããç¹ã«ãããã«ããã¯ãšãªãªã¯ãšã¹ãã®ã³ã³ãã³ãã®åéä¿¡ãåé¿ã§ãã:
GET /stored-queries/4815162342 HTTP/1.1 Host: example.org Date: Sun, 21, Sep 2025, 12:08:00 GMT Accept: text/csv If-Modified-Since: Sun, 31 Aug 2025, 00:00:00 GMT
ããã§ã¯ãããŒã¿ã»ããã®ç¶æ ãå®éã«å€æŽããããããæ°ããã³ã³ãã³ããè¿ããã:
HTTP/1.1 200 OK Date: Sun, 21, Sep 2025, 12:08:00 GMT Content-Type: text/csv Last-Modified: Thu, 18 Sep 2025, 19:56:00 GMT Vary: Accept-Query, Content-Encoding, Content-Type decade, total, with errata, % with errata, average page count 1960, 26, 5, 19.2, 5.3 1970, 666, 18, 2.7, 6.1 1980, 376, 44, 11.7, 23.4 1990, 1593, 269, 16.9, 25.5 2000, 2888, 1048, 36.3, 27.3 2010, 2954, 895, 30.3, 26.1 2020, 1133, 230, 20.3, 26.2
ïŒçŸåšã®å¹Žä»£ã«å¯Ÿå¿ããè¡ã®å€æŽã«æ³šæãïŒ
以äžã®å³ã¯ãæ¡ä»¶ä»ããªã¯ãšã¹ãã®äœ¿çšãšã ç䟡ãªãªãœãŒã¹ã« URI ãå²ãåœãŠãããå ŽåïŒããã³ã¯ã©ã€ã¢ã³ãã ãããæŽ»çšããŠããå ŽåïŒã«ãã©ã®ãããªéããçãåŸããã瀺ããæ¶ç©ºã®ãã£ãŒã«ãå "Validator" ã¯ã 説æã®ããã«äœ¿çšããŠããã
å³1: QUERY ã®ã¿ã䜿çšããããŒã¿ãããŒ
å³2: ç䟡ãªãªãœãŒã¹ãžã® GET ã䜿çšããããŒã¿ãããŒ
A.6. ãã®ä»ã®ã¯ãšãªåœ¢åŒ
以äžã®äŸã¯ãJSON 圢åŒã® [RFC8259] RFC æ£èª€æ å ±ããŒã¿ããŒã¹ãžã®ãªã¯ãšã¹ãã瀺ãã
以äžã®ãªã¯ãšã¹ãã¯ãæ¡åŒµå¯èœã¹ã¿ã€ã«ã·ãŒãèšèªå€æ (XSLT) ã䜿çšããŠã 幎ããšãããã³å®çŸ©ãããæ£èª€æ å ±ã®çš®å¥ããšã«éèšããæ£èª€æ å ±ãæœåºããã
QUERY /errata.json HTTP/1.1
Host: example.org
Content-Type: application/xslt+xml
Accept: application/xml, text/csv
<transform xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:j="http://www.w3.org/2005/xpath-functions"
version="3.0">
<output method="text"/>
<param name="input"/>
<variable name="json"
select="json-to-xml(unparsed-text($input))"/>
<variable name="sc">errata_status_code</variable>
<variable name="sd">submit_date</variable>
<template match="/">
<text>year, total, rejected, verified, hdu, reported</text>
<text> </text>
<variable name="en" select="$json//j:map"/>
<for-each-group select="$en"
group-by="substring-before(j:string[@key=$sd],'-')">
<sort select="current-grouping-key()"/>
<variable name="year" select="current-grouping-key()"/>
<variable name="errata" select=
"$en[$year=substring-before(j:string[@key=$sd],'-')]"/>
<value-of select="concat(
$year,
', ',
count($errata),
', ',
count($errata['Rejected'=j:string[@key=$sc]]),
', ',
count($errata['Verified'=j:string[@key=$sc]]),
', ',
count(
$errata['Held for Document Update'=j:string[@key=$sc]]),
', ',
count($errata['Reported'=j:string[@key=$sc]]),
' ')"/>
</for-each-group>
</template>
</transform>
å¿ç:
HTTP/1.1 200 OK Content-Type: text/csv Accept-Query: "application/jsonpath", "application/xslt+xml" Date: Wed, 19 Feb 2025, 17:10:01 GMT year, total, rejected, verified, hdu, reported 2000, 14, 0, 14, 0, 0 2001, 72, 1, 70, 1, 0 2002, 124, 8, 104, 12, 0 2003, 63, 0, 61, 2, 0 2004, 89, 1, 83, 5, 0 2005, 156, 10, 96, 50, 0 2006, 444, 54, 176, 214, 0 2007, 429, 48, 188, 193, 0 2008, 423, 52, 165, 206, 0 2009, 331, 39, 148, 144, 0 2010, 538, 80, 232, 222, 4 2011, 367, 47, 170, 150, 0 2012, 348, 54, 149, 145, 0 2013, 341, 61, 169, 106, 5 2014, 342, 73, 180, 72, 17 2015, 343, 79, 145, 89, 30 2016, 295, 46, 122, 82, 45 2017, 303, 46, 120, 84, 53 2018, 350, 61, 118, 98, 73 2019, 335, 47, 131, 94, 63 2020, 387, 68, 117, 123, 79 2021, 321, 44, 148, 63, 66 2022, 358, 37, 198, 40, 83 2023, 262, 38, 121, 33, 70 2024, 322, 33, 125, 23, 141 9999, 1, 0, 0, 1, 0
Accept-Query å¿çãã£ãŒã«ãããå¥ã®ã¯ãšãªåœ¢åŒã§ãã JSONPath [RFC9535]ããµããŒããããŠããããšã 瀺ããŠããç¹ã«æ³šæã以äžã®ãªã¯ãšã¹ãã¯ãéä¿¡ãããæ£èª€æ å ±ã®ãã¡ãåŽäžããããã®ãã¹ãŠã®èå¥åã 2024幎以éã«ã€ããŠå ±åãã:
QUERY /errata.json HTTP/1.1
Host: example.org
Content-Type: application/jsonpath
Accept: application/json
$..[
?@.errata_status_code=="Rejected"
&& @.submit_date>"2024"
]
["doc-id"]
å¿ç:
HTTP/1.1 200 OK Content-Type: application/json Accept-Query: "application/jsonpath", "application/xslt+xml" Date: Thu, 20 Feb 2025, 09:55:42 GMT Last-Modified: Thu, 20 Feb 2025 06:10:01 GMT [ "RFC1185","RFC8407","RFC6350","RFC8467","RFC1157","RFC9543", "RFC9076","RFC7656","RFC2822","RFC9460","RFC2104","RFC6797", "RFC9499","RFC9557","RFC2131","RFC2328","RFC9001","RFC3325", "RFC9438","RFC2526","RFC2985","RFC7643","RFC9132","RFC6376", "RFC9110","RFC9460","RFC7748","RFC9497","RFC8463","RFC4035", "RFC7239","RFC9083","RFC9537","RFC9537","RFC9420","RFC9000", "RFC9656","RFC9110","RFC2324","RFC2549","RFC6797","RFC2549", "RFC8894" ]
ä»é² B. ã¡ãœããå 'QUERY' ã®éžå®
ããã€ããŒããã¹ã転éãããã³ã« (HTTP) ã¡ãœããã¬ãžã¹ããªãŒãïŒ<http://www.iana.org/assignments/http-methods>ïŒã«ã¯ã ãå®å šããã€ãåªçããšããæ§è³ªãæã€ä»ã®3ã€ã®ã¡ãœãããããã§ã«å«ãŸããŠãã: "PROPFIND" [RFC4918], "REPORT" [RFC3253], ããã³ "SEARCH" [RFC5323]ã
ãããã®ãããããåå©çšãã æ¬ä»æ§ãæ°ããã¡ãœãã "QUERY" ãšããŠå®çŸ©ããå 容ã«åãããæŽæ°ããããšãå¯èœã§ãã£ããå®éãæ¬ä»æ§ã®åæ æ®µéã§ã¯ "SEARCH" ã䜿çšããŠããã
æçµçã«ã¡ãœããå "QUERY" ãéžã°ããçç±ã¯ã次ã®ãšããã§ãã:
- ä»ã®åè£ã¯ããªã¯ãšã¹ãã³ã³ãã³ãã«æ±çšçãªã¡ãã£ã¢ã¿ã€ãïŒ"application/xml"ïŒã䜿çšããã ãªã¯ãšã¹ãã®æå³è«ã¯ããªã¯ãšã¹ãã³ã³ãã³ãã®ã¿ã«äŸåããã
- ããã«ããããã¯ãããã WebDAV ã®æŽ»åã«ç±æ¥ããããã«ã€ããŠã¯å€ãã®äººãè€éãª ææ ãæ±ããŠããã
- "QUERY" ã¯ãURI ã®ã¯ãšãªæåãšã®é¢ä¿ãé©åã«æããŠããã
è¬èŸ
HTTP ã¯ãŒãã³ã°ã°ã«ãŒãã®ãã¹ãŠã®ã¡ã³ããŒã«ããã¢ã€ãã¢ãã¬ãã¥ãŒããã£ãŒãããã¯ã«æè¬ããã
ç¹ã«ãæ¬¡ã®æ¹ã ã®è²¢ç®ã«è¬æã衚ãã: Carsten Bormann, Mark Nottingham, Martin Thomson, Michael Thornburgh, Roberto Polli, Roy Fielding, ããã³ Will Hawkinsã
è²¢ç®è
Ashok Malhotra ã¯ãæ¬ä»æ§ã«ã€ãªããåæã®è°è«ã«åå ãã:
é»åã¡ãŒã«: malhotrasahib@gmail.com
ãã® HTTP ã¡ãœããã«é¢ããè°è«ã¯ãAsbjÞrn Ulsberg ã«ãã£ãŠãHTTP ã¯ãŒã¯ã·ã§ããã§åéãããã ãã®éå¬å¹Žã¯2019幎ã§ãã:
é»åã¡ãŒã«: asbjorn@ulsberg.no
URI: https://asbjor.nu/