목차
반응형
1. Get
1.1. 개념 설명
GET 요청은 주로 서버에서 데이터를 가져오기 위해 사용됩니다.
url에 파라미터를 적어 요청합니다.
장점
- 간편하다
- 단순한 데이터 조회에 적합
- RESTful 방식에 적합
단점
- 보안 문제 취약
- 데이터 크기 제한
- 데이터 수정 불가
- 캐싱문제: 자주 수정되는 데이터를 조회할 때에는 과거 데이터가 조회될 수 있음
1.2. 기본적인 GET 요청
FastAPI에서 GET 요청을 처리하려면 @app.get()
데코레이터를 사용합니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
위의 코드에서 '/' 경로에 GET 요청을 보내면 {"message": "Hello, World!"}라는 JSON 응답을 받게 됩니다.
1.3. 경로 매개변수(Path Parameters)
GET 요청은 경로 매개변수를 통해 특정 데이터를 요청할 수 있습니다. 예를 들어, 사용자 ID에 따라 사용자의 정보를 가져오고 싶다면 다음과 같이 작성할 수 있습니다.
@app.get("/users/{user_id}")
def read_user(user_id: int):
return {"user_id": user_id, "name": "John Doe"}
위의 예에서 '/users/1'로 GET 요청을 보내면 {"user_id": 1, "name": "John Doe"}라는 응답을 받게 됩니다.
1.4. 쿼리 매개변수(Query Parameters)
@app.get("/items/")
def read_item(skip: int=0, limit: int=10):
return {"skip": skip, "limit": limit}
위의 예에서 '/items/?skip=5&limit=20'로 GET 요청을 보내면 {"skip": 5, "limit": 20}라는 응답을 받습니다.
'?'뒤에 파라미터를 적을 수 있어요
2. Post
2.1. 개념 설명
클라이언트가 서버에 데이터를 전송할 때 사용되는 HTTP 메서드 중 하나입니다. 주로 서버에 새로운 데이터를 생성하거나 서버의 상태를 변경할 때 사용됩니다. POST 요청은 데이터를 요청 본문(body)에 담아서 전송하므로, URL에 데이터를 노출하지 않습니다.
장점
- 보안성
- 대용량 데이터 전송
- 서버 상태 변경 작업에 적합
- 다양한 데이터 형식 지원(Json, XML, 등)
단점
- 캐싱 불가
- 디버깅 어려움
- 전송 속도
- 중복 요청 문제
2.2. 예시 코드
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI()
# 데이터 모델 정의
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
# POST 요청을 처리하는 엔드포인트
@app.post("/items/")
def create_item(item: Item):
if item.price <= 0:
raise HTTPException(status_code=400, detail="Price must be greater than zero")
# 실제로는 데이터베이스에 아이템을 저장하는 코드가 여기에 들어감
return {"message": "Item created successfully", "item": item}
코드 설명
- pydantic을 이용해 먼저 데이터의 타입을 정의한다
@app.post()
데코레이터를 사용한다.- 함수의 인자로 pydantic로 만든 타입을 받는다.
2.3. post 요청 보내기
html 예시
<form action="https://localhost:8000/items/" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<label for="price">Price:</label>
<input type="number" step="0.01" id="price" name="price" required>
<label for="is_offer">Is Offer:</label>
<input type="checkbox" id="is_offer" name="is_offer">
<button type="submit">Submit</button>
</form>
bash 예시
curl -X POST https://localhost:8000/items/ -H "Content-Type: application/json" -d '{"name": "Laptop", "price": 999.99, "is_offer": true}'
javascript 예시
import axios from 'axios';
axios.post('https://localhost:8000/items', {
name: 'Laptop',
price: 999.99,
is_offer: true
});
python 예시
import requests
url = 'https://localhost:8000/items'
data = {
'name': 'Laptop',
'price': 999.99,
'is_offer': True
}
requests.post(url, json=data)
반응형
'Fastapi' 카테고리의 다른 글
[FastAPI] Pydantic 사용법 (5) (0) | 2024.08.31 |
---|---|
[FastAPI] 비동기(Asynchronous)프로그래밍 (4) (0) | 2024.08.24 |
[FastAPI] HTML 사용해 보기 (3) (0) | 2024.08.22 |
[FastAPI] 개념과 기본 사용법 (1) (0) | 2024.07.10 |
FastAPI의 특징과 장단점 (0) | 2024.01.14 |