ããã REST API ã€ã³ã¿ãã¥ãŒã®è³ªåãšåç
ãã®èšäºã§ã¯ãREST API ã®é¢æ¥ã§æãããèããã質åã«ã€ããŠèª¬æããéçºè ãéçºè ãšããŠå°±è·ã®é¢æ¥ã«åã€ããšãã§ããããã«æºåããŸãã

ã¯ã©ãŠã ã³ã³ãã¥ãŒãã£ã³ã° ããã€ã¯ããµãŒãã¹ ããŒã¹ã®ã¢ãŒããã¯ãã£ãå«ãããã€ãã®éçºã¯ãRESTful API ã«ãã£ãŠå¯èœã«ãªããŸããã圌ãã¯ããªã³ã©ã€ã³ ã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã³ãã¥ãŒãã£ã³ã°ãã·ã³ãã«ãªãã®ãšããŠæããŠããŸããããããã£ãŠããã¹ãŠã®éçºè ã¯ã REST ãšã¯äœããREST ã ã©ã®ããã«æ©èœãããããã®å©ç¹ãããã³æä»£ã«é ããã«ã€ããŠããããã®å®å šãªãµãŒãã¹ãäœæããæ¹æ³ãçè§£ããå¿ èŠããããŸãã圌ãã¯ãã¹ã±ãŒã©ãã«ã§ä¿å®ãç°¡åãªãœãªã¥ãŒã·ã§ã³ã®äœæãæ¯æŽããã€ã³ã¿ãŒãããã®åã®ãããã§è£œåãäžçäžã«å±ããããšãã§ãããããå€ãã®äŒæ¥ã¯ REST ãçè§£ããŠããéçºè ã奜ã¿ãŸãã
RESTful API é¢é£ã®é¢æ¥ã®è³ªåã«åããã«ã¯ã©ãããã°ããã§ãã?
REST API ã€ã³ã¿ãã¥ãŒäžã« RESTful Web ãµãŒãã¹ã«é¢ããæãé »ç¹ãª REST API ã€ã³ã¿ãã¥ãŒã®è³ªåãããã³ Spring MVC ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠæ§ç¯ããã JAX-RS ã©ã€ãã©ãªãŒããã³ RESTful Web ãµãŒãã¹ã«é¢ããåãåããã¯ã以äžã®ã»ã¯ã·ã§ã³ã«èšèŒãããŠããŸãã颿¥ã«åå ãããã颿¥ã®ã¹ã±ãžã¥ãŒã«ãèšå®ãããããåã«ãèšåãããŠãããã¹ãŠã® REST API 颿¥ã®è³ªåã«åããããšãéèŠã§ãã
ã¬ã¹ããšã¯ïŒ
Representational State Transfer ã説æãã REST ã¯ãHTTP ãããã³ã«ã§ç¢ºç«ããã Web ãµã€ã ã¢ããªã®éçºãæ åœããŸãã REST ã¯ãWeb ãµã€ãé¢é£ã®æçšæ§ããããä¿¡ããããã«ä»å ããªããã°ãªããªãããã€ãã®ã«ãŒã«ãæå®ããŸãããã®ææ¡ã«ããããµãŒããŒãšãŠãŒã¶ãŒã®éã§æšæºåããã HTTP ã¡ãœãããéä¿¡ãä»®æ³çã«éä¿¡ããããšãä¿èšŒãããŸãã

