Post

FastAPI 공식문서 따라하기[1] - FastAPI

https://fastapi.tiangolo.com/ko/ 공식문서 따라하는 글

1. FastAPI의 특징

  • 빠르다.
  • 개발속도 증가
  • 버그가 적다.
  • 자동완성 기능, 적은 디버깅 시간, 직관적
  • 쉽다
  • 코드 중복을 최소화시켜 짧다.
  • 견고하다.
  • 표준기반

2. 요구사항

  • Python3.6+
  • Starlette, Pydantic필요

설치

1
2
3
4
5
pip install fastapi
# 프러덕션을 위해
pip install uvicorn[standard] 
#or
pip install uvicorn

3. 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#main.py

from typing import Optional
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root() :
    return {"Im" : "KMS!!"}

@app.get("/user/{user_id}")
def read_item(user_id : int, name: Optional[str] = None) :
    return { "user_id " : user_id,"name" : name}

실행하기

1
2
3
4
5
6
7
8
uvicorn main:app --reload

>INFO:     Will watch for changes in these directories: ['/Users/kms/Code/Python/fastapi_doc']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [25857] using statreload
INFO:     Started server process [25859]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
  • main : main.py 파일 (파이썬 ‘모듈’)
  • app : app = FastAPI()한 app오브젝트 .
  • --reload : 코드가 변경된후 서버 재시작하기. 개발환경에서만 권장

확인하기

http://127.0.0.1:8000

http://127.0.0.1:8000/user/95?name=kms

4. Swagger UI 확인

http://127.0.0.1:8000/docs

5. ReDoc UI 확인

http://127.0.0.1:8000/redoc

6. 심화과정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel) :
    age : int
    name : str
    kms : Optional[bool] = None

@app.get("/")
def read_root() :
    return {"Im" : "KMS!!"}

@app.get("/user/{user_id}")
def read_item(user_id : int, name: Optional[str] = None) :
    return { "user_id " : user_id,"name" : name}

@app.put("/users/{user_id}")
def update_user(user_id : int, user: User) :
    return{"user_name": user.name, "user_id : ": user_id}

확인하기

http://127.0.0.1:8000/docs

에서 나같은 경우는

  • user_id 는 1로
  • age는 28로
  • name은 kms
  • kms는 true값을 줬다. 나는 kms니까

결과

http://127.0.0.1:8000/redoc

에서도 확인할 수 있다.

7. 결론

age : int 선언하나로 자동완성, 타입검사 기능을 얻을 수 있다.

자동완성이란 vscode같은곳에서 변수명을 쓸 때 자동으로 입력하게끔 도와주는 것을 말한다. 타입검사란 int형인지 타입이 제대로 들어맞는지 검사.

  • 데이터 검증
    • 데이터가 유효하지 않을때 자동으로 생성하는 에러
    • JSON객체 유효성 검사
    • 검증 방식은 형식에 맞지 않는 데이터를 넣는것으로 확인 가능
  • 입력 데이터 반환
    • JSON, 쿼리 매개변수, 경로 매개변수,Cookie,Header,Form,File형태의 자료를 읽을 수 있다고 한다.
  • 출력 데이터 반환
    • Python Type(str, int, float, bool, list 등), datetime, UUID객체, DataBaseModel … 등 반환 JSON형식으로 반환 가능.
  • Swagger UI, Redoc지원

8. 리뷰

코드 분석을 하는데

  • GETPUT 요청에 user_id가 경로에 있는지 검증.
  • GETPUT 요청에 user_id가 int 타입인지 검증.
    • 그렇지 않다면 클라이언트는 에러를 볼 수 있다.
  • GET 요청에 name이라는 선택적인 쿼리 매개변수가 검사(http://127.0.0.1:8000/user/95?name=kms처럼).
    • name 매개변수는 = None으로 선언되었기 때문에 선택사항입니다.
    • None이 없다면 필수사항입니다(PUT의 경우와 마찬가지로).
  • /user/{user_id}으로의 PUT 요청은 본문을 JSON으로 읽음:
    • age을 필수 속성으로 갖고 int 형인지 검사.
    • name을 필수 속성으로 갖고 str 형인지 검사.
    • 만약 주어진다면, kms를 선택 속성으로 갖고 bool 형인지 검사.
  • JSON을 변환하거나 JSON으로 변환하는 것을 자동화.
  • 다음에서 사용할 수 있는 모든 것을 OpenAPI로 문서화:
  • 2개의 대화형 문서 웹 인터페이스를 직접 제공.(Swagger, ReDoc)
This post is licensed under CC BY 4.0 by the author.