RESTã¯ããµãŒãã¹ãå€éšã«æ瀺ããããã®äžè¬çãªã¢ãããŒãã«ãªãã€ã€ãããŸãã ãã®äººæ°ã®çç±ã¯ããã®ã·ã³ãã«ãã䜿ãããããHTTPçµç±ã®ã¢ã¯ã»ã¹ãªã©ã§ãã ãããã¯ãŒã¯ãä»ããŠã¢ã¯ã»ã¹å¯èœãªãã¹ãŠã®ããŒã¿ã¯RESTãšèŠãªããããšãã誀解ããããŸãããããã§ã¯ãããŸããã ãã®èšäºã§ã¯ãç¬èªã®RESTã¢ããªã±ãŒã·ã§ã³ãå®è£ ããéã«åžžã«èŠããŠããã¹ãããã€ãã®ãã¹ããã©ã¯ãã£ã¹ã説æããŸãã RESTã¢ããªã±ãŒã·ã§ã³ã§ã®çµéšããèããããã®ã§ããã®èšäºã«èšèŒãããŠããªããã¹ããã©ã¯ãã£ã¹ãç¥ã£ãŠããå Žåã¯ãã³ã¡ã³ãã§å ±æããŠãã ããã
Disclamer ïŒãã¹ãŠã®ãã¹ããã©ã¯ãã£ã¹ã¯ç§ã®å人çãªçµéšã«åºã¥ããŠããŸãã å¥ã®æèŠãããå Žåã¯ãã¡ãŒã«ã§ãæ°è»œã«ãéããã ããããæèŠããå¯ããã ããã
ãã®èšäºã§èª¬æãããã¹ããã©ã¯ãã£ã¹ã®ãªã¹ãã次ã«ç€ºããŸãã
1. URLã®ãšã³ããã€ã³ã-åè©ã§ã¯ãªãåè©
2. è€æ°
3. ããã¥ã¡ã³ã
4. ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³
5. ããŒãžããŒã·ã§ã³
6. SSLã䜿çšãã
7. HTTPã¡ãœãã
8. HTTPå¿çã³ãŒãã®å¹æçãªäœ¿çš
1. URLã®ãšã³ããã€ã³ã-åè©ã§ã¯ãªãåè©
RESTã¢ããªã±ãŒã·ã§ã³éçºè ãç¯ãæãäžè¬çãªééãã®1ã€ã¯ããšã³ããã€ã³ãã®åœåã§ã®åè©ã®äœ¿çšã§ãã ãã ããããã¯ãã¹ããã©ã¯ãã£ã¹ã§ã¯ãããŸããã åè©ã®ä»£ããã«åžžã«åè©ã䜿çšããå¿ èŠããããŸãã
ãµã³ãã«ã¹ã¯ãªããïŒ
ã€ã³ãã®èŸ²å®¶ã«é¢ããæ å ±ãæäŸããREST WebãµãŒãã¹ãéçºããããã«æ³šæããŠããŸãã ãã®ãµãŒãã¹ã«ã¯ã蟲家ã®åå ¥ãäœç©åãèŸ²å Žã®äœæãå蟲家ã«é¢é£ãããã®ä»ã®æ å ±ãªã©ã®æ å ±ãæäŸããæ©èœãå®è£ ããå¿ èŠããããŸãã å蟲家ã«ã¯äžæã®IDããããŸãã
åæ§ã«ãäœç©ãšãã®ææè ã«é¢ããæ å ±ãæäŸãããµãŒãã¹ãå®è£ ããå¿ èŠããããŸãã
ãã¹ããã©ã¯ãã£ã¹ïŒ
ãã¹ãŠã®ã¢ã¯ã·ã§ã³ãæ åœããåäžã®ãšã³ããã€ã³ãããããŸãã 以äžã®äŸã¯ãè¿œå ãæŽæ°ãåé€ãªã©ã®ãã¹ãŠã®æäœã«å¯ŸããŠ1ã€ã®ãšã³ããã€ã³ã/ãã¡ãŒããŒã®ã¿ã瀺ããŠããŸãã åºæ¬å®è£ ã«ã¯ãããŸããŸãªæäœã«å¯ŸããŠæ£ããã«ãŒãã£ã³ã°ãããããŸããŸãªHTTPã¡ãœããããããŸãã
â¢/蟲家
â¢/äœç©
éæšå¥šïŒ
åè©ã®äœ¿çšã¯é¿ããŠãã ããã JSONãXMLãRAMLãªã©ã®åœ¢åŒå ã®æäœãè¡šãããHTTPã¡ãœããã䜿çšããããšããå§ãããŸãã 次ã®èšå·ã¯äœ¿çšããªãã§ãã ããã
â¢/ getFarmers
â¢/ updateFarmers
â¢/ deleteFarmers
â¢/ getCrops
â¢/ updateCrops
â¢/ deleteCrops
2.è€æ°
è€æ°åœ¢ã䜿çšããŠãRESTãµãŒãã¹ã«ååãä»ããŸãã ããã¯ãRESTãã¶ã€ããŒéã§è°è«ããããã®ãã1ã€ã®ããããããã¯ã§ãããµãŒãã¹ã®åäžåè©ãŸãã¯è€æ°åè©ã®éžæã§ãã
ãã¹ããã©ã¯ãã£ã¹ïŒ
â¢/蟲家
â¢/蟲家/ {farmer_id}
â¢/äœç©
â¢/ crops / {crop_id}
éæšå¥šïŒ
â¢/蟲家
â¢/蟲家/ {farmer_id}
泚ïŒ
è€æ°åœ¢ã䜿çšããããšããã¹ããã©ã¯ãã£ã¹ã§ããããšã«èšåããŸãããäœããã®çç±ã§ãåæ°åœ¢ã«åºå·ããå Žåã¯ããã¹ãŠã®ãµãŒãã¹ã§ããã«åºå·ããŸãã è€æ°åœ¢ãšåæ°åœ¢ãçµã¿åãããŠäœ¿çšââããªãã§ãã ããã ãããã£ãŠãç§ã¯ããã§æªãç¿æ £ã«ã€ããŠè©±ããŠããã®ã§ã¯ãªããåã«ããã¯ãå§ãã§ããªããšèšã£ãŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã«æé©ãªæ¹æ³ãèªåã§æ±ºå®ããŠãã ããã
3.ããã¥ã¡ã³ã
ãœãããŠã§ã¢ã®ããã¥ã¡ã³ãã¯ããã¹ãŠã®éçºè ã«ãšã£ãŠäžè¬çãªæ £è¡ã§ãã RESTã¢ããªã±ãŒã·ã§ã³ãå®è£ ãããšãã¯ããã®ãã©ã¯ãã£ã¹ã«åŸãå¿ èŠããããŸãã æçšãªããã¥ã¡ã³ããäœæãããšãä»ã®éçºè ãã³ãŒããç解ããã®ã«åœ¹ç«ã¡ãŸãã
RESTã¢ããªã±ãŒã·ã§ã³ãããã¥ã¡ã³ãåããæãäžè¬çãªæ¹æ³ã¯ããšã³ããã€ã³ãããªã¹ããããããã¥ã¡ã³ãã䜿çšããŠãããããã®æäœã®ãªã¹ããèšè¿°ããããšã§ãã ãããèªåçã«è¡ãããšãå¯èœã«ããå€ãã®ããŒã«ããããŸãã
以äžã¯ãRESTãµãŒãã¹ã®ææžåã«åœ¹ç«ã€ã¢ããªã±ãŒã·ã§ã³ã§ãã
⢠DRFããã¥ã¡ã³ã
⢠Swagger
⢠é€èå Ž
ã³ã¡ã³ãã§ã¢ããªã±ãŒã·ã§ã³ãææžåããçµéšãå ±æããŠãã ããã
4.ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³
ãœãããŠã§ã¢ã¯æéã®çµéãšãšãã«éçºãããŸãã ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®äž»èŠãªå€æŽã«ç°ãªãããŒãžã§ã³ãå¿ èŠã«ãªãå ŽåããããŸãã ã¢ããªã±ãŒã·ã§ã³ã®RESTããŒãžã§ã³ã«é¢ããŠã¯ãRESTéçºè ã³ãã¥ããã£ã§æã話é¡ã«ãªã£ãŠãããããã¯ã®1ã€ã«ãªããŸãã
RESTã¢ããªã±ãŒã·ã§ã³ãããŒãžã§ã³ç®¡çããã«ã¯ã2ã€ã®äžè¬çãªæ¹æ³ããããŸãã
1. URIããŒãžã§ã³ã
2.ãã«ãã¡ãã£ã¢ããŒãžã§ã³ã
ããŒãžã§ã³URIïŒ
URIããŒãžã§ã³ãã©ã®ããã«èŠãããã®ç°¡åãªäŸïŒ
ãã¹ã/ v2 /蟲家
ãã¹ã/ v1 /蟲家
URIã䜿çšããããŒãžã§ã³ç®¡çæ¹æ³ã®äž»ãªæ¬ ç¹ã¯æ¬¡ã®ãšããã§ãã
- æ¢åã®URIã¯å£ããŠããããããã¹ãŠã®ã¯ã©ã€ã¢ã³ããæ°ããURIã«ã¢ããã°ã¬ãŒãããå¿ èŠããããŸãã
- 管ççšã®ããŒãžã§ã³URIã®æ°ãå¢å ãããšãURIã®ããã€ãã®ããŒãžã§ã³ãæ ŒçŽããããã®HTTPãã£ãã·ã¥ã®ãµã€ãºãå¢å ããŸãã å€æ°ã®éè€ããURIãè¿œå ãããšããã£ãã·ã¥ãããã®æ°ã«åœ±é¿ããå¯èœæ§ããããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã
- ããã¯éåžžã«æè»æ§ããªãããªãœãŒã¹ãŸãã¯ãããã®å°ããªã»ãããå€æŽããããšã¯ã§ããŸããã
ãã«ãã¡ãã£ã¢ããŒãžã§ã³ç®¡çæ¹æ³ïŒ
ãã®ã¢ãããŒãã§ã¯ãåãªã¯ãšã¹ãã®ããããŒã§ããŒãžã§ã³æ å ±ãéä¿¡ããŸãã ãã«ãã¡ãã£ã¢URIã®ã¿ã€ããšèšèªãå€æŽãããšãã¯ãããããŒã«åºã¥ããŠã³ã³ãã³ããèŠãããšã«é²ã¿ãŸãã ãã®æ¹æ³ã¯ãRESTã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ç®¡çã«æãé©ãããªãã·ã§ã³ã§ãã
ããããŒæ å ±ã®äŸïŒ
GET /ã¢ã«ãŠã³ã/ 5555 HTTP / 1.1
æ¿è«ŸïŒapplication / vnd.farmers.v1 + json
HTTP / 1.1 200 OK
ã³ã³ãã³ãã¿ã€ãïŒapplication / vnd.farmers.v1 + json
ãã«ãã¡ãã£ã¢ããŒãžã§ã³ç®¡çã¢ãããŒãã§ã¯ãã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã«èŠæ±ããããŒãžã§ã³ãéžæã§ããŸãã ãã®æ¹æ³ã¯URIã¢ãããŒããããæãŸããããã«èŠããŸãããããããŒãä»ããŠæž¡ãããç°ãªãããŒãžã§ã³ã®èŠæ±ããã£ãã·ã¥ããå Žåã«åé¡ãçºçããŸãã ç°¡åã«èšãã°ãã¯ã©ã€ã¢ã³ããURIã«åºã¥ããŠãã£ãã·ã¥ããå Žåã¯åçŽã§ããããã«ãã¡ãã£ã¢ã¿ã€ããšããŠããŒã䜿çšããŠãã£ãã·ã¥ãããšè€éããå¢ããŸãã
5.ããŒãžããŒã·ã§ã³
HTTPçµç±ã§å€§éã®ããŒã¿ãéä¿¡ããããšã¯ãå§ãã§ããŸããã 確ãã«ã倧ããªJSONãªããžã§ã¯ããã·ãªã¢ã«åãããšã³ã¹ããé«ããªããããããã©ãŒãã³ã¹ã®åé¡ãçºçããŸãã ãã¹ããã©ã¯ãã£ã¹ã¯ããã¹ãŠã®ã¬ã³ãŒããäžåºŠã«éä¿¡ããã®ã§ã¯ãªããçµæãéšåã«åå²ããããšã§ãã åãŸãã¯æ¬¡ã®ãªã³ã¯ã䜿çšããŠãããŒãžäžã®çµæãåå²ããæ©èœãæäŸããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ããŒãžããŒã·ã§ã³ã䜿çšããå ŽåãããŒãžããŒã·ã§ã³ãªã³ã¯ãæå®ããè¯ãæ¹æ³ã®1ã€ã¯ãHTTPããããŒã®ãªã³ã¯ãªãã·ã§ã³ã䜿çšããããšã§ãã
次ã®ãªã³ã¯ã圹ç«ã¡ãŸãã
6. SSLã䜿çšãã
SSLãå¿ èŠã§ãïŒ RESTã¢ããªã±ãŒã·ã§ã³ã«ã¯åžžã«SSLã䜿çšããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹ã¯äžçäžã®ã©ãããã§ãå®è¡ãããå®å šãªã¢ã¯ã»ã¹ãæäŸããããšããä¿èšŒã¯ãããŸããã ãµã€ããŒç¯çœªã«äŒŽãã€ã³ã·ãã³ãã®å¢å ã«äŒŽããã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã確ä¿ããå¿ èŠããããŸãã
æšæºã®èªèšŒæ€èšŒãããã³ã«ã«ãããã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ä¿è·ã§ããŸãã åºæ¬èªèšŒã¡ã«ããºã ã䜿çšããªãã§ãã ããã ãµãŒãã¹ã®ã»ãã¥ãªãã£ãæ倧éã«é«ããã«ã¯ãOauth1.OaãŸãã¯Oaurh2ã䜿çšããŸãã ææ°ã®æ©èœããããããå人çã«Oauth2ããå§ãããŸãã
7. HTTPã¡ãœãã
ãã¹ãŠã®HTTPã¡ãœããã®ç¹æ§ãç¥ã£ãŠãããšãHTTPã¡ãœããã§ã®æäœã®èšèšã容æã«ãªããŸãã ãã®èšäºã®åã®ã»ã¯ã·ã§ã³ã®1ã€ã§ãæäœããšã«ç°ãªããµãŒãã¹åãèšè¿°ããã®ã§ã¯ãªããæäœã«HTTPã¡ãœããã䜿çšããããšã䞻匵ããŸããã ãã®ã»ã¯ã·ã§ã³ã§ã¯ãäž»ã«åHTTPã¡ãœããã®åäœã«ã€ããŠèª¬æããŸãã
以äžã¯ãHTTPã¡ãœããã䜿çšããåã«æ±ºå®ããå¿ èŠããã2ã€ã®ç¹æ§ã§ãã
- ã»ãã¥ãªãã£ïŒãã®ã¡ãœãããåŒã³åºããŠãããŒã¿ã®ç¶æ ãå€ãããªãå ŽåãHTTPã¡ãœããã¯å®å šã§ãããšèŠãªãããŸãã ããšãã°ãGETã¡ãœããã䜿çšããŠããŒã¿ãååŸããå Žåããã®ã¡ãœããã¯ãµãŒããŒåŽã®ããŒã¿ãæŽæ°ããªããããå®å šã§ãã
- ã¹ãçæ§ïŒåãçããåŸããããšããåããªãœãŒã¹ãäœååŒã³åºããã¯ãã¹ãçãšããŠç¥ãããŠããŸãã ããšãã°ããµãŒããŒäžã®åãããŒã¿ãæŽæ°ããããšãããšãåãããŒã¿ã§è¡ããããã¹ãŠã®èŠæ±ã«å¯ŸããŠå¿çãåãã«ãªããŸãã
ãã¹ãŠã®ã¡ãœãããå®å šã§ã¹ãçã§ãããšã¯éããŸããã 以äžã¯ãRESTã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããã¡ãœãããšãã®ããããã£ã®ãªã¹ãã§ãã

