ã2026幎çãAPIéçºã®å§ãæ¹ â æåã®APIãäœãå®å šã¬ã€ã
- REST APIã®èšèšååïŒCRUDã»HTTPã¡ãœããïŒ
- HTTPã¹ããŒã¿ã¹ã³ãŒãã®æå³
- Pythonã®FastAPIãŸãã¯Node.jsã§ã®APIå®è£
- PostmanãŸãã¯curlã§ã®APIãã¹ãæ¹æ³
HTTPã¡ãœãããšCRUDæ©èŠè¡š
| HTTPã¡ãœãã | æäœ | çšéäŸ |
|---|---|---|
| GET | ReadïŒèªã¿åãïŒ | ãŠãŒã¶ãŒæ å ±ã®ååŸ |
| POST | CreateïŒäœæïŒ | æ°èŠãŠãŒã¶ãŒã®ç»é² |
| PUT/PATCH | UpdateïŒæŽæ°ïŒ | ãŠãŒã¶ãŒæ å ±ã®å€æŽ |
| DELETE | DeleteïŒåé€ïŒ | ãŠãŒã¶ãŒã®åé€ |
ãã䜿ãã¹ããŒã¿ã¹ã³ãŒã
| ã³ãŒã | æå³ |
|---|---|
| 200 OK | æå |
| 201 Created | æ°èŠãªãœãŒã¹äœææå |
| 400 Bad Request | ãªã¯ãšã¹ãå 容ãäžæ£ |
| 401 Unauthorized | èªèšŒãå¿ èŠ |
| 403 Forbidden | ã¢ã¯ã»ã¹æš©éãªã |
| 404 Not Found | ãªãœãŒã¹ãèŠã€ãããªã |
| 500 Internal Server Error | ãµãŒããŒåŽã®ãšã©ãŒ |
ã¯ãããŠã®APIïŒFastAPI / PythonïŒ
pip install fastapi uvicorn
# main.py
from fastapi import FastAPI
app = FastAPI()
items = []
@app.get("/items")
def get_items():
return items
@app.post("/items")
def create_item(item: dict):
items.append(item)
return item
uvicorn main:app --reload
# http://localhost:8000/docs ã§èªåçæãããããã¥ã¡ã³ãã確èª
ããããè©°ãŸããã€ã³ã
Q: CORSãšã©ãŒãåºã
â ãã©ãŠã¶ããAPIãåŒã¶ãšãããµãŒããŒåŽã§CORSããããŒãèšå®ããå¿
èŠããããŸããFastAPIãªã from fastapi.middleware.cors import CORSMiddleware ã§èšå®ã§ããŸãã
Q: èªèšŒã¯ã©ããã£ãŠå®è£
ããïŒ
â æåã¯JWTïŒJSON Web TokenïŒãå®çªã§ãããã°ã€ã³æã«ããŒã¯ã³ãçºè¡ãã以éã®ãªã¯ãšã¹ãã® Authorization: Bearer ããŒã¯ã³ ããããŒã§èªèšŒããŸãã
Q: APIã®èšèšã§è¿·ã
â URLã¯ãªãœãŒã¹åïŒåè©ïŒã«ããåè©ã¯äœ¿ããªãã®ãåºæ¬ã§ãïŒ/getUser ã§ã¯ãªã GET /users/{id}ïŒã
APIã£ãŠã䜿ãåŽãã®ã€ã¡ãŒãžãããªããã ãã©ãèªåã§äœãããšãã§ããã®ïŒ
ãã¡ããïŒAPIã¯ã¬ã¹ãã©ã³ã®ãŠã§ã€ã¿ãŒã¿ãããªãã®ã§ãã客ããïŒã¯ã©ã€ã¢ã³ãïŒã®æ³šæããããã³ïŒãµãŒããŒïŒã«å±ããŠãæçïŒããŒã¿ïŒãæã£ãŠãã圹å²ã ããèªåã§ãŠã§ã€ã¿ãŒã®åãæ¹ãæ±ºããïŒAPIéçºã£ãŠããšã ãã
ãªãã»ã©ïŒãããAPIéçºã£ãŠããŸãäœããå§ããã°ããã®ïŒ
ãŸãã¯REST APIã®åºæ¬ãæŒãããããRESTã§ã¯ããªãœãŒã¹ããšããåäœã§ããŒã¿ã管çããããäŸãã°ãŠãŒã¶ãŒæ å ±ãªã /usersãååãªã /products ã¿ããã«URLã§è¡šçŸããããããŠHTTPã¡ãœããã§æäœãåãããã ãGETã§ååŸãPOSTã§äœæãPUTã§æŽæ°ãDELETEã§åé€ããã®4ã€ãèŠããã°åºæ¬ã¯ããããªã ãã
URLãšã¡ãœããã®çµã¿åããã§äœããããæ±ºãŸããã ãïŒå®éã«ã³ãŒããæžãã«ã¯ã©ãããã°ããã®ïŒ
åå¿è ã«ãããããªã®ã¯ãNode.jsã®Express.jsãPythonã®FastAPIã ããExpressãªãæ°è¡ã§APIãµãŒããŒãç«ã¡äžããããFastAPIãªãPythonã®åãã³ãã䜿ã£ãŠèªåã§ããã¥ã¡ã³ããçæããŠãããããŸãã¯ãGET /hello ã§ã¡ãã»ãŒãžãè¿ãããããã®å°ããªAPIããå§ããŠã¿ããã
ã¬ã¹ãã³ã¹ã®åœ¢åŒã£ãŠã©ããªã£ãŠãã®ïŒããJSONã£ãŠèããã©âŠ
ãããçŸä»£ã®APIã§ã¯ã»ãšãã©JSON圢åŒã§ããŒã¿ãããåãããããããããã¹ããŒã¿ã¹ã³ãŒãã倧äºã ãã200ã¯æåã201ã¯äœææåã400ã¯ãªã¯ãšã¹ãã®äžåã404ã¯ãªãœãŒã¹ãèŠã€ãããªãã500ã¯ãµãŒããŒå éšãšã©ãŒããã®5ã€ã¯æäœéèŠããŠããããæ£ããã¹ããŒã¿ã¹ã³ãŒããè¿ãããšã§ãAPIã䜿ãåŽããšã©ãŒã®åå ã倿ãããããªããã ã
äœã£ãAPIãæ£ããåãã確èªããã«ã¯ã©ããããããã®ïŒ
ãã¹ãããŒã«ã䜿ããšããããPostmanã¯GUIã§çŽæçã«ãªã¯ãšã¹ããéããããcurlã¯ã³ãã³ãã©ã€ã³ãããµã¯ããšç¢ºèªã§ãããäŸãã° curl -X GET http://localhost:3000/users ãšæãŠã°ãŠãŒã¶ãŒäžèЧãè¿ã£ãŠãããéçºäžã¯ããŸãã«ãã¹ãããŠãæåŸ éãã®ã¬ã¹ãã³ã¹ãè¿ãã確èªããçãã€ãããã
ããã¥ã¡ã³ããæžããªããšãã¡ã£ãŠèããããšãããã©ã倧å€ããâŠ
ããã§OpenAPIïŒæ§SwaggerïŒã®åºçªã ããAPIã®ä»æ§ãYAML圢åŒã§å®çŸ©ãããšãèŠãããããã¥ã¡ã³ãããŒãžãèªåçæããããFastAPIãªãäœãããªããŠã /docs ã«ã¢ã¯ã»ã¹ããã ãã§Swagger UIã衚瀺ããããã ãæè¿ã¯ãOpenAPIãã¡ãŒã¹ãããšãã£ãŠãã³ãŒããæžãåã«ãŸã仿§ãå®çŸ©ããã¢ãããŒããäž»æµã«ãªãã€ã€ãããã
ã»ãã¥ãªãã£é¢ã¯ã©ãèããã°ããã®ïŒèª°ã§ãã¢ã¯ã»ã¹ã§ãã¡ãããšæãããâŠ
èªèšŒã®ä»çµã¿ãå ¥ããã®ãåºæ¬ã ããã·ã³ãã«ãªã®ã¯APIããŒæ¹åŒã§ããªã¯ãšã¹ãããããŒã«ããŒãå«ããŠãããæ¹æ³ãããå°ãæ¬æ Œçã«ãããªãJWTïŒJSON Web TokenïŒã䜿ã£ãèªèšŒãããããã ãããã°ã€ã³æã«ããŒã¯ã³ãçºè¡ããŠã以éã®ãªã¯ãšã¹ãã«ã¯ãã®ããŒã¯ã³ãä»ããŠãããä»çµã¿ã ãã
æ¬çªã§å ¬éãããšãã«æ°ãã€ããããšã£ãŠäœãããïŒ
ã¬ãŒããªããã£ã³ã°ã¯å¿ é ã ãã1ã€ã®ã¯ã©ã€ã¢ã³ãããçæéã«å€§éã®ãªã¯ãšã¹ããæ¥ããšãµãŒããŒãèœã¡ããããã1åéã«100ãªã¯ãšã¹ããŸã§ãã®ãããªå¶éãããããããšAPIããŒãžã§ãã³ã°ã倧äºã§ã/v1/users ã®ããã«URLã«ããŒãžã§ã³ãå ¥ããŠãããšãåŸãã仿§å€æŽããŠãæ¢åã®ãŠãŒã¶ãŒã«åœ±é¿ãäžããã«æžããã
å€§èŠæš¡ã«ãªã£ããã©ã管çããã®ïŒ
APIã²ãŒããŠã§ã€ãå°å ¥ãããšããããèªèšŒãã¬ãŒããªããã£ã³ã°ããã°åéãã«ãŒãã£ã³ã°ãªã©ãäžå 管çã§ãããAWS API GatewayãKongãæåã ããããšã¯OpenAPIãã¡ãŒã¹ãèšèšã培åºãããšãããã³ããšã³ããšããã¯ãšã³ãã§äžŠè¡éçºã§ãããããããŒã éçºã®ã¹ããŒããæ Œæ®µã«äžãããã ãæåã¯å°ããå§ããŠãæé·ã«åãããŠã¢ãŒããã¯ãã£ãé²åãããã®ãAPIéçºã®ã³ãã ãã