REST API ãšã¯äœã§ãã?
RESTful API ã¯ã2 ã€ã®ã³ã³ãã¥ãŒã¿ãŒ ã·ã¹ãã éã§å®å šãªãªã³ã©ã€ã³æ å ±äº€æãè¡ããŸããããŸããŸãªã¢ã¯ãã£ããã£ãå®äºããããã«ã ããžãã¹ ã¢ããªã±ãŒã·ã§ã³ ã®å€§éšåã¯ãä»ã®å éšããã³å€éšããã°ã©ã ãšããŒã¿ã亀æããŸããããšãã°ãå éšã®äŒèšã·ã¹ãã ãåŸæ¥å¡æ å ±ãå€éšã®éè¡ã·ã¹ãã ãšå ±æããŠçµŠäžæçްãçæããå Žåãªã©ã§ãããã®æ å ±ã¯å人çãªãã®ã§ãããREST API ãœãããŠã§ã¢æšæºã¯å®å šã§å¹ççã§ä¿¡é Œã§ãããã®ã§ãããããREST API ã䜿çšããŠå®è¡ã§ããŸãã
RESTful API ã¯ãäœããã®æ¹æ³ã§ REST ã«ãªã³ã¯ãããŠãã API ãšããŠç¥ãããŠããŸãããã¹ãŠã®ããŒã¿ã¯ REST API ã®ãªãœãŒã¹ãšèŠãªããã(URI) ãšåŒã°ããæ£ç¢ºãªæšæºå®æ°åäœã«ãã£ãŠæ±ºå®ãããŸãã Twitter API ã¯ããŠãŒã¶ãŒãã¢ã¯ã»ã¹ããŠååŸã§ãããªãœãŒã¹ãšããŠãã€ãŒããäœæããŸãã Twitter API ã䜿çšãããšããŠãŒã¶ãŒã¯ç°¡åã«ãã€ãŒããæçš¿ã§ããŸãã
REST ã®ååã¯äœã§ãã?
ã¯ã©ã€ã¢ã³ããµãŒããŒã§ã¯ãã³ã³ã·ã¥ãŒããŒãšãµãŒããŒã®éã§éä¿¡ããããã«äœ¿çšãããäžé£ã®å¿çãå¯èœã§ããã©ã¡ããçžäºã«å¿çãéåä¿¡ã§ããŸãããã®ã¯ã©ã€ã¢ã³ã ãµãŒããŒæ¹åŒã®æç¢ºãªããžã§ã³ã«ãããäž¡æ¹ã®å¢åãçžäºã«æ¯æŽãåããã«æŽ»åã§ããããã«ãªããŸãã
ã¬ã€ã€ãŒãã·ã¹ãã
ã¯ã©ã€ã¢ã³ããš API ãµãŒããŒã®éã®ã¬ã€ã€ãŒã¯ãµãŒããŒã§ãããããã®ç°ãªããµãŒããŒã¯ãã¹ãã ã®æ€åºãããã©ãŒãã³ã¹ã®åäžãªã©ãããã€ãã®ã¿ã¹ã¯ãå®è¡ããŸããã¯ã©ã€ã¢ã³ããšã¢ããªã±ãŒã·ã§ã³ ããã°ã©ãã³ã° ã€ã³ã¿ãŒãã§ã€ã¹ (API) ãµãŒããŒã®éã§éä¿¡ãããã¡ãã»ãŒãžã¯ãã¬ã€ã€ãŒã远å ãŸãã¯åé€ããŠã圱é¿ãåããŸãããããã¯ãREST (representational state) ãã¢ãžã¥ã©ãŒ ã¢ãŒããã¯ãã£ã䜿çšããŠããããã§ãã
çµ±äžã€ã³ã¿ãŒãã§ãŒã¹
ã¯ã©ã€ã¢ã³ããšãµãŒããŒã¯ããã¹ãŠã®éä¿¡ã«åžžã«åããããã³ã«ã䜿çšããå¿ èŠããããŸãããã®ãããã³ã«ã¯ HTTP REST ã§ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãåãèšèªã䜿çšããŠããŒã¿ãèŠæ±ããã³æäŸãããããçµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ãŠçµ±åã容æã«ãªããŸãã
ã¹ããŒãã¬ã¹
ã¹ããŒãã¬ã¹éä¿¡ã§ã¯ããµãŒããŒã¯éä¿¡æžã¿ã®å¿çã®èšé²ãä¿æããŸããããã¹ãŠã®å¿çã«ã¯ãååŒãå®äºããããã«å¿ èŠãªå®å šãªå ¥åãå«ãŸããŠããŸãããµãŒããŒã®è² è·ãšã¡ã¢ãªäœ¿çšéãæžããããšã§è§£éãæ¹åããŸãããŸããæ å ±ãäžå®å šã§ããããã«ãªã¯ãšã¹ãã倱æããå¯èœæ§ãæé€ããŸãã
ãã£ãã·ã¥å¯èœ
ã¯ã©ã€ã¢ã³ãã¯ããªãœãŒã¹ããã£ãã·ã¥å¯èœãã©ããã瀺ããµãŒããŒããã®ãµãŒããŒå¿çã䜿çšããŠãä»»æã®ãªãœãŒã¹ããã£ãã·ã¥ããŠããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã REST ã«ã¯ã次ã®ãªãã·ã§ã³ã®æ¡ä»¶ãå«ãŸããŠããŸãã
ã³ãŒããªã³ããã³ã
API ã®å¿çã«ã¯ããŠãŒã¶ãŒãå®è¡ã§ããå®è¡å¯èœã³ãŒããå«ããããšãã§ããŸãããããã£ãŠãã¯ã©ã€ã¢ã³ã ã¢ããªã±ãŒã·ã§ã³ã¯ç¬èªã®ããã¯ãšã³ãã§ã³ãŒããå®è¡ã§ããŸãã
AJAX ãš REST ã®éãã¯äœã§ãã?
AJAX ãš REST ã®éãã¯æ¬¡ã®ãšããã§ãã
AJAX****äŒã¿XMLHttpRequest ãªããžã§ã¯ãã¯ããµãŒããŒã«èŠæ±ãéä¿¡ããããã« Ajax ã§äœ¿çšãããŸãããã ãã JavaScript ã®ã³ãŒãã¯ãçŸåšã®ããŒãžãåçã«å€æŽããããã®çããæäŸããŸãããªãœãŒã¹ã®äœ¿çšçã¯ãURI æ§é ãšèŠæ±/å¿çãã¿ãŒã³ã«ãšã£ãŠéèŠã§ãã REST ã«ãã£ãŠäœ¿çšãããŸãã Ajax ã¯ãããŒãžããªããŒãããã«ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãåçã«æŽæ°ã§ãããã¯ãããžã®ã°ã«ãŒãã§ãããŠãŒã¶ãŒã¯ãREST ãœãããŠã§ã¢ ã¢ãŒããã¯ã㣠ã¹ã¿ã€ã«ã䜿çšããŠããµãŒããŒããããŒã¿ãŸãã¯æ å ±ãèŠæ±ã§ããŸãã Ajax ã¯ããµãŒããŒãšãŠãŒã¶ãŒã®éã®éåæéä¿¡ãæé€ããŸãã REST ã¯ããµãŒããŒãšãŠãŒã¶ãŒéã®éä¿¡ãèŠæ±ããŸãã
ãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã¯ã©ã®ããã«æ©èœããŸãã?
ã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ã¢ãŒããã¯ãã£ææ³ã¯ããã€ã¯ããµãŒãã¹ãšåŒã°ããŸããåã¢ããªã±ãŒã·ã§ã³ã¯å€æ°ã®ãµãŒãã¹ã§æ§æãããŠãããåãµãŒãã¹ã¯åå¥ã®ããã»ã¹ã§å®è¡ãããAPI ãä»ããŠä»ã®ãµãŒãã¹ãšå¯Ÿè©±ããŸãã ããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ããšããŠç¥ãããã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³ã¯ãæéã®çµéãšãšãã«ãã¹ã ãã©ã¯ãã£ã¹ã«ãªããŸããããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã®ã³ã³ããŒãã³ãã¯ãããžãã¹ã®ããŒãºã«åºã¥ããŠããŸãã
- ã¯ã©ã€ã¢ã³ã
ãªã¯ãšã¹ãã¯ãããŸããŸãªããã€ã¹ã䜿çšããŠå€æ°ã®ãŠãŒã¶ãŒããéä¿¡ãããŸãã
- ID ãããã€ããŒ
ãŠãŒã¶ãŒãŸãã¯é¡§å®¢ã®èº«å ã確èªããã»ãã¥ãªã㣠ããŒã¯ã³ãæäŸããŸãã
- API ã²ãŒããŠã§ã€
ã¯ã©ã€ã¢ã³ã ãªã¯ãšã¹ã㯠API Gateway çµç±ã§åŠçãããŸãã
- éçã³ã³ãã³ã
ã·ã¹ãã ã®ãã¹ãŠã®çŽ æã¯ãéçã³ã³ãã³ãã«å«ãŸããŠããŸãã
- 管ç
é害ãç¹å®ããããŒãéã§ãµãŒãã¹ã®ãã©ã³ã¹ããšããŸãã
- ãµãŒãã¹çºèŠ
ãã€ã¯ããµãŒãã¹éã®éä¿¡çµè·¯ã決å®ããããã®ããŒã«ã
- ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯
ãããã· ãµãŒããŒãšé¢é£ããããŒã¿ ã»ã³ã¿ãŒã®åæ£ãããã¯ãŒã¯ã
- ãªã¢ãŒããµãŒãã¹
IT ããã€ã¹ã®ãããã¯ãŒã¯ã«ä¿åãããŠããæ å ±ã¯ããªã¢ãŒã ãµãŒãã¹ãå©çšããŠãªã¢ãŒãããã¢ã¯ã»ã¹ã§ããŸãã

