Python/Fast API

Fast API 시작하기!

너굴Dev 2022. 2. 13. 13:26

FastAPI 설치

  • pip install fastapi[all]​
  • zsh 환경에서 안 될 경우 (mac)
    • pip install fastapi\[all\]

라이브 서버 실행

  1. main.py 아래 코드를 작성한다.
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}
  1. 터미널에 uvicorn main:app --reload 실행

  • uvicorn main:app 명령의 의미
    • main : 파일 main.py (파이썬 모듈)
    • app : main.py 내부의 app = FastAPI() 줄에서 생성한 오브젝트
    • —reload : 코드 변경 후 서버 재시작.(개발에만 사용)

확인하기

{"message": "Hello World"}

대화형 API 문서


1단계 : FastAPI 임포트

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}
  • FastAPI는 API에 대한 모든 기능을 제공하는 파이썬 클래스이다

2단계 : FastAPI 인스턴스 생성

from fastapi import FastAPI

# 인스턴스 생성 부분
app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}
  • app 변수는 FastAPI 클래스의 "인스턴스"
    • 모든 API를 생성하기 위한 상호작용의 주요 지점이 된다.
    • 아래 처럼 app은 unicorn이 참조한다.
      • uvicorn main:app --reload
  • app 을 my_awesome_api 로 수정하면 다음과 같이 사용해야한다
from fastapi import FastAPI

my_awesome_api = FastAPI()

@my_awesome_api.get("/")
async def root():
    return {"message": "Hello World"}
  • 그리고uvicorn main:my_awsome_api --reload 로 호출해야 한다

3단계: 경로 동작 생성

  • 경로

  • 동작

    • HTTP 메소드들을 동작 이라고 (문서 상에서)부를것이다.
      • HTTP 메소드
        • 자주 사용하는것 : POST, GET, PUT, DELETE
        • 이외의 것 : OPTIONS, HEAD, PATCH, TRACE
    • 일반적으로 아래 네가지를 사용
    • POST : 데이터를 생성하기 위해
    • GET : 데이터를 읽기 위해
    • PUT : 데이터를 업데이트하기 위해
    • DELETE : 데이터를 삭제하기 위해
    from fastapi import FastAPI
    
    app = FastAPI()
    
    # / : 경로
    # get : 동작 사용
    @app.get("/")
    
    async def root():
        return {"message": "Hello World"}
    • get외에는 다음과 같이 사용한다.
      • @app.post()
      • @app.put()
      • @app.delete()
      • @app.options()
      • @app.head()
      • @app.patch()
      • @app.trace()

    4단계: 경로 동작 함수 정의

    • 경로 : /
    • 동작 : get
    • 함수 : 데코레이터 아레에 있는 함수 (@app.get("/") 아래).
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    
    async def root():
    
        return {"message": "Hello World"}

    5단계: 콘텐츠 반환

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def root():
    
        return {"message": "Hello World"}
    • dict, list, str, int 등을 반환 할 수 있다.

pydantic, starlette

  • FastAPI 설치시 두 라이브러리가 함께 설치
  • 사실 FastAPI는 pydantic, starlette 두 라이브러리를 통해 동작

starlette

  • 웹프레임워크
  • FastAPI는 starlette의 서브 클래스
    • 그래서 starlette 을 이미 알고 있다면, 같은 방법으로 사용할 수 있다.
  • 따라서 FastAPI는 starlette의 기능을 그대로 사용
    • 웹소켓 지원
    • GraphQL 지원
    • In-process background tasks 지원
    • 시작과 종료 이벤트
      • 애플리케이션 시작전과 종료될 때에 실행해야 하는 코드를 이벤트 처리기에 등록 가능
    • requests을 기반으로 구축된 테스트 클라이언트
      • requests는 라이브러리를 말함
    • CORS, GZip, Static Files, Streaming responses
    • 세션과 쿠키 지원
    • 100% 테스트 범위 적용
      • 모든 코드라인을 커버하기 위해 충분한 양의 테스트를 작성했다는것을 의미
    • 100% type annotated codebase
      • 모든 곳에 type hint를 적용 했다는 의미

pydantic

  • FastAPI는 pydantic 과 완벽하게 호환된다.
    • pydantic을 기반으로 하는 외부라이브러리를 포함함 (데이터 베이스를 위한 ORM ODM 같은 외부라이브러리)