
è¯ããã¶ã€ã³ã¯ãURLãã¹ããŒã¿ã¹ã³ãŒããããããŒããªã¯ãšã¹ãã³ã³ãã³ãã«åœ±é¿ããŸã
éåžžãWeb APIèšèšã¬ã€ãã¯äžè¬çãªæŠå¿µã«çŠç¹ãåœãŠãŠããŸãïŒURLã®èšèšæ¹æ³ãHTTPã¹ããŒã¿ã¹ã³ãŒãã®æ£ãã䜿çšæ¹æ³ãããããŒã§äŒéãããã®ãã·ãªã¢ã«åãããããŒã¿ãŸãã¯ãªããžã§ã¯ãã°ã©ãã§è¡šãããã³ã³ãã³ãèšèšã®èšèšæ¹æ³ã ãããã¯ãã¹ãŠéåžžã«éèŠãªå®è£ ã®è©³çŽ°ã§ãããäžè¬çãªAPIèšèšãšããç¹ã§ã¯ããã»ã©éèŠã§ã¯ãããŸããã APIã®èšèšã¯ããµãŒãã¹ã®æ¬è³ªãã©ã®ããã«èª¬æãæ瀺ãããã§ãããWeb APIã®æåãšäœ¿ããããã«å€§ããè²¢ç®ããŸãã
åªããèšèšããã»ã¹ãŸãã¯æ¹æ³è«ã¯ãWeb APIãšããŠå©çšå¯èœãªãµãŒãã¹ã³ã³ããŒãã³ããäœæããããã®äžè²«ããåçŸå¯èœãªæé ã®ã»ãããæäŸããŸãã ã€ãŸããéçºè ãèšèšè ãããã³ã¢ãŒããã¯ãã¯ããã®ãããªééçãªæ¹æ³è«ã䜿çšããŠããœãããŠã§ã¢å®è£ ã«é¢ããã¢ã¯ã·ã§ã³ã調æŽã§ããŸãã æ¹æ³è«ã®è©³çŽ°ãæãªãããšãªãããã»ã¹ãæ¹åããã³èªååãããã®ã§ã䜿çšãããæ¹æ³è«ã¯æéãšãšãã«æ¹è¯ããããšãã§ããŸãã å®éã2ã€ã®ã¢ã¯ãã£ããã£ãå®å šã«åé¢ããŠææžåãããŠããå Žåã èšèšããã»ã¹ã«é¢ä¿ãªãã å®è£ ã®è©³çŽ° ïŒãã©ãããã©ãŒã ãOSããã¬ãŒã ã¯ãŒã¯ãUIã¹ã¿ã€ã«ãªã©ïŒãå€æŽãããå ŽåããããŸãã
7ã€ã®ã¹ãããã§APIãèšèšããŸãã
以äžã¯ãRichardsonãšAmundsenã«ããRESTful Web APIã§èª¬æãããŠããæ¹æ³è«ã®ç°¡åãªæŠèŠã§ãã ãã®èšäºã¯ãåã¹ãããã®è©³çŽ°ãªåæãæå³ãããã®ã§ã¯ãããŸããããåã¹ãããã§äœãè¡ãããã®ããäžè¬çã«ç解ããããšããŸãã ãŸããèªè ã¯ããã®ã¬ãã¥ãŒããç¥èãšããžãã¹ç®æšã®è©³çŽ°ãèæ ®ããWeb APIèšèšããã»ã¹ãèšèšããããã®ã¬ã€ããšããŠäœ¿çšã§ããŸãã
泚æäºé ïŒã¯ãã7ã¹ãããã®ããã¥ã¢ã«ã¯ããªã倧ããèŠãããããããŸããããå®éã«ã¯ããµãŒãã¹ã®å®è£ ãšå ¬éã«é¢ããè¿œå ãšããŠ5ã€ã®èšèšã¹ããããš2ã€ãããããŸããã ãããã®2ã€ã®ã¢ããªã³ã¯ããã»ã¹ãäžå¿ã«æ§ç¯ãããæåããæåŸãŸã§ããã»ã¹å šäœãèšè¿°ããŸãã
èšç»ã§ã¯ããµãŒãã¹ãäœæããããã»ã¹ã®å埩çãªæ§è³ªãèæ ®ããå¿ èŠããããŸãã ããšãã°ãã¹ããã2ïŒç¶æ å³ã®äœæïŒãå®è¡ãããšãã¹ããã1ïŒãã¹ãŠã®ã³ã³ããŒãã³ãã®ãªã¹ãïŒã§ãŸã ããã¹ãããšãããããšãããããŸãã ã³ãŒããæžããšãïŒã¹ããã6ïŒãã¹ããã5ïŒã»ãã³ãã£ãã¯ãããã¡ã€ã«ã®äœæïŒãªã©ã§ããã€ãã®ç¹ãèŠéããããšããããŸãã éèŠãªãã€ã³ãã¯ãããã¥ã¢ã«ã䜿çšããŠã§ããã ãå€ãã®è©³çŽ°ãèŠã€ããäžè¶³ããŠãããã€ã³ãã説æããããã«1ã€ãŸãã¯2ã€åã«æ»ãããšã§ãã å埩æ§ã¯ããµãŒãã¹ã®æãå®å šãªè¡šçŸãæ§ç¯ãããããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã§ã©ã®ããã«äœ¿çšããããã確èªããããã®éµã§ãã
ã¹ããã1ïŒãã¹ãŠã®ã³ã³ããŒãã³ãããªã¹ããã
æåã®ã¹ãããã¯ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã䜿çšããŠéåä¿¡ããå¯èœæ§ããããã¹ãŠã®ã¿ã€ãã®ããŒã¿ããªã¹ãããããšã§ãã ãããæå³èšè¿°ãšåŒã³ãŸãã ã»ãã³ãã£ã㯠-ã¢ããªã±ãŒã·ã§ã³å ã®ããŒã¿ã®æå³ãšèª¬æã衚瀺ãããã-ã¢ããªã±ãŒã·ã§ã³èªäœã§äœãèµ·ãã£ãŠãããã®èª¬æãå«ãããã ãµãŒãã¹ã§ã¯ãªããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®èŠ³ç¹ããäœæ¥ããå¿ èŠãããããšã«æ³šæããŠãã ãã ã ã¯ã©ã€ã¢ã³ãã䜿çšãã䜿ããããAPIãéçºããããšãéèŠã§ãã
ããšãã°ããªã¹ãã¿ã€ãã®ç°¡åãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ã次ã®ã»ãã³ãã£ãã¯ã®èª¬æãèŠã€ããããšãã§ããŸãã
- id-ã·ã¹ãã å ã®åãšã³ããªã®äžæã®èå¥å
- title-åãã±ãŒã¹ãã®åå
- dateDue-ãã±ãŒã¹ããå®äºããã¹ãæ¥ä»
- complete-ãã±ãŒã¹ããå®äºãããã©ããã瀺ããyes / noããã©ã°
ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããæ¥åãã®ã«ããŽãªïŒä»äºã家æãåºãªã©ïŒããŠãŒã¶ãŒæ å ±ãªã©ã®æŠå¿µã衚瀺ããããã®å€ãã®ãã€ã³ãããããŸãã ããã§ãããã»ã¹èªäœã«éäžã§ããããã«ããã®ãããªåçŽãªãªã¹ããæ€èšããæ¹ãè¯ãã§ãããã
ã¹ããã2ïŒç¶æ å³ãæã
次ã®ã¹ãããã¯ãç®çã®APIã®ç¶æ å³ãäœæããããšã§ãã å³ã®åãããã¯ã¯ãå¯èœãªç¶æ ãã€ãŸãæåã®ã¹ãããã§èŠã€ãã£ã1ã€ä»¥äžã®ã»ãã³ãã£ãã¯èšè¿°åãå«ãããã¥ã¡ã³ããè¡šããŸãã ç¢å°ã䜿çšããŠãããç¶æ ãã次ã®ç¶æ ãžã®é·ç§»ã瀺ãããšãã§ããŸãã ãããã®é·ç§»ã¯ã¯ãšãªã«ãã£ãŠããªã¬ãŒãããŸãã
ãããŸã§ã®ãšãããåé·ç§»ã«äœ¿çšããæ¹æ³ã決å®ããããšã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã 移è¡ãå®å šãïŒHTTP GETïŒãå®å šã§ãªã/ã¹ãçïŒHTTP POSTïŒããŸãã¯å®å šã§ãªã/ã¹ãçïŒPUTïŒãã瀺ãã ãã§ã
éçããŒãïŒã¹ãçã¢ã¯ã·ã§ã³ãšã¯ãäºæããªãå¯äœçšãªãã«ç¹°ãè¿ãããšãã§ããã¢ã¯ã·ã§ã³ã§ãã ããšãã°ãHTTP PUT ã¯ããµãŒããŒãã¯ã©ã€ã¢ã³ãããåä¿¡ããç¶æ å€ã䜿çšããŠã¿ãŒã²ãããªãœãŒã¹ã®å€ã眮ãæããå¿ èŠããããšä»æ§ãèŠå®ããŠãããããã¹ãçã§ãã HTTPä»æ§ã§ ã¯ãPOST ã ä»ããŠæž¡ãããå€ã¯ æ¢åã®ãªãœãŒã¹ã«è¿œå ãããã¹ãã§ããã眮ãæããããã¹ã㧠㯠ãªã ããšã瀺ã㊠ãããããHTTP POST㯠iç㧠ã¯ãã ãŸãã ã
ãã®å ŽåãæãåçŽãªãTo Doãªã¹ããã®ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã«ã¯ããªã¹ãã¢ã€ãã ãžã®ã¢ã¯ã»ã¹ããã£ã«ã¿ãªã³ã°ãåã ã®ã¢ã€ãã ã®è¡šç€ºãããã³å®äºãšããŠããŒã¯ããæ©èœãå¿ èŠã«ãªãå ŽåããããŸãã ãããã®ã¢ã¯ã·ã§ã³ã®å€ãã¯ãç¶æ å€ã䜿çšããŠãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã§ããŒã¿ã転éããŸãã ããšãã°ããã¢ã€ãã ã®è¿œå ãã¢ã¯ã·ã§ã³ã䜿çšãããšãã¯ã©ã€ã¢ã³ãã¯titleããã³dueDateã®ã¹ããŒã¿ã¹å€ãæž¡ãããšãã§ããŸãã 以äžã¯ãäž»ãªã¢ã¯ã·ã§ã³ã瀺ãå³ã§ãã