REST ã§ãµããŒããããŠãã HTTP ã¡ãœããã¯äœã§ãã?
REST HTTP ã§ãµããŒããããŠããã¡ãœããã¯æ¬¡ã®ãšããã§ãã
- GET - Web ãµã€ãã API ã§æãåºã䜿çšãããŠããã¡ãœããã§ãGET ã¯ç¹å®ã®ããŒã¿ ãµãŒããŒãããªãœãŒã¹ãåãåããŸãã
- POST - POST ã¡ãœãããä»ããŠãããŒã¿ã API ãµãŒããŒã«éä¿¡ããããªãœãŒã¹ãæŽæ°ãããŸãããµãŒããŒãããŒã¿ãåä¿¡ãããšãããã HTTP èŠæ±æ¬æã«æ ŒçŽããŸãã
- PUT - ãªãœãŒã¹ãäœæããã³æŽæ°ããããã«ããŒã¿ã API ã«éä¿¡ããŸãã
- DELETE - ååã瀺ãããã«ããã®ã¡ãœããã¯ç¹å®ã® URL ã®ãªãœãŒã¹ãåé€ããããã«äœ¿çšãããŸãã
- OPTIONS - ãµããŒããããŠããææ³ã«ã€ããŠè©³ãã説æããŸãã
HEAD - ãªã¯ãšã¹ã URL ã«é¢ããã¡ã¿ããŒã¿ãè¿ãããŸããåäžã®ã¬ã³ãŒãã®èгç¹ããç¶æ³ã調ã¹ãŠã¿ãŸããããåŸæ¥å¡çªå· 1 ã®åŸæ¥å¡ã®ã¬ã³ãŒãããããšããŸããæ¬¡ã®ã¢ã¯ãã£ããã£ã¯ããããç°ãªãããšã瀺ããŸãã
POST - ãã§ã«äœæãããŠããåŸæ¥å¡ 1 ã®æ å ±ãååŸããŠãããããããã¯é©çšãããŸããã
GET - ããã¯ãRESTful Web API ãä»ããŠåŸæ¥å¡ã®æ å ±ãååŸããããã«äœ¿çšãããåŸæ¥å¡çªå·ã¯ 1 ã«ãªããŸãã
PUT - RESTful Web API ã䜿çšããŠãåŸæ¥å¡çªå· 1 ãåæ ããããã«åŸæ¥å¡ã®æ å ±ãæŽæ°ããããã« PUT ã䜿çšãããŸãã
DELETE - ãã®é¢æ°ã¯ãåŸæ¥å¡çªå· 1 ã®åŸæ¥å¡ã®æ å ±ãåé€ããããã«äœ¿çšãããŸãã
PUT ãš POST ã®éãã¯äœã§ãã?
PUT ãš Post ã®éãã¯æ¬¡ã®ãšããã§ãã
- PUT - æäŸããã (Uniform Resource Identifier) URI ã§ãã¡ã€ã«ãŸãã¯ãªãœãŒã¹ãæ£ç¢ºãã€å ·äœçã«èå¥ããŸãã PUT ã¯ãæ¢åã®ãã¡ã€ã«ããã®ãŠããã©ãŒã ãªãœãŒã¹èå¥å (URI) ã«ååšããå Žåãããã倿ŽããŸãã PUT ã¯ãæ¢ã«ãã¡ã€ã«ãååšããå Žåã¯ãã¡ã€ã«ã圢æããŸããããã«ãPUT ã¯åªçæ§ãããããã¡ã€ã«ã®äœ¿çšé »åºŠã«ã¯ãŸã 圱é¿ããªãããšã瀺åããŠããŸãã
- POST - åå¥ã®çµ±äžãªãœãŒã¹èå¥å (URI) ã«ããŒã¿ãéä¿¡ããããã«ãããªãœãŒã¹ ãã¡ã€ã«ãèŠæ±ã管çããããšãæåŸ ããŸãããã®æç¹ã§ãWeb ãµã€ã ãµãŒããŒã¯ãéžæããããã¡ã€ã«ã®ã³ã³ããã¹ãã§ããŒã¿ã䜿çšããŠäœãã§ããããæ±ºå®ã§ããŸããããã«ãPOST æŠç¥ã¯ã¹ãçã§ã¯ãããŸãããã€ãŸãã2 å以äžäœ¿çšãããšãæ°ãããã¡ã€ã«ã®çæãåéãããŸãã
ã¢ããªã·ã㯠SOA ãšãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã®éãã¯äœã§ãã?
ã¢ããªã·ã㯠ã¢ããªã¯ãéçºé床ãéåžžã«é ããçžäºæ¥ç¶ãããåå²ã§ããªããŠãããã§æ§æãããŠããŸããå°èŠæš¡ã§æå°éã«æ¥ç¶ããããµãŒãã¹ã SOA ãæ§æããŸããããããéçºãå¶éãããŠããŸãã
ãã€ã¯ã ãµãŒãã¹ã¯ãéåžžã«å°ãããçã«æ¥ç¶ãããã¹ã¿ã³ãã¢ãã³ ãµãŒãã¹ã§ãããå埩çãªéçºãµã€ã¯ã«ãè¿ éã§ãã
URIãšã¯ïŒ
Uniform resource identifier 㯠URI ãšåŒã°ããŸãã REST ã® URI ã¯ãWeb ãµãŒããŒã®ãªãœãŒã¹ãæå®ããæååã§ããåãªãœãŒã¹ã«ã¯åå¥ã® URI ããããHTTP èŠæ±ã§äœ¿çšããããšãã¯ã©ã€ã¢ã³ãã¯ãããã¿ãŒã²ããã«ããŠã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸããã¢ãã¬ãã·ã³ã°ã¯ãURI ã䜿çšããŠãªãœãŒã¹ã«ãã©ãã£ãã¯ãéä¿¡ããããã»ã¹ã§ãã
URI ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
<ãããã³ã«>://<ãµãŒãã¹å>/<ãªãœãŒã¹ã¿ã€ã>/<ãªãœãŒã¹ID>
URIã«ã¯2ã€ã®ã¿ã€ãããããŸã
1. URL - ãã®å Žæããã®ãªãœãŒã¹ã®ååŸã«é¢ããæ å ±ã¯ãUniform Resource Locator ã§å ¥æã§ããŸãã
URL ã«ã¯ããããã¯ãŒã¯ã®ãã¹ãå (sampleServer.com) ãšã³ã³ãã³ããžã®ãã¹ (/samplePage.html) ã«é¢ããæ å ±ãå«ãŸããŠããããããã³ã« (FTPãHTTP ãªã©) ã§å§ãŸããŸãããŸããæ€çŽ¢æ¡ä»¶ãæå®ããããšãã§ããŸãã
2. URN - ç¬ç¹ã§èä¹ æ§ã®ããååã䜿çšããããšã«ãããçµ±äžããããªãœãŒã¹åããªãœãŒã¹ãèå¥ããŸãã
ã€ã³ã¿ãŒãããäžã®ãªãœãŒã¹ã®å Žæã¯ãå¿ ããã URN ã«ãã£ãŠæå®ãããããã§ã¯ãããŸããããããã¯ããªãœãŒã¹ãèå¥ãããšãã«äœ¿çšããä»ã®ããŒãµãŒã®ã¢ãã«ãšããŠæ©èœããŸãã
URN ãããã¥ã¡ã³ããèå¥ãããã³ã«ãããªãŸã«ããŒãã䜿çšããŠãã°ãã URL ã«å€æããããŠã³ããŒãã§ããããã«ããŸãã
RESTful Web ãµãŒãã¹ã®æ©èœã¯äœã§ãã?
ãããã®æ©èœã¯ããã¹ãŠã® RESTful Web ãµãŒãã¹ã«ååšããŸãã
- ã¯ã©ã€ã¢ã³ã ãµãŒããŒéä¿¡ã¢ãã«ã¯ããµãŒãã¹ã®åºç€ã§ãã
- ãã®ãµãŒãã¹ã¯ãHTTP ãããã³ã«ã䜿çšããŠãããŒã¿/ãªãœãŒã¹ã®ãã§ãããã¯ãšãªã®å®è¡ãããã³ãã®ä»ã®ã¿ã¹ã¯ãå®è¡ããŸãã
- ãã¡ãã»ãŒãžã³ã°ãã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®éä¿¡ã«äœ¿çšãããæ¹æ³ã§ãã
- ãµãŒãã¹ã¯ãURI ã䜿çšããŠãªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
- ããã¯ãã¯ã©ã€ã¢ã³ãã®èŠæ±ãšå¿çãä»ã«äŸåããªããšããã¹ããŒãã¬ã¹ã®èãæ¹ã«æºæ ããŠãããããå¿ èŠãªããŒã¿ãååŸããããšããå®å šãªç¢ºå®æ§ãæäŸããŸãã
- åãã¿ã€ãã®ç¹°ãè¿ãèŠæ±ã«å¯ŸãããµãŒããŒåŒã³åºããæžããããã«ããããã®ãµãŒãã¹ã¯ãã£ãã·ã³ã°ã®èãæ¹ãæ¡çšããŠããŸãã
- ãããã®ãµãŒãã¹ã¯ãSOAP ãµãŒãã¹ã䜿çšã㊠REST ã¢ãŒããã¯ã㣠ãã¿ãŒã³ãå®è£ ããããšãã§ããŸãã
HTTP ã¹ããŒã¿ã¹ ã³ãŒããšã¯äœã§ãã?
HTTP ã¹ããŒã¿ã¹ã§äœ¿çšãããæšæºã³ãŒãã¯ã確ç«ããããµãŒã㌠ã¿ã¹ã¯ã®å®äºã¹ããŒã¿ã¹ã«å¯Ÿå¿ããŠããŸããããšãã°ãHTTP ã¹ããŒã¿ã¹ 404 ã¯ãèŠæ±ããããªãœãŒã¹ããµãŒããŒã«ãªãããšã瀺ããŸãã

