인공지능 개발자 수다(유튜브 바로가기) 자세히보기

Fastapi

[FastAPI] get post (2)

Suda_777 2024. 8. 17. 00:12

목차

    반응형

    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}

    코드 설명

    1. pydantic을 이용해 먼저 데이터의 타입을 정의한다
    2. @app.post() 데코레이터를 사용한다.
    3. 함수의 인자로 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)
    반응형