å³ã«ç€ºããã以äžã«ãªã¹ããããŠããã¢ã¯ã·ã§ã³ãã»ãã³ãã£ãã¯èšè¿°åã§ã-ãããã¯ãµãŒãã¹ã®ã¢ã¯ã·ã§ã³ã®ã»ãã³ãã£ã¯ã¹ãèšè¿°ããŸãã
- èªã¿åããªã¹ã
- ãã£ã«ã¿ãŒãªã¹ã
- èªã¿åãé ç®
- äœæã¢ã€ãã
- ããŒã¯å®äº
ãã£ãŒãã§ã®äœæ¥äžã«ãã¯ã©ã€ã¢ã³ããå¿ èŠãšããããã€ãã®ã¢ã¯ã·ã§ã³ãããŒã¿ãèŠéããŠããããšããããŸãã ãã®å Žåãããã¯1ã€ã®ã¹ãããã«æ»ã£ãŠäžè¶³ããŠããããŒã¿ãå ¥åããã¹ããã2ã®å³ãæ¹åãã絶奜ã®æ©äŒã§ãã
ãããã®2ã€ã®æé ãæ°åå®è¡ãããšãã¯ã©ã€ã¢ã³ãããµãŒãã¹ãšå¯Ÿè©±ããããã«å¿ èŠãªãã¹ãŠã®ããŒã¿ãšã¢ã¯ã·ã§ã³ãååã«ç解ã§ããããã«ãªããŸãã
ã¹ããã3ïŒããžãã¯ã¹ããªã³ã°ã®äžèŽ
次ã®ã¹ãããã¯ããµãŒãã¹ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã¹ãŠã®ãéæ³ã®ç·ãã調æŽããããšã§ãã ãã®å Žåããããžãã¯ã©ã€ã³ãã¯ãã¹ãŠèšè¿°ååã«ãªããŸããã¿ã¹ã¯ã®ç¯å²å€ã§ã¯æå³ããªããåã«ãµãŒãã¹ãšéä¿¡ãããšãã«ã¯ã©ã€ã¢ã³ããåç §ããã¢ã¯ã·ã§ã³ãŸãã¯ããŒã¿èŠçŽ ãè¡šããŸãã ååã®äžèŽãšã¯ãããšãã°æ¬¡ã®ãªãœãŒã¹ã䜿çšããŠãäžè¬çã«äœ¿çšãããçšèªã«ååãä»ããããšãæå³ããŸãã
ãããã¯ãã¹ãŠãå®åŒåãããåºã䜿çšãããŠããååã®ãªããžããªã§ãã ãããã®ãµãŒãã¹ã®ååã䜿çšãããšãã¯ãéçºè ãããªããšåãæ¹æ³ã§ããããç解ããããã«ããŠãã ããã ãã®ãããªããã»ã¹ã«ãããAPIã®äœ¿ãããããå€§å¹ ã«åäžããŸãã
泚æäºé ïŒèšè¿°åã«å ±éåã䜿çšããããšã¯ãããã³ããšã³ãã«ãšã£ãŠã¯è¯ãèããããããŸããããå éšã®ããŒãºã®ããã«ãããã䜿çšããããšã匷å¶ãã人ã¯ããŸããã ããã¯ãããšãã°ãããŒã¿ããŒã¹åãæããŸãã ãµãŒãã¹ã¯ãå€éšåãšå éšåã®å¯Ÿå¿ããããåé¡ãªãç¬ç«ããŠäœ¿çšã§ããŸãã
ãã®äŸã®To-DoãµãŒãã¹ã§ã¯ã1ã€ã®ãcreate-itemããé€ããã¹ãŠã®èšè¿°åã®åãå ¥ãå¯èœãªæ¢åã®ååãèŠã€ããããšãã§ããŸããã ãã®å Žåã Web-Linking RFC 5988ããã«ãŒã«ããŒã¹ã®äžæã®URIãäœæããããšã«ããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ã®åŸæ¥ã®ååãéžæãããšãåžžã«å±éºã«ãããããŸãã å éšåã«å®å šã«äžèŽãããã®ãèŠã€ããããšãã§ããã®ã¯ãŸãã§ãããããã¯æ£åžžã§ãã
ããã«ç§ãåŸããã®ããããŸãïŒ
- id-> Dublin Coreããã®èå¥å
- title- > Schema.orgããã®åå
- dueDate-> Schema.orgã®scheduledTime
- å®äº-> Schema.orgããã®ã¹ããŒã¿ã¹
- read- list- > IANA Link Relation Valuesããã®ã³ã¬ã¯ã·ã§ã³
- filter- list- > IANAãªã³ã¯é¢ä¿å€ããæ€çŽ¢
- read- item- > IANA Link Relation Valuesã®ã¢ã€ãã
- create-item-> RFC5988ã䜿çšããhttp://mamund.com/rels/create-item
- ããŒã¯å®äº-> IANAãªã³ã¯é¢ä¿å€ããç·šé
ãã®ãããååã®äžèŽã䜿çšããåŸã®ã°ã©ãã®å€èŠ³ã¯æ¬¡ã®ãšããã§ãã