HTTP ã¹ããŒã¿ã¹ ã³ãŒããèŠãŠããã®æå³ãçè§£ããŸãããã
- 200 - OKãæåã¯æããã§ãã
- 201 - POST ãŸã㯠PUT ãªã¯ãšã¹ãããªãœãŒã¹ãæ£åžžã«äœæãããšãå¿çã³ãŒã㯠201 - CREATED ã«ãªããŸãã location ããããŒã䜿çšããŠãæ°ããçæããããªãœãŒã¹ã« URL ãè¿ããŸãã
- 304 - æ¡ä»¶ä»ã GET ãªã¯ãšã¹ãã®å Žåããããã¯ãŒã¯åž¯åå¹ ãç¯çŽããããã«ã¹ããŒã¿ã¹ ã³ãŒã 304 NOT MODIFIED ã䜿çšãããŸããå¿çæ¬æã¯ç¡å¹ã§ãªããã°ãªããŸãããæ¥ä»ãå Žæãããã³ãã®ä»ã®æ å ±ã¯ãããããŒã«å«ããå¿ èŠããããŸãã
- 400 - BAD REQUEST ã¯ãããŒã¿ã®æ¬ èœãæ€èšŒãã¹ãªã©ã®ç¡å¹ãªå ¥åãæäŸãããããšã瀺ããŸãã
- 401 - FORBIDDEN ã¯ã管çè æš©éãªãã§ã¢ã¯ã»ã¹ãåé€ãããªã©ã䜿çšãããŠããã¡ãœããã«ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããªãããšã瀺ããŸãã
- 404 - ERROR ã¯ãèŠæ±ãããã¡ãœãããèŠã€ãããªãããšã瀺ããŸãã
- 409 - CONFLICTS ã¡ãœãããå®è¡ããããšãéè€ãããšã³ããªã®æ¿å ¥ãªã©ãç«¶åããåé¡ãããããšã瀺ããŸãã
- 500 - INTERNAL SERVER ERROR ã³ãŒãã¯ãã¡ãœããã®å®è¡äžã«ãµãŒããŒãäŸå€ãã¹ããŒããããšã瀺ããŸãã
RESTful Web ãµãŒãã¹ã®æ¬ ç¹ãæããŠãã ããã
RESTful Web ãµãŒãã¹ã®æ¬ ç¹ã¯æ¬¡ã®ãšããã§ãã
- ã¢ã·ã¹ã¿ã³ãã¯ã¹ããŒãã¬ã¹ã®æŠå¿µã«åºå·ãããããRESTful Web ãµãŒãã¹ã®ã»ãã·ã§ã³ãç¶æããããšã¯ã§ããŸããã
- ã»ãã¥ãªãã£ãšä¿è·ã®å¶éã¯ãREST ã«ãšã£ãŠå¿ é ã§ã¯ãããŸãããäžéšã®ãããã³ã«ã¯ãå®å šä¿è·ã®ããã«äœ¿çšãããŸãããããè¡ããšãSSL/TLS èªèšŒãªã©ãéžæããä¿è·ããã³å®å šåºæºã決å®ããéã«äœ¿çšã§ããèŠåã衚瀺ãããŸãã
SOAP ãš REST ãåºå¥ããŸãã?
SOAP ãš REST ã®éãã¯æ¬¡ã®ãšããã§ãã
ç³é¹ž****äŒã¿SOAP ãšåŒã°ãããããã³ã«ã䜿çšã㊠Web ãµãŒãã¹ãå®è£ ããŸãã REST ã¯ãWeb ãµãŒãã¹ãéçºããããã®ã¢ãŒããã¯ãã£ãŒèšèšãã¿ãŒã³ã§ãSOAP ãæäŸããã¬ã€ãã©ã€ã³ã¯ãå³å¯ã«éµå®ããããšãç®çãšããŠããŸãã REST ã¯åºæºã®æŠèŠã瀺ããŠããŸãããå®å šã«æºæ ããå¿ èŠã¯ãããŸããã SOAP ã¯ã©ã€ã¢ã³ããšãµãŒããŒã¯ãã坿¥ã«é¢é£ããŠããããããã®ç¹ã§å³å¯ãªå¥çŽãæã€ãã¹ã¯ããã ããã°ã©ã ã«å¹æµããŸãã REST ã¯ã©ã€ã¢ã³ãã¯ãã©ãŠã¶ããé©å¿æ§ãé«ããå¿ èŠãªéä¿¡æšæºã«æºæ ããŠããéãããµãŒããŒã®èšèšã«äŸåããŸãããã¯ã©ã€ã¢ã³ããšãµãŒããŒéã® XML 転éã®ã¿ã SOAP ã§ãµããŒããããŠããŸãã XMLãJSONãMIMEãText ãªã©ã®è€æ°ã®ããŒã¿åã REST ã«ãã£ãŠæäŸãããŸãã SOAP èªã¿åãã¯ãã£ãã·ã¥ã§ããŸããREST èªã¿åãã¯ãšãªã¯ãã£ãã·ã¥å¯èœãµãŒãã¹ ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããªãœãŒã¹ ããžãã¯ãå ¬éããããã« SOAP ã«ãã£ãŠäœ¿çšãããŸãããªãœãŒã¹ ããžãã¯ã¯ãURI ã䜿çšã㊠REST ã䜿çšããŠå ¬éãããŸãSOAP ãé ãREST ã®æ¹ãéããããã³ã«ã§ãããããSOAP ã¯ç¬èªã®ã»ãã¥ãªã㣠ãããã³ã«ã確ç«ããŸãã REST ã¯ãå®è£ ãããã³ã«ã«åºã¥ããã»ãã¥ãªãã£å¯Ÿçã®ã¿ãè¡ããŸã SOAP ã¯é »ç¹ã«éžæãããããã§ã¯ãããŸããããã¹ããŒããã«ãªããŒã¿è»¢éãšããé«ãä¿¡é Œæ§ãå¿ èŠãªå Žåã«äœ¿çšãããŸãæè¿ã§ã¯ãã¹ã±ãŒã©ããªãã£ãšä¿å®æ§ãåäžãããããREST ãéçºè ã«å¥œãŸããããšããããããŸãã
HTTP ã¬ã¹ãã³ã¹ã®ã³ã¢ ã³ã³ããŒãã³ããæ§æãããã®ã¯äœã§ãã?
HTTP å¿çã«ã¯ã次㮠4 ã€ã®äž»èŠãªã³ã³ããŒãã³ãããããŸãã
- å¿çã¹ããŒã¿ã¹ ã³ãŒã - ãªãœãŒã¹ ãªã¯ãšã¹ãã«å¯ŸãããµãŒããŒã®ã¹ããŒã¿ã¹ ã³ãŒãã衚瀺ãããŸããäŸ: ã¯ã©ã€ã¢ã³ãåŽã®ãšã©ãŒã¯ 400 ã§è¡šãããæåããåç㯠200 ã§è¡šãããŸãã
- HTTP ããŒãžã§ã³ - HTTP ãããã³ã«ã®ããŒãžã§ã³ã¯ãHTTP ããŒãžã§ã³ã«ãã£ãŠç€ºãããŸãã
- å¿çããã㌠- å¿çã¡ãã»ãŒãžã®ã¡ã¿ããŒã¿ã¯ããã®ã»ã¯ã·ã§ã³ã«å«ãŸããŠããŸããããŒã¿ã¯ãã³ã³ãã³ãã®é·ããçš®é¡ãå¿çæ¥ããµãŒããŒã®çš®é¡ãªã©ãæäŸããããã«äœ¿çšã§ããŸãã
- å¿çæ¬æ - ãµãŒããŒãå®éã«è¿ãããªãœãŒã¹ãŸãã¯ã¡ãã»ãŒãžã¯ãå¿çæ¬æã«å«ãŸããŠããŸãã
WebSocket ãš REST ã®éãã¯äœã§ãã?
以äžã«ã WebSocket ãš REST ã®éããããã€ã瀺ããŸãã
REST 㯠CRUD æäœã«åºã¥ããŠããŸãããWebSocket ã¯åºæ¬çãªãã©ã³ã¹ããŒã ã¡ã«ããºã ã§ãããœã±ãããšããŒãã®æŠå¿µã«åºã¥ããäœã¬ãã«ã®ãããã³ã«ã§ãã
RESTful ã¢ããªã±ãŒã·ã§ã³ã¯ãåè©ãš HTTP ã«åºã¥ããŠæäœãèšèšããå¿ èŠããããŸãããWebSocket ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®äžäœã¬ãã«ã®è©³çްã§ãã IP ã¢ãã¬ã¹ãšããŒãæ å ±ã䜿çšããå¿ èŠããããŸãã WebSocket ã¯ã¹ããŒããã« ãããã³ã«ã§ãããREST ã¯ã¹ããŒãã¬ã¹ ãããã³ã«äžã«æ§ç¯ãããŠããŸããã€ãŸããã¯ã©ã€ã¢ã³ãããµãŒããŒããäºããèªèããå¿ èŠã¯ãããŸããã
æ°Žå¹³æ¹åã«ã¹ã±ãŒãªã³ã°ã§ãã HTTP ã«åºã¥ã REST ãšã¯å¯Ÿç §çã«ãWebSocket æ¥ç¶ã¯åäžãµãŒããŒäžã§åçŽæ¹åã«ã¹ã±ãŒãªã³ã°ã§ããŸãã REST ããŒã¹ã®éä¿¡ã¯æ¯èŒçé«äŸ¡ã§ãããWebSocket éä¿¡ã¯å®äŸ¡ã§ãã
REST ã«ãã©ã³ã¹ããŒãå±€ã»ãã¥ãªã㣠(TLS) ãå®è£ ã§ããŸãã?
ã¯ããã§ããŸãïŒ REST ã§ã®ã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã®é信㯠TLS ã䜿çšããŠæå·åãããŸããããã«ããããµãŒããŒã確èªããæ©èœããŠãŒã¶ãŒã«æäŸãããŸãããã㯠Secure Socket Layer (SSL) ã«åã£ãŠä»£ããããããŠãŒã¶ãŒãšãµãŒããŒéã®å®å šãªéä¿¡ã®åœ¢åŒã§ãã HTTPS 㯠Secure Socket Layer (SSL) ããã³ Transport Layer Security (TLS) ãšããŸãæ©èœãããããRESTful Web ãµãŒãã¹ãäœæãããšãã«åœ¹ç«ã¡ãŸããããã§ãREST ã䜿çšãããããã³ã«ã®åŽé¢ã«é¢ä¿ããŠããããšã«æ³šæããããšãéèŠã§ãããããã£ãŠãå®å šä¿è·ã¯ REST ã®ãããã³ã«ã«äŸåããŠããŸãã
POST ã¡ãœããã§éä¿¡ã§ãããã€ããŒãã®æå€§ãµã€ãºã¯?
ãã¹ãæ¹åŒã§éã¹ããã€ããŒãã®å€§ããã¯çè«äžç¡å¶éã§ãããã ãããã€ããŒãã倧ããã»ã©åž¯åå¹ ãæ¶è²»ããåŠçã«æéããããããµãŒããŒã®å¿çæ§ã«åœ±é¿ããããšã«æ³šæããŠãã ããã
JAX-RS API ã«ååšããäž»èŠãªæ³šéãäžèŠ§è¡šç€ºãã
- ãã¹ - ããã¯ãREST ãªãœãŒã¹ã®çžå¯Ÿ URI (Uniform Resource Identifier) ãã¹ã®è©³çްã瀺ããŸãã
- GET - ãªã¯ãšã¹ã ã¡ãœããã®ãã®æå®åã¯ãHTTP GET ã«å¯Ÿå¿ããŸãã GET ã¯ãšãªãåŠçããŸãã
- POST - ãªã¯ãšã¹ã ã¡ãœããã®ãã®æå®åã¯ãHTTP POST ã«å¯Ÿå¿ããŸãã圌ã㯠POST åãåããã«å¯ŸåŠããŸãã
- PUT - ãªã¯ãšã¹ã ã¡ãœããã®ãã®æç€ºåã¯ãHTTP PUT ãªã¯ãšã¹ãã«å¯Ÿå¿ããŸãã圌ãã¯PUTã®åãåãããæ±ããŸãã
- DELETE - HTTP DELETE ã«äœ¿çšããããªã¯ãšã¹ã ã¡ãœããã®æå®åãšããŠå®çŸ©ãããŸããããã㯠DELETE èŠæ±ãåŠçããŸãã
- HEAD - ãªã¯ãšã¹ã ã¡ãœããã®ãã®æå®åã¯ãHTTP HEAD ã«å¯Ÿå¿ããŸãã圌ãã¯HEADã®åãåããã«å¯ŸåŠããŸãã
- PathParam - éçºè ã¯ããã® URI (Uniform Resource Identifier) ãã¹ ãã©ã¡ãŒã¿ãŒã䜿çšããŠããªãœãŒã¹ ã¯ã©ã¹/ã¡ãœããã® URI ãããã©ã¡ãŒã¿ãŒãæœåºã§ããŸãã
- QueryParam - ãªãœãŒã¹ ã¯ã©ã¹/ã¡ãœããã¯ãéçºè ããã® URI (Uniform Resource Identifier) ã¯ãšãª ãã©ã¡ãŒã¿ãŒã䜿çšã㊠URI (Uniform Resource Identifier) ããæœåºãããããã®ã¯ãšãªã䜿çšã§ããŸãã
- ãããã¥ãŒã¹ - äœæããããŠãŒã¶ãŒã«è¿ä¿¡ãšããŠéä¿¡ããã MIME ãªãœãŒã¹ ãã¬ãŒã³ããŒã·ã§ã³ãããã§æå®ãããŸãã
- æ¶è²» - ããã¯ããµãŒããŒããŠãŒã¶ãŒããããããåãåããšãã«åãå ¥ããã䜿çšãã MIME ãªãœãŒã¹ ãã¬ãŒã³ããŒã·ã§ã³ã®è©³çްã瀺ããŸãã
Spring ã§ RestTemplate ãå®çŸ©ãã
ãŠãŒã¶ãŒã RESTful ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã®äž»èŠãªã¯ã©ã¹ã¯ãRestTemplate ãšåŒã°ããŸãã RESTå¶éãå©çšããŠããµãŒããŒãšã®éä¿¡ãè¡ããŸããããã¯ãJdbcTemplate ã HibernateTemplate ãªã©ãSpring ãæäŸããããŸããŸãªãã³ãã¬ãŒã ã»ã¯ã·ã§ã³ã«çžåœããŸãã RestTemplate ã¯ã¡ãœããã« (Uniform Resource Identifier ) URI ãã³ãã¬ãŒããURI (Uniform Resource Identifier) ãã¹ ãã©ã¡ãŒã¿ãèŠæ±/å¿çã®çš®é¡ãèŠæ±ãªããžã§ã¯ããªã©ã䜿çšããŠéä¿¡ããæ©èœãæäŸããŸããGET ãªã©ã® HTTP ã¡ãœããã®é«ã¬ãã«ã®å®è£ ã®è©³çްãæäŸããŸãã ãPOSTãPUT ãªã©ã
Spring 4.3 ã®ãã®ã»ã¯ã·ã§ã³ã§ã¯ã@GetMappingãPutMappingã@PostMapping ãªã©ã®ãã䜿çšãããã¢ãããŒã·ã§ã³ãæäŸããŸãããã®åã«ãSpring 㯠@RequestMapping è§£éãæäŸããŠã䜿çšãããã¡ãœãããæå®ããŸãã
@RequestMapping ã®çšéã¯äœã§ãã?