REST HTTPã¡ãœãã
以äžã¯ãåæ¹æ³ã®ç°¡åãªæŠèŠãšãããã®äœ¿çšã«é¢ããæšå¥šäºé ã§ãã
- GETïŒãã®ã¡ãœããã¯å®å šã§ã¹ãçã§ãã äžè¬ã«æ å ±ãæœåºããããã«äœ¿çšãããå¯äœçšã¯ãããŸããã
- POSTïŒãã®ã¡ãœããã¯å®å šã§ãã¹ãçã§ããããŸããã ãã®æ¹æ³ã¯ããªãœãŒã¹ãäœæããããã«æãäžè¬çã«äœ¿çšãããŸãã
- PUTïŒãã®ã¡ãœããã¯ã¹ãçã§ãã ãã®ããããªãœãŒã¹ãæŽæ°ããã«ã¯POSTã®ä»£ããã«ãã®ã¡ãœããã䜿çšããæ¹ãé©åã§ãã ãªãœãŒã¹ãæŽæ°ããããã«POSTã䜿çšããªãã§ãã ããã
- DELETEïŒååã瀺ãããã«ããã®ã¡ãœããã¯ãªãœãŒã¹ãåé€ããããã«äœ¿çšãããŸãã ãã ãããã®ã¡ãœããã¯ãã¹ãŠã®ã¯ãšãªã§ã¹ãçã§ã¯ãããŸããã
- ãªãã·ã§ã³ïŒãã®ã¡ãœããã¯ããªãœãŒã¹ã®æäœã«ã¯äœ¿çšãããŸããã ãã ããã¯ã©ã€ã¢ã³ãããªãœãŒã¹ã§ãµããŒããããŠããä»ã®ã¡ãœãããç¥ããªãå Žåã«åœ¹ç«ã¡ãŸãããã®ã¡ãœããã䜿çšãããšãã¯ã©ã€ã¢ã³ãã¯ãªãœãŒã¹ã®ç°ãªãè¡šçŸãååŸã§ããŸãã
- HEADïŒãã®ã¡ãœããã¯ããµãŒããŒãããªãœãŒã¹ãèŠæ±ããããã«äœ¿çšãããŸãã GETã¡ãœããã«éåžžã«äŒŒãŠããŸãããHEADã¯ãªã¯ãšã¹ããéä¿¡ããããããŒã§ã®ã¿ã¬ã¹ãã³ã¹ãåä¿¡ããå¿ èŠããããŸãã HTTPä»æ§ã«ãããšããã®ã¡ãœããã¯ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã«ããã£ã䜿çšããªãã§ãã ããã
8. HTTPå¿çã³ãŒãã®å¹æçãªäœ¿çš
HTTPã¯ããŸããŸãªå¿çã³ãŒããå®çŸ©ããŠãæäœã«é¢ããããŸããŸãªæ å ±ãã¯ã©ã€ã¢ã³ãã«ç€ºããŸãã RESTã¢ããªã±ãŒã·ã§ã³ã¯ãå©çšå¯èœãªãã¹ãŠã®HTTPã³ãŒããå¹æçã«äœ¿çšããŠãã¯ã©ã€ã¢ã³ããå¿çãé©åã«æ§æã§ããããã«ããŸãã 以äžã¯ãHTTPå¿çã³ãŒãã®ãªã¹ãã§ãã
- 200 OKã¯ãæåããGETãPUTãPATCHãŸãã¯DELETEãžã®å¿çã§ãã ãã®ã³ãŒãã¯POSTã«ã䜿çšãããŸãããäœæã«ã¯ã€ãªãããŸããã
- 201 Created-ãã®ã¹ããŒã¿ã¹ã³ãŒãã¯ãäœæã«ã€ãªããPOSTå¿çã§ãã
- 204ã³ã³ãã³ããªãã ããã¯ãããã£ãè¿ããªãæåãããªã¯ãšã¹ããžã®å¿çã§ãïŒäŸïŒDELETEãªã¯ãšã¹ãïŒ
- 304å€æŽãªãâ HTTPãã£ãã·ã¥ããããŒãåäœããŠãããšãã«ãã®ã¹ããŒã¿ã¹ã³ãŒãã䜿çšããŸãã
- 400 Bad Request-ãã®ã¹ããŒã¿ã¹ã³ãŒãã¯ãããšãã°ããã£ãåæã§ããªãå Žåãªã©ããªã¯ãšã¹ãã®åœ¢åŒãæ£ãããªãããšã瀺ããŸã
- 401 Unauthorized-èªèšŒããŒã¿ãæå®ãããŠããªããç¡å¹ã§ããå Žåã ãã©ãŠã¶ããã¢ããªã±ãŒã·ã§ã³ã䜿çšããå Žåã¯ãèªèšŒãããã¢ãããã¢ã¯ãã£ãã«ããããšã圹ç«ã¡ãŸã
- 403 Forbidden-èªèšŒã¯æåããããèªèšŒããããŠãŒã¶ãŒããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããªãå Žå
- 404 Not found-ååšããªããªãœãŒã¹ãèŠæ±ãããå Žå
- 405 Method Not Allowed-èªèšŒããããŠãŒã¶ãŒã«èš±å¯ãããŠããªãHTTPã¡ãœãããèŠæ±ããããšã
- 410 Gone-ãã®ã¹ããŒã¿ã¹ã³ãŒãã¯ããã®ãšã³ããã€ã³ãã®ãªãœãŒã¹ãå©çšã§ããªããªã£ãããšã瀺ããŸãã å€ãAPIããŒãžã§ã³ã®ä¿è·åçãšããŠåœ¹ç«ã¡ãŸãã
- 415ãµããŒããããŠããªãã¡ãã£ã¢ã¿ã€ãã ãªã¯ãšã¹ãã®äžéšãšããŠééã£ãã³ã³ãã³ãã¿ã€ããæå®ãããå Žå
- 422 Unprocessable Entity-ãšã©ãŒãã§ãã¯ã«äœ¿çš
- 429ãªã¯ãšã¹ããå€ãããŸã-é床å¶éã®ããã«ãªã¯ãšã¹ããæåŠãããå Žå
ãŸãšã
ãã®èšäºããç¬èªã®REST APIã®äœææ¹æ³ãç解ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã 以äžã¯ãREST WebãµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ã«æºãã£ãå人ãšã®ç§ã®çµéšãšè°è«ã«åºã¥ããŠéãããããã¹ããã©ã¯ãã£ã¹ã§ãã
REST APIã®èšèšã«äžçæžåœåãçµãã§ããããã®èšäºãæå³ããªããªããšæããå Žåã¯ããã£ãŒãããã¯ããèãããã ããã ã¢ããªã±ãŒã·ã§ã³ã®ããè¯ãAPIãéçºããããã®ããå®çžŸã®ããæ¹æ³ã§ãã®è°è«ãæŽæ°ããããšæããŸãã
è¯ãèªæžã ããã°ãã芧ããã ãããããšãããããŸãã