ã¿ãªããããã«ã¡ã¯ïŒ ç§ã®ååã§ããAlign Technologyã®Dmitry Pavlovãšç³ããŸãã瀟å ã·ã¹ãã ã®çžäºäœçšãšãµãŒãããŒãã£ãã³ããŒãšã®çµ±åã®ããã®Web APIãéçºããŠããŸãã ãã®èšäºã§ã¯ãWebçšã®APIããŸãã¯RESTful APIãäœæããããã®ã¢ã€ãã¢ã«ã€ããŠã話ããŸãã
è¿å¹ŽãWeb APIãããã¯ã¯éåžžã«äººæ°ãåºãŠããŠãããå€ãã®äŒæ¥ãããªãŒãã³ã§å éšäœ¿çšã®äž¡æ¹ã®ãããªã€ã³ã¿ãŒãã§ãŒã¹ãäœæããŠããŸãã Web APIã®èª¬æã§ã¯ãã»ãšãã©ã®å Žåãé åèªRESTãèŠã€ããããšãã§ããŸããããã®çšèªã¯äœãæå³ããæ£ãã䜿çšãããŠããŸããïŒ
RESTãŸãã¯RESTã§ã¯ãªãïŒ
ã»ãšãã©ã®éçºè ãç¹ã«ãã·ã¢ã§ã¯ãRESTãHTTP [S]ãããã³ã«ã䜿çšããŠåäœãããœãããŠã§ã¢ã€ã³ã¿ãŒãã§ãŒã¹ãšããŠç解ãããŠããã次ã®ç¹æ§ããããŸãã
ãµãŒããŒã¯ã¯ã©ã€ã¢ã³ãã®ç¶æ ãä¿åããŸãããã»ãã·ã§ã³ã¯ãªãããªã¯ãšã¹ããå®äºããããã«å¿ èŠãªãã®ã¯ãã¹ãŠããªã¯ãšã¹ãèªäœãšãšãã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠéä¿¡ãããŸãã
ãªãœãŒã¹ãåå¥ã«èå¥ããã人éãèªããURLã ãã以äž
/index.php?productId=1
ã§ã¯ãªãã代ããã«/products/1
䜿çšããŸã
HTTPã¡ãœããã®å¹ åºã䜿çšïŒGETãšPOSTã«éå®ããããPUTãšDELETEãè¿œå ããŸãã äžéšã®APIã§ã¯ãPATCHãèŠã€ããããšãã§ããŸãã
- ããŒã¿è»¢é圢åŒãšããŠãJSONã䜿çšãããŸãã
éåžžããã®ãããªAPIã䜿çšãããã¢ã«ãŽãªãºã ã¯æšæºã§ãã ãŸããããã¥ã¡ã³ãã䜿çšããŠWebãµã€ãã«ã¢ã¯ã»ã¹ãããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã®URLãã¿ãŒã³ã®ãªã¹ããå«ãããŒãžãèŠã€ããå¿ èŠããããŸãã éåžžã次ã®ããã«ãªããŸãã
API " " --- /recipes/cookies - , GET URL [ { "name" : " ", "rating" : 5, "shortDescription" : "...." } ] POST URL . json { "name" : " ", "shortDescription" : "...." ...... } --- /recipes/cookies/:name - ${name} { "name" : " ", "rating" : 5, "shortDescription" : "....", "description" : "...." "ingredients" : [ { "name" : "", ..... }, { "name" : "", ..... }, { "name" : "", ..... } ], "cookingSteps" : [ .... ] } // API HTTP URL
ãããŠãããã調ã¹ãŠããªãœãŒã¹ã«ãªã¯ãšã¹ããè¡ããŸãïŒéåžžãããã¯ãæå®ãããURL圢åŒã®ãã©ã¡ãŒã¿ãŒã眮æããå¿çãåŠçããã¯ã©ã€ã¢ã³ããäœæããããšã§è¡šãããŸãïŒã
ãããã¯ãŒã¯ã®ãªãŒãã³ã¹ããŒã¹ã«ã¯ããã®ãããªAPIã®äŸããããããããŸããæè¿ãŸã§ãYandexã«ã¯ããã®ã¹ããŒã ã«åŸã£ãŠæ©èœããRESTãšããŠå®£èšãããå€ãã®APIïŒ 1ã2 ïŒããããŸããã
äž»ãªæ å ±æºãã€ãŸã ãã€ã»ãã£ãŒã«ãã£ã³ã°ã®è«æïŒãã°ãã°åç §ãããŸãããããŸãèªãŸããŸããïŒã«ã€ããŠã¯ããã®æ¹æ³ã§äœæãããAPIã¯ãè«æã§èª¬æãããŠããååã®ããã€ãã«éåãããããRESTãšåŒã¶ããšã¯ã§ããŸãããæãéèŠãªã®ã¯ãã€ããŒã¡ãã£ã¢ã®äœ¿çšã§ãç¶æ 管çããŒã«ïŒHypermedia As The Engine Of Application StateãHATEOASïŒãšããŠãéæ¥çã«èªå·±èšè¿°ã¡ãã»ãŒãžã«å¯ŸåŠããŸãã
ã¡ãã»ãŒãžå ã®ãã€ããŒã¡ãã£ã¢
HATEOASã®æ¬è³ªã¯ãAPIã®ãªãœãŒã¹ãèšè¿°ããããã®ã¢ãããŒãã§ãã ã¯ã©ã€ã¢ã³ããåŒã³åºãããšãã§ãããã¹ãŠã®å¯èœãªæäœã®ãªã¹ãã䜿çšããŠããªãœãŒã¹ã®ã»ãããåçŽã«ãªã¹ããã代ããã«ãããã€ãã®å éšããžãã¯ã«åºã¥ããŠãå¶åŸ¡ã®å転ãå®è¡ããŸã-ãµãŒããŒã¯ãªãœãŒã¹ã®ç¶æ ãæ åœãããªãœãŒã¹ã«å¯ŸããŠçŸåšå®è¡ã§ããæäœãã¯ã©ã€ã¢ã³ãã«æ瀺ããŸãã ãã®æ å ±ã¯ãã¯ã©ã€ã¢ã³ããåä¿¡ãããªãœãŒã¹ã®ãŸãã«è¡šçŸã«ååšããå¿ èŠããããŸãã ãããã£ãŠããªãœãŒã¹ã®ãã¬ãŒã³ããŒã·ã§ã³èªäœã¯ãã¯ã©ã€ã¢ã³ããããã§äœãã§ããããç解ããã®ã«ååãªã»ã©èª¬æããŠããŸãã
éåžžããã®ã¢ãããŒãã®é©çšã¯ãã¯ã©ã€ã¢ã³ããããšã³ããªãã€ã³ããã®æéã»ãããç¥ã£ãŠããããšãæå³ããŸãïŒãµã€ãã®éå§ããŒãžã«é¡äŒŒããŠãããšã¿ãªãããšãã§ããŸãïŒã ã
ãã®ç®æšãéæããããã«ããã€ããŒãªã³ã¯ã䜿çšãããŸãã
- ãã¹ãŠã®ãªãœãŒã¹ã¯ãªã³ã¯ã䜿çšããŠã¢ãã¬ã¹æå®å¯èœã§ãããä»ã®ãªãœãŒã¹ãžã®ãªã³ã¯ã¯ã¡ãã»ãŒãžèªäœã®äžã«ååšããçžäºã«éä¿¡ããŸãã ã¯ã©ã€ã¢ã³ãã¯ãURI圢åŒã«çŠç¹ãåœãŠã代ããã«ããªãœãŒã¹ãã¥ãŒã«çŽæ¥é 眮ããããªã³ã¯ãéžæããèå¥åã«ãã£ãŠã¬ã€ããããŸãã 以åã«ããã¥ã¡ã³ãã§ææããããã«ãäœããã®IDãååŸãããã®IDã«åºã¥ããŠç¹å¥ãªURLãäœæããå¿ èŠãããããšãææãããããURLã»ãããAPIã®äžéšã«ãããšãURL圢æã®è©³çŽ°ã¯ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã®å®è£ ã«åºæã®ãã®ã§ã¯ãªããªããŸãã æçµçã«ãã¯ã©ã€ã¢ã³ãã¯ããã¥ã¡ã³ãã®ãã³ãã¬ãŒãããURLãçæããã®ã§ã¯ãªãããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããšãéèŠã§ãã
- ãªãœãŒã¹ã§å©çšå¯èœãªæäœããªã³ã¯ãšããŠè¡šçŸã§ããŸãã
é¢é£ãããªãœãŒã¹ãšå©çšå¯èœãªã¢ã¯ã·ã§ã³ã®äž¡æ¹ãžã®ãªã³ã¯ããªãããããã®æäœã¯ãªãœãŒã¹ã®çŸåšã®ç¶æ ã§ã¯å©çšã§ããŸããã
ãã€ããŒã¡ãã£ã¢ãã¥ãŒã§ã®Cookies Recipes APIåŠçã®äŸ
Cookieã¬ã·ãã®ãã£ã¬ã¯ããªã«é¢ããAPIã䜿çšããäŸã«æ»ããããããã€ããŒã¡ãã£ã¢ãã¥ãŒã«å€æããŸãã
ãåç¥ã®ããã«ãã¬ã·ãã®ãªã¹ããšãææãšèª¿çæé ããªã¹ãããç¹å®ã®ã¬ã·ãã詳述ãããªãœãŒã¹ããããŸããã ãã€ããŒã¡ãã£ã¢ã¢ãããŒãã䜿çšãããšã次ã®ããã«ãªããŸãã
// { "links": { "self" "/recipes/cookies" } "items": [ { "name": " ", "rating": 5, "shortDescription": "...." "links": { "self": "/recipes/cookies/ " } } ] } // { "links": { "self": "/recipes/cookies/ " } "name": " ", "rating": 5, "shortDescription": "....", "description": "...." "ingredients": [ { "name": "", ..... }, { "name": "", ..... }, { "name": "", ..... } ], "cookingSteps": [ .... ] }
å
ã®ããŒãžã§ã³ãšã®å€§ããªéãã¯ãåãªãœãŒã¹å
ã®links
ãªããžã§ã¯ãã®å€èŠ³ã§ãã ãã®ãªããžã§ã¯ãã®ããŒã¯é¢ä¿ïŒåãèå¥åïŒã§ãããå€ã¯ãªã³ã¯ã§ãã ãã®çµæãã¬ã·ãã«ã¿ãã°ãã詳现ãªèª¬æã«é²ãæ¹æ³ã«é¢ããè¿œå æ
å ±ïŒãªãœãŒã¹èªäœã®å€éšïŒã¯ãªãœãŒã¹ã«å¿
èŠãããŸããããªã³ã¯ã¯ãªãœãŒã¹ã®ãã¬ãŒã³ããŒã·ã§ã³ã«çµã¿èŸŒãŸããŸãã
ãã®ã¢ãããŒãã«ãããAPIã®æ©èœãç°¡åã«æ¡åŒµã§ããŸãã åã¬ã·ãã«ã€ããŠãã¬ã·ãã®ãªã¹ãã®åœ¢åŒã§æ瀺ãããäžé£ã®æšå¥šäºé ãã¯ã©ã€ã¢ã³ãã«æäŸãããšããŸãã ããã¯éåžžã«ç°¡åã§ãããªã³ã¯ãªããžã§ã¯ãã«æ°ããããŒãè¿œå ããã ãã§ãã
"links" : { "self" : "/recipes/cookies/ ", "http://acme.com/recipes/rels/you-can-also-like" : "/recipes/cookies?related_to=+++" }
åæ§ã«ãå¿ èŠã«å¿ããŠãæåã®èå¥æ å ±ãåå¥ã®ãªãœãŒã¹ãšããŠè¿œå ããããšã¯ãŸã£ããé£ãããããŸããã
APIèŠçŽ ã¯ãªã¬ãŒã·ã§ã³ã§ãããããURIã®ã³ã³ãã³ãã¯äœã®åœ¹å²ãæããããã¯ã©ã€ã¢ã³ãã§ã®å€æŽãªãã«ã /recipes/related-to/
ãŸãã¯/recipes/234892skfj45sdlkfjdsa12
ãžã®ãªã³ã¯ãå€æŽã§ããŸã
å€æŽãµãŒãã¹ã®ãã€ããŒã¡ãã£ã¢
ãã€ããŒã¡ãã£ã¢ã¯ãããã²ãŒã·ã§ã³ã ãã§ãªãã¢ã¯ã·ã§ã³ã®å®è¡ã«ã䜿çšãããŸããããªãœãŒã¹ã«å¯Ÿããç¹å®ã®æäœãå®è¡ãã責任ãããé¢ä¿ãç¹å®ãããããã®æäœã®ã»ãã³ãã£ã¯ã¹ãšè©³çŽ°ã瀺ãã ãã§ååã§ãã
ããããããããããã«ããã€ããŒã¬ã·ããè¿œå ããŠæ°ããã¬ã·ããäœæããAPIã®äŸãæ€èšããŠãã ããã
// { "links" : { "self" : "/recipes/cookies", "http://acme.com/recipes/rels/add-recipe" : "/recipes/cookies" } "items" : [ ..... ] }
ç¹å¥ãªé¢ä¿ãæã€ãªã³ã¯ãè¿œå ããŸããã åºæ¬çãªã«ãŒã«ã¯ãã¯ã©ã€ã¢ã³ããç¥ããªãé¢ä¿ãç¡èŠããããšã§ããæ°ããã¬ã·ããè¿œå ããæ¹æ³ãç¥ããªããå€ãã顧客ã¯ä»¥åãšåãããã«åäœããŸãããäœæããµããŒãããå Žåãããã¯ãªã¯ãšã¹ããéä¿¡ããããšã§æ°ããã¬ã·ããè¿œå ã§ãããšããã·ã°ãã«ã«ãªããŸãhttp://acme.com/recipes/rels/add-recipe
ã«é¢é£ããŠåç
§ãããURI
ãã®ã¢ãããŒãã«ãããéçãªäžé£ã®æäœãšãã®å®è£ ã®æ¡ä»¶ãããã¥ã¡ã³ãã«èšè¿°ããã®ã§ã¯ãªãããµãŒããŒã«çŽæ¥èšè¿°ããŠãã¯ã©ã€ã¢ã³ããç¹å®ã®æéã«ãªãœãŒã¹ã§å®è¡ã§ããæäœãšã§ããªãæäœãå¶åŸ¡ã§ããŸãã æ°ããã¢ã¯ã·ã§ã³ãè¿œå ããããšãé£ãããããŸãããæ°ãããªã¬ãŒã·ã§ã³ã宣èšãããµãŒããŒã圢æãããªãœãŒã¹è¡šçŸã«ãããå«ãå§ããã ãã§ãã
ãã¡ããããªã³ã¯ãæäŸããŠãããµãŒããŒãHTTPã¡ãœãããæ£ããåŠçããã»ãã³ãã£ã¯ã¹ãç£èŠãã責任ãå ããããšã¯ãããŸãã:)ã
ããããé¢ä¿ã¯ã©ãã§ããïŒ
çŸæç¹ã§ã¯ãããããçåããããŸãïŒå¹æçãªä»äºã®ããã«ã¯ã©ã€ã¢ã³ããé¢ä¿ã®æå³ããŸã ç解ããå¿ èŠãããå Žåãããããã¹ãŠéå§ãããã€ã³ãã¯äœã§ããïŒ ãããã®ããã¥ã¡ã³ããå¿ èŠã§ãã
å®éãå¹æçãªä»äºã®ããã«ãã¯ã©ã€ã¢ã³ãã¯åé¢ä¿ãäœãæå³ããã®ããæ¬åœã«ç解ããå¿ èŠããããŸãã URIã®è§£éããªã¬ãŒã·ã§ã³ã«çœ®ãæããèåŸã«ããäž»ãªã¢ã€ãã¢ã¯ããªã¬ãŒã·ã§ã³ãããæ°žç¶çã«ããããšã§ãã URIã¯å®è£ ã®è©³çŽ°ã§ãããæéã®çµéããµãŒããŒããšã«å€åããå¯èœæ§ããããŸãã é¢ä¿ã¯éä¿¡ã®ã»ãã³ãã£ãã¯ãªèšè¿°ã§ãããã¹ãã¬ãŒãžã®è©³çŽ°ãšã¯é¢ä¿ãããŸããã
ã¬ã·ããä¿åããããã®äºææ§ã®ããAPIãäœæããããšããŸãããã¹ãã¬ãŒãžã®æ§è³ªäžãåã¬ã·ããååã§ã¯ãªãUUIDã§èå¥ããããšããŸãã å ã®APIã®å Žåãããã¯äžå¯èœã§ããããã€ããŒã¡ãã£ã¢APIã®å Žåãã¯ã©ã€ã¢ã³ãã«ã¯ãŸã£ããèŠããŸããã
ãã®çµæããµãŒããŒäžã§å€æŽãè¡ãããå Žåã«å€æŽã®åœ±é¿ãåãã«ãããããæ±çšçãªã¯ã©ã€ã¢ã³ããäœæããããšãå¯èœã«ãªããŸãã
ãã€ããŒã¡ãã£ã¢ã®çš®é¡ãŸãã¯ã¢ããªã±ãŒã·ã§ã³/ jsonãç§ãã¡ã«åããªãçç±
Hypermediaã®ã¢ãããŒãã掻çšããããšã«ããã®ã§ãäžèšã®æ¹æ³ã§APIãå€æŽããŸããããããŠãåç
§ã«ãã£ãŠäºãã«ãªã³ã¯ããããªãœãŒã¹ãã§ããŸããã äžèŠããã¹ãŠãAPIã®é åºã©ããã«ãªã£ãŠããããã«èŠãããããããŸããããHypermedia APIãããããšã宣èšããåã«ãå¿çã§è¿ãããContent-TypeããããŒãèŠãŠã¿ãŸãããã ããã«application/json
ãŸãã¯text/plain
å Žåã§ããåŒãç¶ãäžçæžåœåãå¿
èŠããããŸãã
æ©æ¢°ã®ç®ããèŠããªãœãŒã¹
ç§ãã¡ãæã£ãŠãããªãœãŒã¹ãèŠããšã人ã ã¯ããã«ãªã³ã¯ãéžæããã¡ãã»ãŒãžã®æ£ãã圢åŒã®å°è±¡ãäžããŸãã ã¡ãã»ãŒãžã®å 容ãåæããããšã§ãããçµãããããããæšæºãContent-Typeå¿çããããŒã調ã¹ãããšãèŠå®ããæ¹æ³ã§ãã
次ã®ãµãŒããŒå¿çãèæ ®ããŠãã ããã
200 OK Content-Type: text/plain <?xml version="1.0"?> <hello>world</hello>
çãã«ã¯xml-documentãå«ãŸããŠããããšã¯æããã§ãããContent-Typeã¯ã³ã³ãã³ãããã¬ãŒã³ããã¹ããšããŠèªèããããã«æ瀺ããŠãããããxml-documentã¯åãªãå¶ç¶ãŸãã¯ç¹æ®ãªã±ãŒã¹ã«ãªããŸãã ãã®ãããçã®Content-Typeãéåžžã«éèŠã§ãã
ã©ã®application/json
ã¿ã¹ã¯ã«é©ããŠããªãã®ããç解ããŸããããïŒ å®éããã®åãèšè¿°ããæšæºã¯ããã®åã®åç
§ãå®çŸ©ããããã®å Žæãã¡ã«ããºã ãæäŸããŠããŸããã ãŸããçæããã¡ãã»ãŒãžã«ãªã³ã¯ãå«ãŸããŠããå Žåã§ãããã·ã³ã¯ãããããªã³ã¯ã«äŒŒã圢åŒã®ããã¹ããå«ãè¡ãšåºå¥ã§ããŸããã ãã ãããªã³ã¯ãã¡ãã»ãŒãžã®ã©ãã«ããããã©ãã«ãªãããæ確ã«å€æããå¿
èŠããããããå¥ã®ã¿ã€ããå¿
èŠã§ãã
ãã³ããŒåºæã®ã¿ã€ã
Content-Typeã®æ£ç¢ºæ§ã®åé¡ã解決ãã1ã€ã®æ¹æ³ã¯ãç¬èªã®ãã®ã䜿çšããããšã§ãã ããã¥ã¡ã³ãã§ã¯ãã¡ãã»ãŒãžå ã®ãªã³ã¯ã®å Žæãæ確ã«ç€ºããŸãã ã¯ã©ã€ã¢ã³ããç§ãã¡ã®å人çãªContent-Typeã䜿çšããŠãµãŒããŒããå¿çãåãåã£ãå Žåããã¡ããã圌ãContent-Typeãç解ããŠããªãéãããªã³ã¯ãäœã§ããããåçã«æšæž¬ããå¿ èŠã¯ãããŸããã å€ãã®å Žåãã¿ã€ãã説æããããã¥ã¡ã³ãã«ã¯ããã©ãŒãããèªäœã®è©³çŽ°ïŒãªã³ã¯ã®å Žæãããããã£ã®å ŽæïŒã ãã§ãªãããã®ä»ã®æ å ±ãå«ãŸããŠããããšã«æ³šæããŠãã ããã
- ããããã£ã®ã»ãã³ãã£ãã¯èšè¿°ãã€ãŸã ããžãã¹ããžãã¯ã®èŠ³ç¹ã§ã®æå³ã
- èŠæ±ãéä¿¡ããããã«å¿ èŠãªHTTPã¡ãœãããªã©ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®çžäºäœçšã®è©³çŽ°ã
ãã®ãããªã¿ã€ãã¯ãç¹å®ã®ã¿ã¹ã¯ããã³ç¹å®ã®çµç¹çšã«äœæãããããšãå€ãããããã³ããŒåºæãšåŒã°ããŸãã IANAã«ç»é²ããå¿
èŠã¯ãããŸããã ãã©ãŒã application/vnd.${vendor}+${base_format}
ååãä»ããããšããå§ãããŸãapplication/vnd.${vendor}+${base_format}
ããã§ã ${vendor}
ã¯äŒç€Ÿã®éãã¡ã€ã³ã ${base_format}
ã¯ããŒã¹ãšããŠäœ¿çšããã¿ã€ãã§ãã äŒç€Ÿã«acme.comãã¡ã€ã³ããããjsonã䜿çšããŠãªãœãŒã¹ãè¡šãå Žåãã¬ã·ãAPIã®ã¿ã€ãåã¯application/vnd.com.acme.recipes+json
ããã«ãªãapplication/vnd.com.acme.recipes+json
ã
ãã€ããŒã¡ãã£ã¢ã®äžè¬çãªã¿ã€ã
äžèŠããã³ããŒåºæã®ã¿ã€ãã¯ãªã³ã¯ã®åé¡ã解決ããŸãããç¬èªã®åé¡ããããŸãã
- ã¿ã€ãã¯çžäºã«äºææ§ããªããããã¯ã©ã€ã¢ã³ããè€æ°ã®APIãšå¯Ÿè©±ããå Žåãã¯ã©ã€ã¢ã³ãã¯å€ãã®ç°ãªãå®è£ ããµããŒãããå¿ èŠããããŸãã åã¿ã€ãã®ãã©ãŒãããã®è§£æãããããã£ããªã³ã¯ãªã©ã®åŒ·èª¿è¡šç€ºã«ã¯ãåå¥ã®ã©ã€ãã©ãªã®ãµããŒããå¿ èŠã§ãã
- åã¿ã¹ã¯ã«ãã³ããŒåºæã®ã¿ã€ããäœæãããšãç·æ°ãéåžžã«é¡èã«å¢å ããŸãã
å¥ã®æ¹æ³ãšããŠãæ±çšã¿ã€ãããããããæ°ããã¢ãããŒãã¯éããªãç»å ŽããŸãã èããŠã¿ããšãã¡ãã»ãŒãžåœ¢åŒã«å¿ èŠãªã®ã¯ã質åã«çããä»æ§ã ãã§ãã
- ãªãœãŒã¹ã®ããããã£ãèŠã€ããæ¹æ³ã
- ãªãœãŒã¹å ã®ãã€ããŒã¡ãã£ã¢ã³ã³ãããŒã«ãèŠã€ããæ¹æ³ã
解決ãããŠããã®ã¯ãã®åé¡ã§ããæ±çšã¿ã€ãã¯ç¹å®ã®ãã¡ã€ã³ãã¡ã€ã³ã«é©å¿ããããšãããåŠçãããªãœãŒã¹ã®ã»ãšãã©ãèšè¿°ããããšãã§ããŸãã
ãã¹ãŠã®ã¿ã€ãã®æ±çšã®éèŠãªæ©èœã¯ãããã¥ã¡ã³ãã®ã»ãã³ãã£ãã¯èšè¿°ã®ã¿ã¹ã¯ãåŒãèµ·ãããªãããšã§ãã ã¬ã·ãã®èª¬æãããã°ãžã®ã³ã¡ã³ããªã©ããããã©ã®ãããªãªãœãŒã¹ã§ããããäŒããŸãããããã¯åœŒãã®ä»äºã§ã¯ãããŸããã 圢åŒã®è©³çŽ°ãæ åœããã»ãã³ãã£ãã¯ä»æ§ããã®ãŸãŸäœ¿çšã§ããŸãã ã»ãã³ãã£ã¯ã¹ã¯ããããããããã¡ã€ã«ïŒããããã£ãšé¢ä¿ïŒãªã¬ãŒã·ã§ã³ïŒã®ã»ãã³ãã£ã¯ã¹ã説æããå¥åã®ææžïŒã§å²ãŸããããšãæ³å®ãããŠããŸãã
çŸæç¹ã§ã¯ããã®ãããªãã©ãŒãããã¯ãã§ã«ããªãå€æ°ããããããã®ãã¡ã®ããã€ãããªã¹ãããŸãã
-
application/hal+json
æè¿ç»å Žãããã®ã®1ã€ã§ãããæè¿æã人æ°ã®ãã圢åŒã§ãã -
application/vnd.siren+json
; -
application/mason+json
ã
ãã®ãããªãã¹ãŠã®åœ¢åŒã®èª¬æã«ã¯ããªãœãŒã¹ã®ããããã£ãé 眮ããæ¹æ³ãšå Žæãä»ã®ãªãœãŒã¹ãžã®ãªã³ã¯ãäœæãã圢åŒãèšèŒãããŠããŸãã
ã¿ã€ãèªäœã«å«ãŸãã圢åŒãšæ©èœãç°ãªããŸãã
ã¯ãªãšã€ã¿ãŒã®åœ¢åŒãååã®éã
ã»ãšãã©ã®æ±çšã¿ã€ãã«ã¯ããªã³ã¯ã®ãã©ãŒãããæ¹æ³ãªã©ã现ããéšåããããŸãã ãã®ãããHALã§ã¯ããªã³ã¯ã¯æ¬¡ã®ããã«ãªããŸãã
"_links" : { "self" : .... "relToResource": ..... }
äžæ¹ãSirenã¯æ¬¡ã®ããã«è¡šç€ºããŸãã
"links" : [ {"rel" : ["self"], "href" : "...."}, {"rel" : ["relToResource"], "href" : "...."} ]
ããã§ã®äž»ãªéãã¯ãé¢ä¿å€ã®è¡šçŸã§ãã HALã®äœæè ã¯ãã©ãŒããããããç°¡æœã«ãããã£ãã®ã«å¯ŸããSirenã®äœæè ã¯ãããããå®å šãªãã®ã«ãããã£ãã®ã§ãããªã³ã¯ã§ã¯ãªã¬ãŒã·ã§ã³ãæ¬åœã«è€éã«ãªãå¯èœæ§ããããŸãïŒãããSirenã®å€ã®é åã§ããçç±ã§ãïŒããããã¯åžžã«äœ¿çšãããããã§ã¯ãããŸãããªããžã§ã¯ãå ïŒã
ãã®ãããªããŸããŸãªãã¥ãŒã«ãããããŸããŸãªåœ¢åŒãäœæãããåäžã®åœ¢åŒã«åæããããšã¯ã§ããŸããã§ããã
æ©äŒã®éã
ããã§ã¯ããã©ãŒãããã®ãã¹ãŠã®éãããªã¹ãããã®ã§ã¯ãªãããã§ã«è¿°ã¹ãã¿ã€ããäŸãšããŠäœ¿çšããŠãäž»ãªãã®ã®ã¿ãæŠèª¬ããŸãã
- HALã«ã¯ãç¬ç«ãããšã³ãã£ãã£ãšããŠã®ã¢ã¯ã·ã§ã³ã®æŠå¿µã¯ãããŸããããªã¯ãšã¹ãã®éä¿¡ã«äœ¿çšããå¿ èŠããããªã³ã¯ãšã¡ãœããã®ã¿ãã¡ãã»ãŒãžã«å«ãŸããŠããŸããã SirenãšMasonã«ã¯ããã©ãŒã ãèšè¿°ããããã®ããŒã«ããããŸããã¡ãã»ãŒãžã«ã¯ãã¯ã©ã€ã¢ã³ãã«ããå ¥åã«å¿ èŠãªãã©ã¡ãŒã¿ãŒãããããã¹ãŠéä¿¡ããå¿ èŠãããã¡ãœãããããã³Content-Typeãå«ãŸããŸãã
- HALã«ã¯ãæ€çŽ¢ãã©ãŒã ãšããå¥ã®æŠå¿µããããŸããããã¯ããµãŒããŒããæ å ±ãåä¿¡ããããã®å®å šã§ã¹ãçãªã¢ã¯ã·ã§ã³ã§ãã ãµã€ã¬ã³ãšã¡ã€ãœã³ã¯ãåè¿°ã®ããã«ãããããã¢ã¯ã·ã§ã³ãèšè¿°ããèœåãæã£ãŠããŸãã
- HALãšSirenã«ã¯ãä»æ§ã«ãšã©ãŒã®èª¬æã®è©³çŽ°ãå«ãŸããŠããŸãããããã¯ããã©ãŒãããã®ãŠãŒã¶ãŒã®è£éã«çãŸããŸãïŒ
application/vnd.error+json
䜿çšã§ããŸãïŒapplication/vnd.error+json
ã§ã¯ããã®åŽé¢ã¯ãã©ãŒãããã«å«ãŸããŸãã
æ±çšãšãã³ããŒåºæ
ã©ã¡ãã®ãªãã·ã§ã³ãæãŸãããïŒç¹å¥ã«äœæãããã¿ã€ãããæ¢åã®ãªãã·ã§ã³ã®1ã€ã§ããïŒ éåžžãåæ§ã®è³ªåã®å Žåãšåæ§ã«ãããã«å¯Ÿããæ確ãªçãã¯ãããŸããããã¹ãŠã¯äœ¿çšç¶æ³ã«äŸåãããããããããã®å©ç¹ãšæ¬ ç¹ã匷調ããŠã¿ãŸãããã
æ±çšãã€ããŒã¡ãã£ã¢ã¿ã€ãã®äž»ãªå©ç¹ã®1ã€ã¯ããŠãŒã¶ãŒãšAPIã¯ã©ã€ã¢ã³ãã®æéãç¯çŽã§ããããšã§ãã ããã¯ãããéããŠéæããããã®ã§ãïŒ
- ã¡ãã»ãŒãžåœ¢åŒã¯ãã§ã«éçºãããŠããŸãã éžæãã圢åŒã®æ¢ã«ç¢ºç«ãããå¶éã§APIãäœæããããšã«ãããåé¡ã®è§£æ±ºã«éäžã§ããŸãã
- ã¡ãã»ãŒãžãäœæããã³è§£æããããã«ãããŸããŸãªããã°ã©ãã³ã°èšèªçšã®ã©ã€ãã©ãªããã§ã«äœæãããŠããŸãã æ¢æã®ã©ã€ãã©ãªãæ¥ç¶ããŠãJSONã®ãã¹ã®è©³çŽ°ã§ã¯ãªãããªã³ã¯ãã¢ã¯ã·ã§ã³ããªããžã§ã¯ãããããã£ãªã©ã®é«ã¬ãã«ã®æŠå¿µãæäœãããšäŸ¿å©ã§ãã
- å€ãã®äžè¬çãªã¿ã€ãã«ã¯ããããããã©ãŠã¶ãŒããããŸãã ãããã¯ãç¹å®ã®ã¿ã€ãã®èŠçŽ ãç解ããWebã€ã³ã¿ãŒãã§ãŒã¹ãåçã«åœ¢æããåçŽãªã¯ã©ã€ã¢ã³ãã§ããããã«ãããã¯ã©ã€ã¢ã³ãã®äœæã«1åãè²»ããããšãªããäœæãããAPIãããã«å®èšŒã§ããŸãã
- 顧客ã¯ãAPIã®ããã¥ã¡ã³ããã€ãŸã ãã©ãŒãããã®è©³çŽ°ãèªãæéãè²»ããããšãªããããžãã¹æèŠã«ã®ã¿éäžã§ããŸãã
åæã«ããã®ã¢ãããŒãã®å©ç¹ã®ããã€ãã¯æ¬ ç¹ã®ããã«èŠãããããããŸããã ãã®åã¯ã©ã®ãã¡ã€ã³é åãã¿ã¹ã¯ã«ãçµã³ä»ããããŠããªããããäœæã§ããç¹æ®ãªåãšæ¯èŒããŠããªãœãŒã¹ã®è¡šçŸã¯ãããè¥å€§åãããŠããŸãã
ãã®çµæãã»ãšãã©ã®ã¿ã¹ã¯ã§ãããã©ã«ãã®æ±çšãã€ããŒã¡ãã£ã¢åœ¢åŒã®ããããã䜿çšããããšããå§ãããè€éãŸãã¯ç¹å®ã®ã±ãŒã¹ã§ãã³ããŒåœ¢åŒãéžæã§ããŸãïŒãã¡ããããã³ããŒããã¯ã€ã³ã®ç®æšãèšå®ããªãéãïŒã
ããã¯ã©ããããå¿ èŠã§ããïŒ
説æããã¢ãããŒãã¯ãAPIã®éçºã«ããããã¹ãŠã®åé¡ã解決ããããã«èšèšãããå¥ã®ç¹å¹è¬ã§ã¯ãããŸããã
ãšã³ããªãã€ã³ãã®æŠå¿µã¯ãç®çã®ãªãœãŒã¹ã«ãå°éãããããã®ãªã¯ãšã¹ãæ°ã®å¢å ã«ã€ãªããå¯èœæ§ãããããªã³ã¯ãå«ããŠããã¢ããŒã¿ãšæ¯èŒããŠã¡ãã»ãŒãžãããå€ãããããšã«æ³šæã§ããŸãã
ãããã®åé¡ã¯ãããèãæããããªãœãŒã¹æ§é ïŒã¯ã€ãã¯ããã²ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ãã§ãªãœãŒã¹æ€çŽ¢æäœãå®è¡ã§ããªãã®ã¯èª°ã§ããïŒããã£ãã·ã³ã°ïŒãã®ã¢ãŒããã¯ãã£ã¢ãããŒãã®éèŠãªã³ã³ããŒãã³ããšããŠãã£ãŒã«ãã£ã³ã°ã§ãææãããŠããïŒãããã³WebãµãŒããŒã§ã®å§çž®ã®éåžžã®å å«ã«ãã£ãŠè§£æ±ºããããšãããããã®æ¬ ç¹ã«å察ããããšãã§ããŸãã
RESTãæäŸããæè»æ§ãšæ¡åŒµæ§ã«ãããRESTã¢ãããŒãïŒããã§ã¯å®å šãªRESTïŒã®äž»ãªå©ç¹ã¯ãæ¢åã®ã¯ã©ã€ã¢ã³ãã®äœæ¥ãäžæããããšãªãããµãŒããŒäžã®ãªãœãŒã¹ã®æ§æãå€æŽããããæ°ããæ©èœãè¿œå ãããã§ããããšã§ãã
APIã§ãã€ããŒã¡ãã£ã¢ã䜿çšããªãããšã«ããå Žåã§ãããããªãã§ã¯RESTã¯RESTã§ã¯ãªããåãªãWeb APIã§ããããšãããããŸãã ããã¯APIãè¯ããã®ã«ãæªããã®ã«ããããäºå®ãè¿°ã¹ãŠããã ãã§ãã , API API, , :).