본문 바로가기
Language&Framework/Fast API

FastAPI - main.py

by JUNG씨 2023. 2. 17.

fastAPI 공식문서 내용 https://fastapi.tiangolo.com/tutorial/first-steps/

main.py

from fastapi import FastAPI

app = FastAPI()


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

 

1. FastAPI import

from fastapi import FastAPI

FastAPI는 API에 대한 모든 기능을 제공하는 파이썬 클래스입니다.

-> FastAPI는 Starlette를 직접 상속하는 클래스입니다.

-> FastAPI로 Starlette의 모든 기능을 사용할 수 있습니다.

 

2. FastAPI "인스턴스" 생성

from fastapi import FastAPI

app = FastAPI()

여기 있는 app 변수는 FastAPI 클래스의 "인스턴스"가 됩니다.

이것은 모든 API를 생성하기 위한 상호작용의 주요 지점이 될 것입니다.

이 app은 다음 명령에서 uvicorn이 참조하고 것과 동일합니다:

uvicorn main:app --reload

 

3. create a path operation

 

- path ( = endpoint, route)

여기서 "경로"는 첫 번째 /에서 시작하는 URL의 마지막 부분을 나타냅니다.

https://example.com/items/foo
경로 :
/items/foo

 

 

- operation

여기서 "동작(Operation)"은 HTTP 메소드 중 하나를 나타냅니다.

  • POST
  • GET
  • PUT
  • DELETE
  • OPTIONS
  • HEAD
  • PATCH
  • TRACE

 

 

* 데코레이터 * 

from fastapi import FastAPI

app = FastAPI()


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

@app.get("/")은 FastAPI에게 바로 아래에 있는 함수가 다음으로 이동하는 요청을 처리한다는 것을 알려줍니다.

  • 경로 /
  • get 동작 사용

@decorator 정보

이 @something 문법은 파이썬에서 "데코레이터"라 부릅니다.

함수 맨 위에 놓습니다. 

"데코레이터" 아래 있는 함수를 받고 그걸 이용해 무언가 합니다.

우리의 경우, 이 데코레이터는 FastAPI에게 아래 함수가 경로 /에 해당하는 get 동작하라고 알려줍니다.

이것이 "경로 동작 데코레이터"입니다.

  • @app.post()
  • @app.put()
  • @app.delete()
  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

 

 

4. path operation function

 

  • 경로: 는 /입니다.
  • 동작: 은 get입니다.
  • 함수: 는 "데코레이터" 아래에 있는 함수입니다 (@app.get("/") 아래).
from fastapi import FastAPI

app = FastAPI()


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

 

GET 동작을 사용하여 URL "/"에 대한 요청을 받을 때마다 FastAPI에 의해 호출됩니다.

위의 경우 async 함수입니다.


async def 대신 일반 함수로 정의할 수 있습니다:

from fastapi import FastAPI

app = FastAPI()


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

 

 

5. return the content

from fastapi import FastAPI

app = FastAPI()


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

dict, list, 단일값을 가진 str, int 등을 반환할 수 있습니다.

Pydantic 모델을 반환할 수도 있습니다.

JSON으로 자동 변환되는 객체들과 모델들이 많이 있습니다(ORM 등 포함).