정말 기초적인 FastAPI 튜토리얼 #1 - 쿼리 파라미터

FastAPI로 Hello World를 출력하는 API를 만들어보고, 쿼리 파라미터를 다루는 방법을 알아봅니다.

정말 기초적인 FastAPI 튜토리얼 #1 - 쿼리 파라미터
Image by Gerd Altmann from Pixabay
💡
2023 한국 파이콘에서 진행했던 FastAPI 튜토리얼에 내용을 추가하여 글 형식으로 정리해보았습니다.
이 튜토리얼은 파이썬을 조금 다뤄보신 분들이 FastAPI를 기초부터 배울 수 있게 구성했습니다.

1편에서는 다음 내용을 다룹니다.

• Hello World를 출력하는 API
• 쿼리 파라미터를 받아서 처리하는 API

Hello World API 만들기

@app.get("/hello")

지난 번에 받은 Git 저장소 폴더(fastapi-tutorial-at-pycon)에 들어갑시다. 이제부터 api/api.py 파일을 수정하면서 API를 만들어보겠습니다.

# api/api.py 파일
from fastapi import FastAPI

app = FastAPI()


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

파일 내용을 채웠다면 다음 명령어를 사용하여 FastAPI 웹 서버를 실행합니다.

$ poetry run uvicorn api.api:app --reload

아직은 명령어가 복잡해 보이겠지만 하나씩 차근차근 살펴보면 점점 익숙해질 겁니다.

  • poetry run - 지난 번에 구성했던 파이썬 가상환경 안에서 명령어를 실행합니다.
  • uvicorn - 파이썬 웹 서버입니다.
  • api.api:app - uvicorn 웹 서버가 api/api.py 파일에 있는 app 객체를 실행합니다.
  • --reload - 코드가 변경되면 자동으로 웹 서버를 재시작합니다.

이제 브라우저에서 http://127.0.0.1:8000/hello 링크를 열어봅시다. 다음과 같은 내용이 나타난다면 웹 서버가 제대로 실행된 것입니다. (브라우저에 따라 표시 방식은 다소 달라질 수 있습니다.)

{
  "message": "Hello World"
}

이렇게 첫 번째 API를 만들었습니다.

쿼리 파라미터를 처리하는 API 만들기

?query1=value&query2=test

앞선 hello API처럼 고정된 값을 응답하는 API가 있는가 하면, 입력한 값에 따라 다른 값을 응답하는 API도 존재합니다. 변수를 입력하는 방법은 여러가지인데 여기서는 쿼리 파라미터 방식을 사용해보겠습니다.

쿼리 파라미터란 url 뒤에 붙어 있는 ?query=test 같은 부분입니다. 여기서 query는 변수 이름, test는 변수의 값이 됩니다. (참고로 쿼리 파라미터를 하나 이상 입력할 땐 ?query1=test&query2=ghost 처럼 & 기호로 연결합니다.)

api/api.py 파일에 다음 내용을 추가합니다.

@app.get("/add")
def add(x, y):
    return {"result": x + y}

add 함수에서 xy 변수를 입력 받는다고 정의했고, xy를 더한 값을 응답합니다. 이렇게만 하면 /add?x=1&y=2 같은 요청을 받았을 때 x 변수에 1이, y 변수에 2가 할당됩니다.

이제 FastAPI 서버를 실행하거나 (poetry run uvicorn api.api:app --reload 기억하시죠?), 이미 실행됐다면 브라우저에서 http://127.0.0.1:8000/add?x=1&y=2 링크를 열어봅시다. 다음과 같은 결과가 나타난다면 성공입니다. (답이 아닌 것 같지만 의도입니다!)

{
  "result": "12"
}

실습 과제 #1

방금 만든 add 함수를 꼼꼼히 읽어본 분이라면 API 결과가 조금 이상하다는 걸 느끼셨을 텐데요. 올바른 결과("result": 3)가 나오도록 add 함수를 수정해보세요.
(FastAPI의 기능을 사용하셔도 무방하지만, 튜토리얼의 목적에 맞춰 여기서는 파이썬 내장 기능만 사용했습니다.)

@app.get("/add")
def add(x, y):
    return {"result": int(x) + int(y)}
{
  "result": 3
}

실습 과제 #2

이전에 만든 hello API를 수정하여 World 대신 name 파라미터에 입력한 값을 출력해보세요. 예를 들어 http://127.0.0.1:8000/hello?name=raccoony 링크를 클릭한다면, 다음과 같은 결과가 나타나야 합니다.

{
  "message": "Hello raccoony"
}
@app.get("/hello")
def hello(name):
    return {f"message": "Hello {name}"}
{
  "message": "Hello fastapi"
}

실습 과제 #3

이번에는 곱셈을 처리하는 API를 만들어봅시다. 다음 코드를 참고하여 api/api.py 파일에 multiply 함수를 추가해보세요.

# ... 부분을 수정하면 됩니다.
@app.get("/multiply")
def multiply(...):
    return {"result": ...}
@app.get("/multiply")
def multiply(x, y):
    return {"result": int(x) * int(y)}
{
  "result": 2
}

요약

  • 첫 API를 만들어보았습니다.
  • 쿼리 파라미터를 다루는 방법을 알아보았습니다.

다음 편에서는...

정말 기초적인 FastAPI 튜토리얼 #2 - 경로 파라미터와 자동 문서화에서는 다음 내용을 다룹니다.

  • 경로 파라미터를 처리하는 API 만들기
  • FastAPI의 자동 문서화(OpenAPI) 살펴보기

COMMENTS

}