본문 바로가기

IT

FastAPI - Study 3일차 (라우팅)

라우티은 특정 URL을 어떤 어떤 함수가 처리할 지를 정의하는 기술이다.

FastAPI에서도 Flask와 마찬가지로 데코레이터를 사용하여 간단히 구현할 수 있다.

 

1. 기본라우팅

HTTP GET 메서드를 이용한 예제

 

from fastapi import FastAPI  # FastAPI 라이브러리를 import 한다.

app = FastAPI()  # FastAPI 인스턴스를 생성한다.


@app.get("/")
def read_root(): 
    return {'message':'Hello World!!'}

 

위는 저번 1일차 공부때 사용했던 소스로서

http://127.0.0.1:8000 에 GET요청을 하면 'Hello, World!!" 라는 응답을 보내는 예이다.

 

 

2. 경로 매개변수

FastAPI는 사용자의 요청을 구체적으로 명시하기 위해 [경로 매개변수]와 [쿼리 매개변수]라는 두 가지 종류의 매개변수를 사용한다.

 

[경로 매개변수]란 URL의 특정 부분을 변수로 사용하여 동적으로 변할 수 있는 값을 처리할 때 사용한다.

 

예를 들어, [ /items/1 ]과 [ /items/2 ]라는 각 URL에서 [ 1 ]과 [ 2 ]는 각각 다른 아이템을 식별하는 고유값으로

경로 매개변수 item_id을 통해 서버에 전달될 수 있다.

 

@app.get("/items/{item_id}")
def read_item(item_id):
    return {"item_id": item_id}

 

위 코드에서 {item_id}는 [경로 매개변수]를 정의하는 부분으로, 사용자가 방문하는 URL의 해당 분분에 있는 값을

int 타입으로 read_item() 함수에 전달한다.

 

 

 

여기서 응용하여 URL의 여러부분을 동적으로 캡처하여 함수에 전달할 수 있다.

예를 들어 사용자가 /users/1/items/gold와 같은 URL에 엑세스 하는 경우, 여기에는 두 개의 [경로 매개변수]를 둘 수 있다.

하나는 사용자 식별자(user_id)이고 다른 하나는 아이템 이름(item_name)이다.

 

@app.get("/users/{user_id}/items/{item_name}")
def read_item(user_id, item_name):
    return {"user_id": user_id, "item_name": item_name}

 

FastAPI는 기본적으로 경로 매개변수를 문자열로 처리한다.

 

 

복수의 경로 매개변수를 사용하는 것은 웹 API에서 매우 일반적이며, 이를 통해 클라이언트는 서버에 특정 자원을 정확하게 요청할 수 있다.

이렇게 사용하는 방식은 URL 경로의 의미를 더욱 명확하게 하고, 웹 서비스 구조를 이해하기 쉽게 만든다.

 

 

3. 쿼리 매개변수

쿼리 배개변수는 URL의 경로 이후 ?로 시작되는 부분에 정의되며, 키-값 쌍의 형태로 정보를 전달한다.

 

@app.get("/items/")
def read_items(skip, limit):
    return {"skip": skip, "limit": limit}

 

위 예시에서 skip과 limit 매개변수는 쿼리 매개변수이다.

사용자가 /items/?skip=10&limit=20와 같이 요청을 보내면, 서버는 이를 해석하여 skip과 limit에 해당하는 값을 함수의 매개변수로 사용한다.

 

이는 클라이언트가 이 매개변수들을 반드시 URL 쿼리에 포함하여 값을 제공해야 함을 의미힌다.

예를 들어 http://127.0.0.1:8000/items/ 라고 주소창에 입력하는 순간 매개변수 값을 지정하지 않았기에 다음과 같은 에러를 출력하게 된다.

 

이를 해결하기 위해 아래와 같이 코드상 매개변수에 기본값을 설정하면 된다.

@app.get("/items/")
def read_items(skip=0, limit=0):
    return {"skip": skip, "limit": limit}

 

 

 

오늘은 요기까지..