FastAPI 공식문서 공부 (0)

Dongwon Ahn·2020년 9월 17일
0
post-thumbnail

해당 포스트는 FastAPI의 공식문서를 보고 글쓴이의 기준으로 요약 정리한 내용입니다. 간단한 변경점이나 생략된 부분들이 있습니다.

FastAPI란?

FastAPI는 파이썬을 활용하여 backend framework 입니다.
공식문서에 나와있는 설명은 아래와 같습니다.

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.

fastapi 설치

파이썬으로 backend를 구성할 때 처럼 기본적으로 가상환경을 설정해줍니다.
그 후 fastapi와 uvicorn를 설치해줍니다.

pip install fastapi
pip install uvicorn

uvicorn은 Uvloop과 httptools를 기반으로 구축된 빠른 ASGI 서버라고 생각하면 됩니다. 자세한건 공식문서를 참고해주시면 됩니다.

공식문서 기준으로 fastapi를 개발한 프로젝트는 uvicorn을 활용하여 실행합니다.

hello world 출력

main.py를 만들고 아래 코드를 작성합니다.

from fastapi import FastAPI

app = FastAPI()


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

그 후 서버를 실행합니다. 명령어는 아래와 같습니다.

$ uvicorn main:app --reload

  • main: main.py를 실행한다 라는 의미라고 생각하면 됩니다.
  • app: main.py에 있는 app=FastAPI() 객체를 생성한다는 의미입니다.
  • reload: 프로젝트에 변경점이 있을 경우 서버를 재실행해줍니다.

http://127.0.0.1:8000 또는 localhost:8000을 들어가 확인하면 아래 이미지와 같이 hello world가 나옵니다. (필자는 postman을 활용했습니다.)

Path Parameters

경로를 매개변수를 받고 싶은 경우는 아래와 같이 사용하면 됩니다.

@app.get("/books/{book_id}")
def search_book(book_id):
    return {"book_id": book_id}

예를 들어 책 검색을 할 경우 위와 같이 작성하면 book_id를 매개변수로 받아올 수 있습니다.

또한 FastAPI의 주요 특징인 type hint를 설정할 수 있습니다.

@app.get("/books/{book_id}")
def search_book(book_id: int):
    return {"book_id": book_id}
  • type에 맞춰서 제대로 요청한 경우
  • type hint에 위배된 경우

Request Body

위에서 간단하게 테스트 했던 것은 get 방식이었습니다. 이번에는 body에 데이터를 넣어서 전송 즉 post를 테스트해보겠습니다.

아래 내용을 작성합니다.

from pydantic import BaseModel
from typing import Optional


class Book(BaseModel):
    name: str
    author: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
    
 
@app.post("/books/")
def create_book(book: Book):
    return book

Optional[X] is equivalent to Union[X, None]

이미지와 같이 테스트가 됩니다.
Optional 같은 경우 데이터를 넣지 않으면 null이 되지만 다른 데이터는 에러가 발생합니다.

docs

FastAPI은 Swagger를 자동으로 제공해줍니다.
위의 api 작업을 한 후 http://localhost:8000/docs 들어갈 경우
아래 이미지 처럼 Swagger를 제공합니다.

profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.

0개의 댓글