기본적인 HTTP Status Code는 외워두면 편함
- Todo List에 사용되는 CRUD 기능
- 각 CRUD에 매치되는 HTTP Status Code 사용
- FastAPI 기반
1. Status Code
2xx: 요청성공
| 상태코드 | 내용 |
|---|
| 200 OK | 일반적인 요청 성공, GET / POST / PUT / PATCH |
| 201 Created | 새로운 자원 생성, POST |
| 204 No Content | 응답할 자원 없음, DELETE |
4xx: 클라이언트 실패
| 상태코드 | 내용 |
|---|
| 400 Bad Request | 요청이 잘못된 경우 (query param, body) |
| 401 Unauthorized | 인증 실패 |
| 403 Forbidden | 권한문제 또는 잘못된 메서드 |
| 404 Not Found | 자원이 없는 경우 또는 잘못된 endpoint |
5xx: 서버실패
| 상태코드 | 내용 |
|---|
| 500 Internal Server Error | 일반적인 서버 에러 |
| 502 Bad Gateway | Reverse Proxy에서 서버 응답을 처리할 수 없는 경우 |
| 503 Service Unavailable | 서버가 요청을 처리할 수 없는 경우 (ex. 일시적 부하, 서버 다운) |
2. FastAPI - 라이브러리
from fastapi import FastAPI, Body, HTTPException
from pydantic import BaseModel
3. FastAPI - CRUD 기본 + HTTP Status Code
@app.get("/todos", status_code=200)
def get_todos_handler(order: str | None = None):
ret = list(todo_data.values())
if order and order == "DESC":
return ret[::-1]
return ret
@app.get("/todos/{todo_id}", status_code=200)
def get_todo_handler(todo_id: int):
todo = todo_data.get(todo_id)
if todo:
return todo
raise HTTPException(status_code=404, detail="Todo Not Found.")
@app.post("/todos", status_code=201)
def create_todo_handler(request: CreateToDoRequest):
todo_data[request.id] = request.dict()
return todo_data[request.id]
@app.patch("/todos/{todo_id}", status_code=200)
def update_todo_handler(todo_id: int,
is_done: bool = Body(..., embed=True)):
todo = todo_data.get(todo_id)
if todo:
todo["is_done"] = is_done
return todo
raise HTTPException(status_code=404, detail="Todo Not Found.")
@app.delete("/todos/{todo_id}", status_code=204)
def delete_todo_handler(todo_id: int):
todo = todo_data.pop(todo_id, None)
if todo:
return
raise HTTPException(status_code=404, detail="Todo Not Found.")