라우티은 특정 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}
오늘은 요기까지..
'IT' 카테고리의 다른 글
FastAPI - Study 2일차 (문서자동화) (3) | 2024.12.18 |
---|---|
FastAPI - Study 1일차 (Hello, FastAPI) (1) | 2024.12.16 |
Flask - 애플리케이션(메모앱) 만들어보기 #7 (0) | 2024.11.24 |
Flask - 애플리케이션(메모앱) 만들어보기 #6 (0) | 2024.11.23 |
Fedora 리눅스 워크스테이션 버전 설치 및 nVidia 드라이버 설치방법(Fedora KDE Plasma의 문제점 발견) (0) | 2024.11.22 |