ã¹ããã4ïŒãã€ããŒã¡ãã£ã¢ã¿ã€ãã®éžæ
APIã®èšèšããã»ã¹ã®æ¬¡ã®ã¹ãããã¯ããµãŒããŒãšã¯ã©ã€ã¢ã³ãéã§ã¡ãã»ãŒãžã転éããããã«äœ¿çšãããããŒã¿ã®ã¿ã€ããéžæããããšã§ãã ãããã¯ãŒã¯ã®ç¹åŸŽã®1ã€ã¯ãããŒã¿ãå ±éã®ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠæšæºåãããããã¥ã¡ã³ãã«ãã£ãŠéä¿¡ãããããšã§ãã åãããŒã¿èšè¿°åïŒãèå¥åãããã¹ããŒã¿ã¹ãïŒããã³ã¢ã¯ã·ã§ã³ïŒãæ€çŽ¢ãããç·šéãïŒããµããŒãããã¿ã€ããéžæããããšã¯éåžžã«éèŠã§ãã ãã®ãããªåœ¢åŒã¯ã»ãšãã©ãããŸããã
ãªã¹ãã®æäžéšããã®ãã€ããŒã¡ãã£ã¢åœ¢åŒã®äžéšã次ã«ç€ºããŸãïŒãã®ãªã¹ãã§ã¯é åºã¯é¢ä¿ãããŸããïŒã
- ãã€ããŒããã¹ãããŒã¯ã¢ããèšèªïŒ HTML ïŒ
- ãã€ããŒããã¹ãã¢ããªã±ãŒã·ã§ã³èšèªïŒ HAL ïŒ
- ã³ã¬ã¯ã·ã§ã³+ JSONïŒ Cj ïŒ
- ãµã€ã¬ã³
- JSON API
- è¡šçŸã亀æããããã®çµ±äžåºç€ïŒ UBER ïŒ
ãŸããéžæã¯ãéžæãããã€ããŒã¡ãã£ã¢åœ¢åŒãããŒã¿è»¢éãããã³ã«ã§ã©ãã ãããŸãæ©èœãããã«ãã£ãŠã圱é¿ãåããã¯ãã§ãã ã»ãšãã©ã®éçºè ã¯ããµãŒãã¹ã€ã³ã¿ãŒãã§ã€ã¹ã«HTTPãããã³ã«ã奜ã¿ãŸãã ãã ãã WebSockets ã XMPP ã MQTT ãããã³CoAPã䜿çšãããŸããç¹ã«ãã·ã§ãŒãã¡ãã»ãŒãžããã€ã³ãããŒãã€ã³ãæ¥ç¶ã䜿çšããé«éå®è£ ã®å Žåã«äœ¿çšãããŸãã
ãã®äŸã§ã¯ãã¡ãã»ãŒãžãããã³ã«ãšããŠHTMLã䜿çšããéä¿¡ãããã³ã«ãšããŠHTTPã䜿çšããŸãã HTMLã¯ãã§ã«å¿ èŠãªèšè¿°åïŒãªã¹ãã®å Žåã¯<UL>ãèŠçŽ ã®å Žåã¯<LI>ãããŒã¿ã®å Žåã¯<SPAN>ïŒããµããŒãããŠããŸãã ãŸããã¢ã¯ã·ã§ã³èšè¿°åãé©åã«ãµããŒãããŠããŸãïŒå®å šãªãªã³ã¯ã®å Žåã¯<A>ãå®å šãªç§»è¡ã®å Žåã¯<FORM method = "get">ãå®å šã§ãªã移è¡ã®å Žåã¯<FORM method = "post">ïŒã
泚éïŒç¶æ å³ã«ãç·šéããã¹ãçïŒHTTP PUTïŒãšããŠè¡šç€ºãããããã«ãªããŸããããHTMLã«ã¯ãŸã PUTã®çµã¿èŸŒã¿ãµããŒãããããŸãã ã ãã ããã¹ãçã®HTML POSTããšãã¥ã¬ãŒãããããã®è¿œå ãã£ãŒã«ããè¿œå ã§ããŸã ã
ããã§ããã€ã¢ã°ã©ã ã®ç¶æ ã«åºã¥ããŠã€ã³ã¿ãŒãã§ã€ã¹ãããã¹ããã§ããŸãã ãã®äŸã§ã¯ããTo-Doãªã¹ãããšãTo-Doã¢ã€ãã ãã®2ã€ã ãã説æããå¿ èŠããããŸãã
HTML ãã¥ãŒã® ã³ã¬ã¯ã·ã§ã³ã To Do ãªã¹ã ã
<html> <head> <!-- for test display only --> <title>To Do List</title> <style> .name, .scheduledTime, .status, .item {display:block} </style> </head> <body> <!-- for test display only --> <h1>To-Do List</h1> <!-- to-do list collection --> <ul> <li> <a href="/list/1" rel="item" class="item"> <span class="identifier">1</span> </a> <span class="name">First item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">pending</span> </li> <li> <a href="/list/2" rel="item" class="item"> <span class="identifier">2</span> </a> <span class="name">Second item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">pending</span> </li> <li> <a href="/list/3" rel="item" class="item"> <span class="identifier">3</span> </a> <span class="name">Third item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">complete</span> </li> </ul> <!-- search transition --> <form method="get" action="/list/" class="search"> <legend>Search</legend> <input name="name" class="identifier" /> <input type="submit" value="Name Search" /> </form> <!-- create-item transition --> <form method="post" action="/list/" class="> <legend>Create Item</legend> <input name="name" class="name" /> <input name="scheduledTime" class="scheduledTime" /> <input type="submit" value="Create Item" /> </form> </body> </html>
HTML ãã¥ãŒã® ã³ã¬ã¯ã·ã§ã³ãTo Doã¢ã€ãã ã
<html> <head> <!-- for test display only --> <title>To Do List</title> <style> .name, .scheduledTime, .status, .item, .collection {display:block} </style> </head> <body> <!-- for test display only --> <h1>To-Do Item</h1> <a href="/list/" rel="collection" class="collection">Back to List</a> <!-- to-do list collection --> <ul> <li> <a href="/list/1" rel="item" class="item"> <span class="identifier">1</span> </a> <span class="name">First item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">pending</span> </li> </ul> <!-- edit transition --> <form method="post" action="/list/1" class="edit"> <legend>Update Status</legend> <input type="hidden" name="etag" value="q1w2e3r4t5y6" class="etag" /> <input type="text" name="status" value="pending" class="status" /> <input type="submit" value="Update" /> </form> </body> </html>
ç¶æ å³ã®ããããã®å®è£ ã䜿çšããå Žåãäœãã足ããªãããšã«æ°ä»ãå Žåãããã1ã€ãŸãã¯2ã€åã«æ»ãå¿ èŠãããããšã«æ³šæããŠãã ããã ããã¯æ£åžžã§ãããæãããªãã§ãã ããã ä»ããããã¹ãŠãã³ãŒãã§å®è£ ããåã«ããã¹ãã±ãŒã¹ã§ãã¹ãŠãè©Šããšãã§ãã
ãã¹ãŠã®è¡šç€ºæ¹æ³ã«æºè¶³ããããã³ãŒãã£ã³ã°ãéå§ããåã®æåŸã®ã¹ãããã¯ã ã»ãã³ãã£ãã¯ãããã¡ã€ã«ãäœæããããšã§ã ã
ã¹ããã5ïŒã»ãã³ãã£ãã¯ãããã¡ã€ã«ã®äœæ
ã»ãã³ãã£ãã¯ãããã¡ã€ã«ã¯ããœãªã¥ãŒã·ã§ã³å ã®ãã¹ãŠã®èšè¿°åããªã¹ãããåèšè¿°åã®è©³çŽ°ã説æããããã¥ã¡ã³ãã§ãããéçºè ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ã®å®è£ ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
ããã¯å®è£ ã¬ã€ãã§ãããå®è£ ã®æ瀺ã§ã¯ãªãããšãæ確ã«ç解ããå¿ èŠããããŸãã
ãµãŒãã¹èšè¿°åœ¢åŒ
ãµãŒãã¹ãèšè¿°ããããã®ãã©ãŒãããã¯é·ãéååšããŠãããã³ãŒããçæãããããµãŒãã¹ã®æ¢åã®å®è£ ãææžåããããšãã«éåžžã«äŸ¿å©ã§ãã
éçºè ã®å¿ã®ããã«æŠãäž»ãªåœ¢åŒïŒ
- WebãµãŒãã¹å®çŸ©èšèªïŒ WSDL ïŒ
- AtomãµãŒãã¹ã®èª¬æïŒ AtomSvc ïŒ
- Webã¢ããªã±ãŒã·ã§ã³èšè¿°èšèªïŒ WADL ïŒ
- èšèšå³
- Swagger
- RESTfulã¢ããªã±ãŒã·ã§ã³ã¢ããªã³ã°èšèªïŒ RAML ïŒ
ãããã¡ã€ã«èšè¿°åœ¢åŒ
çŸåšã®ãšããããããã¡ã€ã«ã®èª¬æã«ã¯ããã€ãã®åœ¢åŒãããããŸããã ãããŠãç§ããå§ããããã®ã¯æ¬¡ã®ãšããã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ã»ãã³ãã£ãã¯ãããã¡ã€ã«ïŒ ALPS ïŒ
- JSON-LD + Hydra
ã©ã¡ãã®åœ¢åŒãããªãæ°ãããã®ã§ãã JSON-LDä»æ§ã¯ã2014幎ã®åãã«W3Cå§åã®ã¹ããŒã¿ã¹ãååŸããŸãããHydraã¯ïŒå·çæç¹ã§ã¯ïŒéå ¬åŒã®ãã©ããç¶æ ã®ãŸãŸã§ããã掻çºãªéçºè ã³ãã¥ããã£ããããŸãã ALPSã¯ãã©ããã®åæ段éã«ããããŸãã
ãã®ããã¥ã¡ã³ãã®ã¢ã€ãã¢ã¯åé¡é åã®å®éã®åŽé¢ãèšè¿°ããããšã§ããïŒç¹å®ã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªãïŒã圢åŒã¯å žåçãªèšè¿°åœ¢åŒãšã¯éåžžã«ç°ãªããŸãã
<html> <alps version="1.0"> <doc> ALPS profile for InfoQ article on "API Design Methodology" </doc> <!-- data descriptors --> <descriptor id="identifier" type="semantic" ref=" /> <descriptor id="name" type="semantic" ref=" /> <descriptor id="scheduledTime" type="semantic" ref=" /> <descriptor id="status" type="semantic" ref=" /> <!-- action descriptors --> <descriptor id="collection" type="safe" ref=" /> <descriptor id="item" type="safe" ref="> <descriptor href="#identifier" /> </descriptor> <descriptor id="search" type="safe" ref="> <descriptor href="#name" /> </descriptor> <descriptor id="create-item" type="unsafe" ref="> <descriptor href="#name" /> <descriptor href="scheduledTime" /> </descriptor> <descriptor id="edit" type="idempotent" ref="> <descriptor href="#identifier" /> <descriptor href="#status" /> </descriptor> </alps>
ããã¥ã¡ã³ãã¯ãto-doãªã¹ããµãŒãã¹ã€ã³ã¿ãŒãã§ã€ã¹ããã®ãã£ãŒã«ããšã¢ã¯ã·ã§ã³ã®ãã¹ãŠã®å¯èœãªå€ã®äžè¬çãªèŸæžã®ããã«èŠããããšã«æ°ã¥ããã§ãããããããã¢ã€ãã¢ã®æ¬è³ªã§ãã ãã®ãããã¡ã€ã«ã«åŸãããšã«åæãããµãŒãã¹ã¯ããããã³ã«ãã¡ãã»ãŒãžåœ¢åŒãããã«ã¯URLã«ã€ããŠãç¬èªã®æ±ºå®ãäžãããšãã§ããŸãã ãã®ãããã¡ã€ã«ãåãå ¥ããããšã«åæããã¯ã©ã€ã¢ã³ãã¯ãèšè¿°åãç解ããå¯èœã§ããã°ã¢ã¯ãã£ãåãããããªæ¹æ³ã§äœæãããŸãã
ããã¯æ¬¡ã®å Žåã«ãæé©ãªåœ¢åŒã§ãã
- 人ãèªãã圢åŒã§ããã¥ã¡ã³ããçæãã
- åæ§ã®åœ¢åŒã®åæ
- æãäžè¬çã«äœ¿çšããããããã¡ã€ã«ã®è¿œè·¡ã
- ç¶æ å³ãçæããããšãã§ããŸãã
ããããããã¯å¥ã®èšäºã®ãããã¯ã§ãã
äžè²«æ§ã®ããååãç¶æ å³ã®ç°¡åãªã¡ã¢ãããã³ã»ãã³ãã£ãã¯ãããã¡ã€ã«ãæã€èšè¿°åã®å®å šãªãªã¹ããã§ããã®ã§ããµãŒãã¹ãšã¯ã©ã€ã¢ã³ãã®ã³ãŒããæžãå§ããæºåãã§ããŸããã
ã¹ããã6ïŒã³ãŒããæžã
ãã®ç¬éããããã¹ããã©ã¯ãã£ã¹ïŒç¶æ å³ãšã»ãã³ãã£ãã¯ãããã¡ã€ã«ïŒããµãŒããŒåŽãšã¯ã©ã€ã¢ã³ãåŽã®éçºè ã«è»¢éããŠãç¹å®ã®å®è£ ãå®è¡ã§ããŸãã
HTTPãµãŒããŒã¯2çªç®ã®ã¹ããããããã€ã¢ã°ã©ã ãå®è£ ããå¿ èŠããããã¯ã©ã€ã¢ã³ãããã®èŠæ±ã¯ãµãŒãã¹ç¶æ éã®é·ç§»ãããªã¬ãŒããå¿ èŠããããŸãã ãµãŒãã¹ããéä¿¡ãããåãã¥ãŒã¯ãæé 3ã§éžæãã圢åŒã§ãæé 4ã§äœæãããããã¡ã€ã«ãžã®ãªã³ã¯ãå«ããå¿ èŠããããŸããå¿çã«ã¯ãç¶æ å³ããã¢ã¯ã·ã§ã³ãå®è£ ããé©åãªãã€ããŒã¡ãã£ã¢ã³ã³ãããŒã«ãå«ããå¿ èŠããããããã¥ã¡ã³ããããã¡ã€ã«ã§èª¬æããŸãã ã¯ã©ã€ã¢ã³ãéšåãšãµãŒããŒéšåã®éçºè ã¯ãããããã¯æ¯èŒçç¬ç«ããã³ãŒããæžãããšãã§ããŸãããç¶æ å³ãšãããã¡ã€ã«ã«æºæ ããããã®ãã¹ããå®è¡ããããšãå¿ããªãã§ãã ããã
ã³ãŒããèšè¿°ããŠå®å®åããåŸããªã¹ãã®æåŸã®ã¹ãããã§ãããå ¬éããæ®ããŸãã
ã¹ããã7ïŒAPIãå ¬éãã
Web APIã¯ã顧客ã®èŠæ±ã«åžžã«å¿çããURLãå°ãªããšã1ã€å ¬éããå¿ èŠããããŸã-é ãé¢ããå°æ¥ã§ãã£ãŠãã§ãã ç§ã¯ãããããã«ããŒãURLããšåŒãã§ããŸãã誰ããç¥ã£ãŠããŸãã ãŸãããããã¡ã€ã«ããã¥ã¡ã³ããçºè¡ããŠãæ°ãããµãŒãã¹ã®å®è£ ãå¿çã§ãããåç §ã§ããããã«ããããšããå§ãããŸãã ãŸãããã®ã¢ãã¬ã¹ã§ãéçºè ããµãŒãã¹ãç解ããŠäœ¿çšããã®ã«åœ¹ç«ã€èªã¿ãããããã¥ã¡ã³ããã¬ãã¹ã³ãããã³ãã®ä»ã®æ å ±ãå ¬éããããšãã§ããŸãã
æçµçã«ã¯ãé©åã«èšèšããããå®å®ãããæé ãªäŸ¡æ Œã®ãå®çšçãªãµãŒãã¹ãå©çšã§ããã¯ãã§ãã
çµè«ãšããŠ
ãã®èšäºã§ã¯ãWebçšã®APIãæ§ç¯ããããã®äžé£ã®ã¹ãããã®æŠèŠã説æããŸãã äž»ãªçŠç¹ã¯ãæ£ããããŒã¿èšè¿°åãšã¢ã¯ã·ã§ã³ãååŸããããšã§ãã çŽæ¥éä¿¡ããªããŠããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®ããŒããç°¡åã«èšè¿°ã§ããããã«ãæ©æ¢°èªã¿åãçšã«ææžåããŸãã
ããäžåºŠ7ã€ã®ã¹ãããïŒ
- ãã¹ãŠã®éšåããªã¹ããã
ã¯ã©ã€ã¢ã³ãããµãŒãã¹ãšéä¿¡ããããã«å¿ èŠãªãã¹ãŠã®ã¿ã€ãã®ããŒã¿ã瀺ããŸãã - ç¶æ
å³ãæã
ãµãŒãã¹ã§å©çšå¯èœãªãã¹ãŠã®ã¢ã¯ã·ã§ã³ïŒç¶æ é·ç§»ïŒãææžåãã - ããžãã¯å€æ°ã«äžèŽ
ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®ååãåãå ¥ããããæšæºã«ãã - ãã€ããŒã¡ãã£ã¢ã®çš®é¡ãéžæããŠãã ãã
éžæãããããã³ã«ãèæ ®ããŠããµãŒãã¹ã®é·ç§»ãæãå®å šã«è¡šç€ºããã¡ãã»ãŒãžåœ¢åŒãéžæããŸãã - ã»ãã³ãã£ãã¯ãããã¡ã€ã«ã®äœæ
ãµãŒãã¹ã§äœ¿çšããããã¹ãŠã®èšè¿°åãå«ã¿ãå®çŸ©ããããã¥ã¡ã³ããäœæããŸã - å®è£
ãæžã
æšå¥šäºé ã«åŸã£ãŠã³ãŒããèšè¿°ããå¿ èŠã«å¿ããŠãããã¡ã€ã«/å³ãç·šéã§ããããã«ããµãŒããŒããã³ã¯ã©ã€ã¢ã³ãéšåã®éçºè éã§ã»ãã³ãã£ãã¯ãããã¡ã€ã«ãšç¶æ å³ãé åžããŸãã - APIãå
¬éãã
ãã«ããŒãURLãšã»ãã³ãã£ãã¯ãããã¡ã€ã«ãå ¬éããŠãä»ã®äººããããã䜿çšããŠæ°ãããµãŒãã¹ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ããŸãã
ã»ãšãã©ã®å Žåãããã€ãã®ã¹ãããã«æ»ã£ãŠå床å®è¡ããæ¬ èœããŒã¿ãäœæããããèšèšããã»ã¹ã§èŠã€ãã£ã劥åç¹ã衚瀺ããå¿ èŠããããŸãã ãããæ©ããã°æ©ãã»ã©è¯ãã å°æ¥ã®ããæç¹ã§ãããã®éçºãAPIã§äœ¿çšããŠãéçºè ãå¿ èŠãšããæ°ãã圢åŒãšãããã³ã«ã§æ°ããå®è£ ãäœæããããšãã§ããŸãã
çµå±ã®ãšããããã®æ¹æ³è«ã¯ãä¿¡é Œæ§ãåçŸæ§ãäžè²«æ§ãããã³ã·ãŒã ã¬ã¹ãªWeb APIèšèšããã»ã¹ãäœæããããã®1ã€ã®æ¹æ³ã«ãããŸããã ãã®äŸãæ€èšããéçšã§ãå Žåã«ãã£ãŠã¯ããã€ãã®ã¹ããããè¿œå ããå¿ èŠããããããã€ããççž®ããå¿ èŠãããããšã決å®ã§ããŸãããã¡ãããããŒã¿äº€æ圢åŒãšãããã³ã«ã®éžæã«é¢ãã決å®ã¯ããããžã§ã¯ãã«ãã£ãŠå€§ããç°ãªãå ŽåããããŸãã
ãã®èšäºããçµç¹ãŸãã¯ããŒã ã§APIãäœæããããã®æé©ãªæ¹æ³è«ãæ§ç¯ããæ¹æ³ãæ€èšããããã®åèã«ãªãããšãé¡ã£ãŠããŸãã
ãã®èšäºã¯ãLayer 7 Technologiesã® ãªãŒãAPIã¢ãŒããã¯ãã§ããMike Amundsenã«ãã£ãŠæžãããŸãã ã 圌ã¯ãŸããæ¬ã®èè ããã³è¬æŒè ãç±³åœããã³ãšãŒãããäžã®æ è¡ã³ã³ãµã«ã¿ã³ããšããŠãç¥ãããŠããŸãã
èšäºã®ãããã¯ãããªãã«è¿ãå ŽåããŸãã¯APIãé©åã«èšèšãä¿å®ãæäœããæ¹æ³ã«ã€ããŠè©³ããç¥ãããå Žåã¯ã APIïŒããã¯ãšã³ãäŒè°ã«åå ããŠãã ããïŒ
ããªããäœãäŒããããšãããã°ã ç§ãã¡ã¯ããªãã®ç©èªãåŸ ã£ãŠããŸã ïŒ