FastAPI | 공식문서 따라하기 - 기본

김민호·2021년 11월 8일
0

FastAPI

목록 보기
1/2
post-thumbnail

설치

  • pip install fastapi

  • pip install uvicorn : 서버 역할을 하는 uvicorn 설치

만들기

  • FastAPI 라는 디렉토리를 만들고 main.py 를 만들고 아래 내용 복사
from typing import Optional

from fastapi import FastAPI

app = FastAPI()


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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

서버 실행

  • 터미널에 uvicorn main:app --reload 명령어를 치면 다음과 같은 화면이 나오면서 서버가 켜진다

  • main : main.py 파일을 의미함 ( 파이썬 "모듈" )
  • app : main.py 파일에서 app = FastAPI() 라인에 있는 app 이름을 써주면 된다.
    앱 이름이 다를 경우 ERROR: Error loading ASGI app. Attribute "app" not found in module "main". 이런 에러 발생
  • --reload : 코드가 변경된 후 서버 재시작하기

브라우저 확인

http://127.0.0.1:8000 로 접속하면 다음과 같은 화면이 뜬다

이 결과는

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

에서 설정한 값이다. app에서 GET 메소드를 통해 "/"를 경로로 read_root()함수의 리턴값을 받는다

http://127.0.0.1:8000/items/3 로 접속하면 다음과 같다

http://127.0.0.1:8000/items/5?q=what!!! 로 접속하면 다음과 같다

위의 두 결과는 아래에 따른 것이다.

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}
  • read_item이라는 함수는 /items/{item_id}를 필수 경로로 받고 매개변수 {item_id}int 형이어야 한다. (path parameter)
  • /items/{item_id} 뒤에 나오는 query string(?)은 선택적인 매개변수이고 str 형이어야 한다. 디폴트 값은 null이 반환된다.

대화형 API 문서

상당히 편리한 두 가지 API문서를 제공해준다
여기서 맘에 드는 하나를 잡아서 익히자

Swagger UI

  • cancel 자리에 있던 Try it Out 을 클릭하면 매개변수를 채울 수 있다.
  • 먼저 이렇게 내가 설정해놓은 파라미터에 변수를 넣을 수 있다

  • 또한 Curl 주소와 Request URL도 깔끔하게 나오고
    Response의 body와 headers도 잘 나온다. 깔끔하다

PUT 메소드

from typing  import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
  name : str
  price : float
  is_offer : Optional[bool] = None

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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

PUT 메소드를 사용하기 위해 main.py를 위와 같이 수정해보자. django와 다른 점이 몇 가지 보인다.

  • 모델와 뷰를 한 곳에 쓴다
  • 모델 속성이 상당히 간결하다
  • 뷰 역시 간결하다
  • 함수의 인자로 모델 객체를 받아온다

uvicorn main:app --reload 아까 서버를 킬 때 쳤던 이 명령어 덕분에 서버가 자동으로 리로딩할 수 있게 되었다.

  • 이제 패스 파라미터를 설정하고, 요청의 body를 채워 넣고 Execute를 누르면 사용자 인터페이스는 API와 통힌하고 매개변수를 전송하며 그 결과를 가져와서 화면에 표시한다.
profile
개발자로서의 삶은 https://velog.io/@maxminos 에서 기록하고 있습니다 😀

0개의 댓글