1. ð ã¯ããã«
ãããã¯ãšã³ãã£ãŠçµå±äœãããŠããã®ïŒã
ããµãŒããŒã£ãŠäœïŒã
ããªã¯ãšã¹ããšãã¬ã¹ãã³ã¹ã£ãŠããèããã©âŠã
ããã³ããšã³ãåºç€è¬åº§ã«ç¶ããŠãä»åãã㯠ããã¯ãšã³ãéçºã®åºç€ ã解説ããã·ãªãŒãºããå±ãããŸãïŒ
ãã®ã·ãªãŒãºã®ç¹åŸŽïŒ
ç¹å®ã®èšèªã»ãã¬ãŒã ã¯ãŒã¯ã«äŸåããããããã¯ãšã³ãã®èãæ¹ã»æŠå¿µã ãäžå¿ã«è§£èª¬ããŸãã
Pythonã»Node.jsã»Goã»Javaãªã©ãã©ã®èšèªãåŠã¶å Žåã«ã圹ç«ã€å 容ã§ããAIã䜿ãããªããšã³ãžãã¢ã«ãªãããã«ã倧åãªããšã®ã²ãšã€ãšããŠåºç€æŠå¿µã®çè§£ããããŸãã
ããŒã«ã¯å€ãã£ãŠããããªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ããèªèšŒããDBèšèšããšãã£ãæŠå¿µã¯å€ãããŸããã
ãã®ã·ãªãŒãºã§åŠã¶ç¥èã¯ãã©ããªæä»£ã«ãªã£ãŠããã£ãšè²è€ªããªã財ç£ã«ãªããšæããŸãðª
ãã®èšäºãèªãã°ïŒ
- â ããã¯ãšã³ããšããã³ããšã³ãã®åœ¹å²ã®éããããã
- â ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã®ä»çµã¿ãããã
- â ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã®æµããããã
- â ã¹ããŒãã¬ã¹ã»ã¹ããŒããã«ã®éããããã
2. ð€ ããã¯ãšã³ããšã¯ïŒ
äžèšã§èšããš
ããã¯ãšã³ããšã¯ããŠãŒã¶ãŒã«ã¯èŠããªãè£åŽã®åŠçãæ åœããéšåãã§ãã
ããŒã¿ã®ä¿åã»èšç®ã»èªèšŒã»ããžãã¹ããžãã¯ãªã©ãæ åœããŸãã
ã¬ã¹ãã©ã³ã§äŸãããš
ð Webã¢ããªã±ãŒã·ã§ã³ = ã¬ã¹ãã©ã³
ð ããã³ããšã³ã = æ¥å®¢ã»åºå
ã®å
è£
ââ ã客æ§ãçŽæ¥èŠãŠã»è§Šããéšå
ââ ã¡ãã¥ãŒè¡šã»ããŒãã«ã»åºå¡ã®å¯Ÿå¿
ð³ ããã¯ãšã³ã = åšæ¿
ââ ã客æ§ããã¯èŠããªãéšå
ââ 飿ã®ç®¡çã»èª¿çã»åšåº«ç®¡ç
ð æ³šæã®æµãïŒ
ã客æ§ïŒããã³ããšã³ãïŒã泚æ â
åºå¡ãåšæ¿ïŒããã¯ãšã³ãïŒã«äŒãã â
åšæ¿ã§èª¿ç â
åºå¡ãæçãéã¶ â
ã客æ§ã«å±ã
ããã³ããšã³ããšããã¯ãšã³ãã®åœ¹å²åæ
| ããã³ããšã³ã | ããã¯ãšã³ã | |
|---|---|---|
| åãå Žæ | ãã©ãŠã¶ïŒã¯ã©ã€ã¢ã³ãïŒ | ãµãŒã㌠|
| äž»ãªä»äº | èŠãç®ã»æäœæã®æäŸ | ããŒã¿åŠçã»ä¿åã»èšç® |
| æ±ãæè¡ | HTMLã»CSSã»TypeScriptã»React | Pythonã»Node.jsã»Goã»DB ãªã© |
| ãŠãŒã¶ãŒããèŠããã | â èŠãã | â èŠããªã |
| äž»ãªé¢å¿äº | UI/UXã»è¡šç€ºé床 | ããŒã¿ã®æŽåæ§ã»ã»ãã¥ãªãã£ã»åŠçé床 |
3. ð ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã®ä»çµã¿
ãµãŒããŒãšã¯ïŒ
ãµãŒããŒïŒServerïŒãšã¯ããµãŒãã¹ãæäŸããåŽã®ã³ã³ãã¥ãŒã¿ãã§ãã
ãserveïŒæäŸããïŒããšããåèªããæ¥ãŠããŸãã
ã¯ã©ã€ã¢ã³ããšã¯ïŒ
ã¯ã©ã€ã¢ã³ãïŒClientïŒãšã¯ããµãŒãã¹ãåãåãåŽãã§ãã
æ®æ®µäœ¿ã£ãŠãããã©ãŠã¶ã»ã¹ããã¢ããªãã¯ã©ã€ã¢ã³ãã«ããããŸãã
ã¯ã©ã€ã¢ã³ããµãŒããŒã¢ãã«ãšã¯ïŒ
ããµãŒãã¹ãæäŸããåŽïŒãµãŒããŒïŒããšãåãåãåŽïŒã¯ã©ã€ã¢ã³ãïŒãã«åœ¹å²ãåãããããã¯ãŒã¯ã®èšèšã¢ãã«ã®ããšã§ãã
çŸä»£ã®Webã¢ããªã»ã¹ããã¢ããªã»ãªã³ã©ã€ã³ã²ãŒã ãªã©ãã€ã³ã¿ãŒãããã䜿ãã»ãŒãã¹ãŠã®ãµãŒãã¹ããã®ã¢ãã«ã§åããŠããŸãã
身è¿ãªäŸã§çè§£ãã
ð é»è©±ã«äŸãããšïŒ
ã¯ã©ã€ã¢ã³ãïŒããªãïŒãé»è©±ããããïŒãªã¯ãšã¹ãïŒ
â
ãµãŒããŒïŒã³ãŒã«ã»ã³ã¿ãŒïŒã察å¿ãã
â
ãµãŒããŒãåçãè¿ãïŒã¬ã¹ãã³ã¹ïŒ
ð ãã¡ã¹ãããŒãåºã«äŸãããšïŒ
ã¯ã©ã€ã¢ã³ãïŒã客æ§ïŒã泚æããïŒãªã¯ãšã¹ãïŒ
â
ãµãŒããŒïŒåºå¡ã»åšæ¿ïŒãååãæºåãã
â
ãµãŒããŒãååãæž¡ãïŒã¬ã¹ãã³ã¹ïŒ
4. ðš ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®æµã
HTTPã§ã®å®éã®ããåã
Webã¢ããªã§ã¯ HTTPïŒHyperText Transfer ProtocolïŒ ãšããéä¿¡ã®ã«ãŒã«ã«åŸã£ãŠãã¯ã©ã€ã¢ã³ããšãµãŒããŒãããåãããŸãã
ãªã¯ãšã¹ãã®äžèº«
ãªã¯ãšã¹ãã«ã¯ãäœãããŠã»ããããã®æ å ±ãè©°ãŸã£ãŠããŸãã
ãªã¯ãšã¹ãã¯å€§ãã3ã€ã®éšåã§æ§æãããŠããŸãã
â ãªã¯ãšã¹ãã©ã€ã³ïŒæåã®1è¡ïŒ
GET /users/123 HTTP/1.1
â â â
â â ââ HTTPã®ããŒãžã§ã³
â ââ ãã¹ïŒã©ãã«å¯ŸããŠã®æäœãïŒ
ââ ã¡ãœããïŒäœãããããïŒ
â¡ ããããŒïŒè¿œå æ å ±ïŒ
Host: api.example.com â ã¢ã¯ã»ã¹å
ã®ãµãŒããŒå
Authorization: Bearer xxxxx â èªèšŒæ
å ±ïŒãã°ã€ã³æžã¿ãã©ãããªã©ïŒ
â
Bearer = ããã®äººã¯æ£èŠã®ããŒã¯ã³ãæã£ãŠããããšããæå³
xxxxx ã®éšåã«å®éã®ããŒã¯ã³ïŒåèšèïŒãå
¥ã
Content-Type: application/json â éãããŒã¿ã®åœ¢åŒ
⢠ããã£ïŒéä¿¡ããããŒã¿ã»POSTãPUTã®ãšãã«äœ¿ãïŒ
{
"name": "ç°äžå€ªé",
"email": "tanaka@example.com"
}
| èŠçŽ | 説æ | äŸ |
|---|---|---|
| ã¡ãœãã | äœããããã |
GETïŒååŸïŒã»POSTïŒäœæïŒãªã© |
| ãã¹ïŒURLïŒ | ã©ãã«å¯ŸããŠã®æäœã | /users/123 |
| ããã㌠| è¿œå æ å ± | èªèšŒæ å ±ã»ããŒã¿åœ¢åŒãªã© |
| ãã㣠| éä¿¡ããå ·äœçãªããŒã¿ |
{"name": "ç°äžå€ªé"} ãªã© |
ã¬ã¹ãã³ã¹ã®äžèº«
ã¬ã¹ãã³ã¹ã«ã¯ãçµæãã©ãã ã£ãããã®æ å ±ãè©°ãŸã£ãŠããŸãã
â ã¹ããŒã¿ã¹ã©ã€ã³ïŒæåã®1è¡ïŒ
HTTP/1.1 200 OK
â â â
â â ââ ã¹ããŒã¿ã¹ã®èª¬æïŒOKãªãæåïŒ
â ââ ã¹ããŒã¿ã¹ã³ãŒãïŒçµæã衚ã3æ¡ã®æ°åïŒ
ââ HTTPã®ããŒãžã§ã³
â¡ ããããŒïŒã¬ã¹ãã³ã¹ã®è¿œå æ å ±ïŒ
Content-Type: application/json â è¿ãããŒã¿ã®åœ¢åŒ
Cache-Control: no-cache â ãã£ãã·ã¥ã®èšå®
⢠ããã£ïŒå®éã«è¿ãããããŒã¿ïŒ
{
"id": 123,
"name": "ç°äžå€ªé",
"email": "tanaka@example.com"
}
| èŠçŽ | 説æ | äŸ |
|---|---|---|
| ã¹ããŒã¿ã¹ã³ãŒã | çµæã衚ãçªå· |
200ïŒæåïŒã»404ïŒèŠã€ãããªãïŒãªã© |
| ããã㌠| ã¬ã¹ãã³ã¹ã®è¿œå æ å ± | ããŒã¿åœ¢åŒã»ãã£ãã·ã¥èšå®ãªã© |
| ãã㣠| å®éã«è¿ãããããŒã¿ | JSON圢åŒã®ãŠãŒã¶ãŒæ å ±ãªã© |
5. ð¢ ã¹ããŒã¿ã¹ã³ãŒããç¥ãã
ã¹ããŒã¿ã¹ã³ãŒããšã¯ããªã¯ãšã¹ãã®çµæã衚ã3æ¡ã®æ°åãã§ãã
å é ã®æ°åã§ãããŸããªæå³ã決ãŸã£ãŠããŸãã
| ç¯å² | æå³ | ãã䜿ãã³ãŒã |
|---|---|---|
| 2xx | æå |
200 OKã»201 Created
|
| 3xx | ãªãã€ã¬ã¯ã | 301 Moved Permanently |
| 4xx | ã¯ã©ã€ã¢ã³ãåŽã®ãšã©ãŒ |
400 Bad Requestã»401 Unauthorizedã»404 Not Found
|
| 5xx | ãµãŒããŒåŽã®ãšã©ãŒ | 500 Internal Server Error |
ãã䜿ãã¹ããŒã¿ã¹ã³ãŒãäžèЧ
| ã³ãŒã | æå³ | 䜿ãå Žé¢ |
|---|---|---|
200 OK |
æå | ããŒã¿ã®ååŸã»æŽæ°ãæå |
400 Bad Request |
ãªã¯ãšã¹ããäžæ£ | å¿ é é ç®ãè¶³ããªãã»åœ¢åŒãééã£ãŠãã |
401 Unauthorized |
èªèšŒãå¿ èŠ | ãã°ã€ã³ããŠããªã |
403 Forbidden |
ã¢ã¯ã»ã¹çŠæ¢ | ãã°ã€ã³ã¯ããŠãããæš©éããªã |
404 Not Found |
èŠã€ãããªã | æå®ããããŒã¿ã»URLãååšããªã |
500 Internal Server Error |
ãµãŒããŒãšã©ãŒ | ãµãŒããŒåŽã§ãšã©ãŒãçºç |
ð¡ èŠãæ¹ã®ã³ãïŒ
éçºè ç®ç·ïŒãµãŒããŒåŽïŒã§è¡šçŸããŠããŸã
4xx ïŒãããªãïŒã¯ã©ã€ã¢ã³ãïŒã®ããã
5xx ïŒããµãŒããŒïŒç§ãã¡ïŒã®ããã
6. ð ã¹ããŒãã¬ã¹ã»ã¹ããŒããã«ãšã¯ïŒ
ã¹ããŒãã¬ã¹ãšã¯ïŒ
ã¹ããŒãã¬ã¹ïŒStatelessïŒãšã¯ããµãŒããŒãç¶æ ïŒåã®ããåãïŒãèŠããŠããªããä»çµã¿ã§ãã
HTTPã¯ã¹ããŒãã¬ã¹ãªéä¿¡ã§ããããã倧äºãªããšãªã®ã§ãããã ãã§ãèŠããŠãããŸãããã
ãªãHTTPã¯ã¹ããŒãã¬ã¹ïŒ
ç¹ãã£ã±ãªãïŒã¹ããŒããã«ïŒã«ãããšããµãŒããŒã®ã¡ã¢ãªãããã«éçãè¿ããŠãã³ã¯ãã¡ãããã
ðµ ã¹ããŒãã¬ã¹ã®åé¡ïŒ
ãªã¯ãšã¹ãâ ïŒãç§ã¯ãã°ã€ã³æžã¿ã§ãã
â
ãµãŒããŒïŒãã¯ããããããã
â
ãªã¯ãšã¹ãâ¡ïŒãååãè²·ãããã§ãã
â
ãµãŒããŒïŒãããªãã¯èª°ã§ããïŒã
â
ïŒãã£ããã°ã€ã³ããããšãèŠããŠããªãïŒïŒ
ã¹ããŒããã«ã«ããæ¹æ³
å®éã®Webã¢ããªã§ã¯ããã°ã€ã³ç¶æ ãèŠããŠãããå¿ èŠããããŸãããã®ããã®ä»çµã¿ãå¿ èŠã§ãã
| æ¹æ³ | ä»çµã¿ |
|---|---|
| ðª Cookie | ãã©ãŠã¶ã«æ å ±ãä¿åãããå ¥ãç©ã |
| ð ã»ãã·ã§ã³ | ãµãŒããŒåŽã«ç¶æ ãä¿åããä»çµã¿ïŒå€ãã¯Cookieã«ã»ãã·ã§ã³IDã ãæž¡ãæ¹æ³ãæ¡çšïŒ |
| ð ããŒã¯ã³ïŒJWTçïŒ | ã¯ã©ã€ã¢ã³ãåŽã«ç¶æ ã®æ å ±èªäœãæããã |
ããããã®ä»çµã¿ã詳ããèŠãŠã¿ãŸãããã
ðª Cookie
ãã©ãŠã¶ã«ãå°ããªããŒã¿ããä¿åããä»çµã¿ã
äŸïŒã·ã§ããã³ã°ãµã€ãã§ãã«ãŒãã®äžèº«ããä¿æãã
â ãã©ãŠã¶åŽã«æ
å ±ãä¿åããŠãã
â æ¬¡åã¢ã¯ã»ã¹æã«èªåã§éä¿¡ããã
ð ã»ãã·ã§ã³
ãµãŒããŒåŽã«ç¶æ
ãä¿åããä»çµã¿ã
ãã©ãŠã¶ã«ã¯ãã»ãã·ã§ã³IDïŒåèšèïŒãã ããCookieã§æž¡ãã
ãæµãã
â ãã°ã€ã³æå
â
â¡ ãµãŒããŒããã»ãã·ã§ã³æ
å ±ããä¿å
ïŒããŠãŒã¶ãŒID:123 ããã°ã€ã³äžããªã©ïŒ
â
⢠ãã©ãŠã¶ã«ãã»ãã·ã§ã³ID: abc123ããCookieã§æž¡ã
â
⣠次åãªã¯ãšã¹ãæã«ã»ãã·ã§ã³IDãéã
â
†ãµãŒããŒãIDãããšã«ã»ãã·ã§ã³æ
å ±ãç
§å
â å®éã®ããŒã¿ã¯ãµãŒããŒã管çã»ãã©ãŠã¶ã¯IDã ãæã€
ð ããŒã¯ã³ïŒJWTçïŒ
ã¯ã©ã€ã¢ã³ãåŽã«ãç¶æ
ã®æ
å ±èªäœããæãããä»çµã¿ã
ãæµãã
â ãã°ã€ã³æå
â
â¡ ãµãŒããŒããããŒã¯ã³ããçæããŠè¿ã
ïŒããŠãŒã¶ãŒID:123ã»æå¹æé:24hããªã©ãæå·åããæååïŒ
â
⢠ã¯ã©ã€ã¢ã³ããããŒã¯ã³ãä¿åïŒlocalStorageçïŒ
â
⣠次åãªã¯ãšã¹ãæã«ããããŒã«ä»ããŠéã
Authorization: Bearer xxxxx
â
†ãµãŒããŒãããŒã¯ã³ãæ€èšŒããã ãã§OK
ïŒã»ãã·ã§ã³æ
å ±ããµãŒããŒã§ç®¡çããªããŠããïŒïŒ
â ãµãŒããŒã¯ç¶æ
ãä¿åããªã â ã¹ã±ãŒã«ãããã
第ååïŒèªèšŒã»èªå¯ã®åºç€ïŒã§è©³ãã解説ããŸãïŒ
ãªãã¹ããŒãã¬ã¹ãåºæ¬ãªã®ã
| ã¡ãªãã | 説æ |
|---|---|
| ð ã¹ã±ãŒã«ãããã | ãµãŒããŒãå¢ãããŠãåé¡ãªãåãïŒã©ã®ãµãŒããŒã察å¿ããŠãåãïŒ |
| ð§ ã·ã³ãã« | ãµãŒããŒåŽã§è€éãªç¶æ 管çãããªããŠãã |
| ð é害ã«åŒ·ã | 1ã€ã®ãµãŒããŒãèœã¡ãŠãä»ã®ãµãŒããŒã§å¯Ÿå¿ã§ãã |
ðïž ããã¯ãšã³ããæ åœããäž»ãªä»äº
å ·äœäŸïŒECãµã€ãã®æ³šæåŠç
â ã¯ã©ã€ã¢ã³ãïŒããã®ååãæ³šæãããããšãªã¯ãšã¹ã
â
â¡ ããã¯ãšã³ãïŒèªèšŒç¢ºèªããã®ãŠãŒã¶ãŒã¯ãã°ã€ã³æžã¿ãïŒã
â
⢠ããã¯ãšã³ãïŒåšåº«ç¢ºèªãååã®åšåº«ã¯ãããïŒã
â
⣠ããã¯ãšã³ãïŒéé¡èšç®ãçšèŸŒã¿äŸ¡æ Œã»éæãèšç®ã
â
†ããã¯ãšã³ãïŒDBä¿åãæ³šæããŒã¿ãããŒã¿ããŒã¹ã«ä¿åã
â
⥠ããã¯ãšã³ãïŒã¡ãŒã«éä¿¡ãæ³šæç¢ºèªã¡ãŒã«ãéãã
â
⊠ã¯ã©ã€ã¢ã³ãïŒã泚æå®äºããŸããããšããã¬ã¹ãã³ã¹ãåãåã
ãã®ããã«ãããã¯ãšã³ãã¯ãç®ã«èŠããªãå€ãã®åŠçããæ åœããŠããŸãã
7. ð¯ ãŸãšã
| æŠå¿µ | äžèšã§èšããš |
|---|---|
| ð¥ïž ããã¯ãšã³ã | ãŠãŒã¶ãŒã«èŠããªãè£åŽã®åŠçãæ åœ |
| ð ãµãŒã㌠| ãµãŒãã¹ãæäŸããåŽã®ã³ã³ãã¥ãŒã¿ |
| ð» ã¯ã©ã€ã¢ã³ã | ãµãŒãã¹ãåãåãåŽïŒãã©ãŠã¶ã»ã¢ããªïŒ |
| ðš ãªã¯ãšã¹ã | ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ããé¡ãã |
| ð€ ã¬ã¹ãã³ã¹ | ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®ãè¿äºã |
| ð¢ ã¹ããŒã¿ã¹ã³ãŒã | ãªã¯ãšã¹ãã®çµæã衚ã3æ¡ã®æ°å |
| ð ã¹ããŒãã¬ã¹ | ãµãŒããŒãåã®ããåããèŠããŠããªãä»çµã¿ |
ããã¯ãšã³ãã®æ¬è³ªïŒ
ããªã¯ãšã¹ããåãåã â åŠçãã㊠â ã¬ã¹ãã³ã¹ãè¿ãã
ãã®ã·ã³ãã«ãªæµãã®äžã«ãèªèšŒã»DBã»ããžãã¹ããžãã¯ãªã©
ããããã®èŠçŽ ãè©°ãŸã£ãŠããŸãã
次å㯠APIèšèšã®åºç€ ã解説ããŸãïŒ
RESTfulãªèšèšã»HTTPã¡ãœããã®äœ¿ãåãã»
è¯ããšã³ããã€ã³ãèšèšã®èãæ¹ãåŠã³ãŸãð
ð¬ 質åãææ³ãããã°ãã³ã¡ã³ãæ¬ã§ãæ°è»œã«ã©ãã!
ð 圹ã«ç«ã£ãããããã&ã¹ããã¯ããé¡ãããŸã!
ð ãããŸã§èªãã§ãã ãã£ãŠãæ¬åœã«ããããšãããããŸãã!
ð ã·ãªãŒãºèšäº
- ã第äžåãããã¯ãšã³ããšã¯äœãã»ãµãŒããŒã®åºæ¬ïŒãã®èšäºïŒ
- ã第äºåãAPIèšèšã®åºç€ïŒè¿æ¥å ¬éïŒ
- ã第äžåãããŒã¿ããŒã¹ã®åºç€ïŒè¿æ¥å ¬éïŒ
- ã第ååãèªèšŒã»èªå¯ã®åºç€ïŒè¿æ¥å ¬éïŒ
- ã第äºåãããã¯ãšã³ãèšèšã®å®è·µïŒè¿æ¥å ¬éïŒ
- ã第å åããŸãšãã»ãããã€ã»æ¬¡ã®ã¹ãããïŒè¿æ¥å ¬éïŒ