-
ãªã¯ãšã¹ãã¯ãã¢ãããŒã·ã§ã³ã䜿çšããŠç¹å®ã®ãã³ãã© ã¡ãœããã«ããããããŸãã
-
Dispatcher Servlet ã¯ãSpring ã§ãã¹ãŠã®åä¿¡ Web ã¢ããªã±ãŒã·ã§ã³ ã«ãŒãã£ã³ã°ã管çããŸãããªã¯ãšã¹ããã³ãã©ãŒã䜿çšããããšã§ããªã¯ãšã¹ããåä¿¡ãããšãã«ãªã¯ãšã¹ããåŠçããã³ã³ãããŒã©ãŒã決å®ããŸãã @Controller ã¢ãããŒã·ã§ã³ãæã€ãã¹ãŠã®ã¯ã©ã¹ã¯ãDispatcher Servlet ã«ãã£ãŠã¹ãã£ã³ãããŸãã
ã³ã³ãããŒã©ãŒã®ã¡ãœãããšã¯ã©ã¹å ã§å®çŸ©ããã @RequestMapping ã¢ãããŒã·ã§ã³ã¯ããªã¯ãšã¹ã ã«ãŒãã£ã³ã° ããã»ã¹ã«äžå¯æ¬ ã§ãã
Web API ãéçºãŸãã¯ãã¹ãããããã®ããŒã«ãŸã㯠API ãåæãã
PostmanãSwagger ãªã©ã®ããŸããŸãªããŒã«ã䜿çšããŠãRESTful Web ãµãŒãã¹ããã¹ãã§ããŸãã Postman ã«ã¯ããšã³ããã€ã³ãã«èŠæ±ãéä¿¡ããæ©èœãJSON ãŸã㯠XML ã«å€æã§ããå¿çã衚瀺ããæ©èœãããããŒãã¯ãšãª ãã©ã¡ãŒã¿ãŒãªã©ã®èŠæ±ãã©ã¡ãŒã¿ãŒãå¿çããããŒãåæããæ©èœãªã©ãå€ãã®æ©èœããããŸãã Postman ãšåæ§ã«ãSwagger ã¯å€æ°ã®æ©èœãš ãšã³ããã€ã³ã ãææžåããæ©èœãæäŸããŸãã Jmeter ãªã©ã®ããŒã«ã䜿çšããŠãAPI ã®ããã©ãŒãã³ã¹ãšè² è·ããã¹ãããããšãã§ããŸãã
ãã£ãã·ã³ã°ãšã¯ïŒ
ãµãŒããŒå¿çããã£ãã·ã¥ããããšãåãå¿çãå床çæãã代ããã«ãå¿ èŠã«å¿ããŠæ°ããã³ããŒãå©çšã§ããããã«ä¿åãããŸãããã®ææ³ã¯ããµãŒããŒã®è² æ ã軜æžããã ãã§ãªããããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ãåäžãããŸããå¿çã¯ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠã®ã¿ãçæéã ããã£ãã·ã¥ã§ããŸãã
ãªãœãŒã¹ã®ããããŒãšç°¡æœãªèª¬æã以äžã«å«ãŸããŠããããããã£ãã·ã³ã°æé ã§ããããèå¥ã§ããŸãã
- ãªãœãŒã¹ãäœæãããæ¥æ
- éåžžãææ°ã®æ å ±ãä¿æãããªãœãŒã¹æŽæ°ã®æ¥æ
- ãã£ãã·ã¥å¶åŸ¡ã®ããããŒ
- ãã£ãã·ã¥ããããªãœãŒã¹ãåäœã忢ããæ¥æ
- ãªãœãŒã¹ããã§ããããããšãã®éå§ç¹ã確ç«ãã幎霢
REST API ãåŠã¶ã®ã«æé©ãªãªãœãŒã¹ã¯äœã§ãã?
Web ãµã€ããã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ãéçº ããããã® REST API ãåŠç¿ããããã®å©çšå¯èœãªãªãœãŒã¹ã倿°ãããŸããäžäœ5äœã¯ä»¥äžã®éãã
RESTful Web ãµãŒãã¹
API ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®éçºãéå§ããã«ã¯ãLeonard Richardson ã«ãã RESTful Web Services wonder ãšåŒã°ãããã®ã¬ã€ãããã¯ãããã®ç¹ã§éåžžã«åœ¹ç«ã¡ãŸããç¹ã«åå¿è ã§ãRepresentational State Transfer (REST) Web ãµã€ã ãµãŒãã¹ã®åºæ¬ãçè§£ãããå Žåããã®ãªãœãŒã¹ã¯ãRepresentational State Transfer (REST) ãã©ã®ããã«æ©èœããããããã³ä»ã®è€æ°ã®éèŠãª Web é¢é£ãµãŒãã¹ãäŸãšãšãã«æããã«ããŸãããããã¯ç¹å®ã®ããã°ã©ãã³ã°èšèªã«åºã¥ããŠããããã§ã¯ãªããããRESTful API ã®çè§£ã¯ã©ã®ããã°ã©ãã³ã°èšèªã«ãéå®ãããŸããã
REST API ãã¥ãŒããªã¢ã«
REST API ãã¥ãŒããªã¢ã«ã¯ãæ¬ãèªæžå®¶ã§ãªãå Žåã« Representational State Transfer (REST) ãåŠç¿ããããã®åªãããªã³ã©ã€ã³ ãªãœãŒã¹ã§ãããã®ãªãœãŒã¹ã¯ãREST ãæåããæåŸãŸã§åŠç¿ããã®ã«åœ¹ç«ã¡ããã¹ãŠã®åºæ¬çãªåŽé¢ãã«ããŒããŠããŸãããã®ãã¥ãŒããªã¢ã«ã¯ãRepresentational State Transfer (REST) ã®ç޹ä»ããå§ãŸããHTTP é¢é£ã®æŠç¥ãšç¥èãªã©ã«é¢ããäŸã®ãã¹ããã©ããŸãã
REST API èšèšã«ãŒã«ããã¯
ããã¯ãRepresentational State Transfer (REST) ã¬ã€ãã³ã¹ã®åªãããªãœãŒã¹ ããã¯ã§ããããŸããæ¬ã®èè ã§ãã Mark Masse ã¯ãREST API ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã®ã«åœ¹ç«ã£ãçµéšãšæŠç¥ãäŒããŠããŸãããã®ãªãœãŒã¹ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ URI ãèæ¡ããããã®ãã©ã¯ãã£ã¹ãHTTP ããããŒãä»ããŠã¡ã¿ããŒã¿ãéä¿¡ããããã®ã¢ãããŒããããã³äœ¿çšã§ããã¡ãã£ã¢ã®çš®é¡ã«ã€ããŠèª¬æããŸãããããã«ãHTTP ã®éä¿¡ã¡ãœãããšå¿çã¹ããŒã¿ã¹ ã³ãŒãã®èšèšã«ã©ã®ããã«é©æ°ãå ãããã
API ããããã㌠ãŠã£ãŒã¯ãªãŒ ãã¥ãŒã¹ã¬ã¿ãŒ
API ããããã㌠ãŠã£ãŒã¯ãªãŒ ãã¥ãŒã¹ã¬ã¿ãŒãšããçŽ æŽããããªãœãŒã¹ããããŸãã Web ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãšã¢ãã€ã« ã¢ããªã® API æè¡ãæ§é ãæ¡åŒµãããã³ã¢ãŒããã¯ãã£ã«éåžžã«éäžããŠãããããRESTful API ãåŠç¿ããããã®ææ°ã®ãªãœãŒã¹ã§ãããã®ãã¥ãŒã¹ã¬ã¿ãŒã¯ãéçºè ããããžã§ã¯ã ãããŒãžã£ãŒãã¢ãŒããã¯ãåãã«ç¹å¥ã«äœæãããŠããŸãã
å®å¿ããŠãã ãã
ããã¯ãJava ãšåŒã°ãã 1 ã€ã®ããã°ã©ãã³ã°èšèªã®çµéšããã人ã«ãšã£ãŠã¯å¹žéãªããªãŒãã³ãœãŒã¹ã® REST ãã¹ã ã¡ãã£ã¢ã§ãããã®ãªãœãŒã¹ã¯ãRESTful API ããã»ã¹ã®ãã¹ããšæ€èšŒã®æé ã容æã«ããŸãããŸããREST-Assured ã¯ãè€éãªåå¿ããã¹ãããããã®ãã€ã©ãŒãã¬ãŒã ã³ãŒããäœæããå¿ èŠæ§ãæ ¹çµ¶ããBDD æ§æãæ¯æŽããŸãã
æçã«
çµè«ãšããŠãäžèšã®èšäºã§ã¯ REST API ã€ã³ã¿ãã¥ãŒã®è³ªåãå ±æããŠããŸãã RESTful API ã®ç¥èãå¿ èŠãšããåæ§ã®ä»äºã«å¿åããããšããŠããããŸãã¯å¿åããããšããã人ã®ããã® REST API 颿¥ã®è³ªåããã¹ãŠã«ããŒããŠããŸãããããã¯ã颿¥ã§é¢æ¥å®ãããªãã«å°ããããšãã§ããæãäžè¬çãªè³ªåã§ãããŸããæçµé¢æ¥ãåããåã«ãåè¿°ã®ãªãœãŒã¹ã確èªããŠãã ããã
ããã«ãWeb ãµã€ã ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ã¢ãã€ã« ã¢ããªãæ§ç¯ããå Žåã¯ãAppMaster ãæçµçãªéžæè¢ã«ãªããŸããããã¯ãã³ãŒãã£ã³ã°ã®çµéšãç¥èããªããŠã ããã©ãã° ã¢ã³ã ãããã ã§ç°¡åã«ããããçš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ãã ããŒã³ãŒã ãã©ãããã©ãŒã ã§ãã仿¥ã®ãåŸãªæ å ±ããã§ãã¯ããŠãã ããã


