본문 바로가기

Etc

FastAPI란? (API 테스트 및 pydantic setting 변경)

반응형

FastAPI란?

  • FaslAPI는 Python 기반의 쉽고 빠르게 개발할 수 있도록 개발된 웹 프레임워크
  • Swagger UI, ReDoc 자동 생성
  • Pydantic 기반 자동 검증으로 데이터 유효성 검사와 설정 관리에 용이
  • 기본적으로 비동기 (Async) 기능 제공
  • OpenAPI 및 Json Schema를 사용한 표준 기반

 

FastAPI의 계층 구조

  • Uvicorn: ASGI 서버
    • Starlette: (Uvicorn 사용) 웹 마이크로 프레임워크
      • FastAPI: (Starlette 사용) API 구축을 위한 데이터 검증 등 여러 추가 기능이 포함된 API 마이크로 프레임워크

-> FastAPI 가 Starlette 를 사용하고, Starlette 가 Uvicorn 을 사용하는 구조

 

 

 

FastAPI Project 생성 및 실행

- 사용 툴 : PyCharm 2022.1.4 (Professional Edition)

- OS : Mac

 

1. 신규 프로젝트 생성 (File > New Project)

 

  • main.py
  • FastAPI 신규 프로젝트 생성 시 자동 생성되는 파일
from fastapi import FastAPI

app = FastAPI()


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


@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}

 

 

  • test_main.http
  • FastAPI 신규 프로젝트 생성 시 자동 생성되는 파일
  • http client를 이용한 API 호출 테스트 파일 (Postman 대체)
  • ### 으로 method 구분 (필수)
# Test your FastAPI endpoints

GET http://127.0.0.1:8000/
Accept: application/json

###

GET http://127.0.0.1:8000/hello/User
Accept: application/json

###

 

 

2. 서버 실행하기

  • 상단 실행하기(▶) 버튼 클릭
  • 또는 Terminal 에서 실행 명령어 입력
  • Uvicorn 의 기본 포트 8000
  • --reload : 자동 리로딩 활성화
uvicorn main:app --reload

실행 명령어로 서버 실행

 

  • 포트 변경해서 실행하기
uvicorn main:app --reload --port 8080

8080으로 실행

 

 

3. API 테스트 해보기

  • http://localhost:8000 접속
  • main.py 에서 선언된 / 경로대로 return 메시지 출력

 

  • http 파일에서 line 에 표기된 실행(▶) 버튼 클릭으로 실행
  • 서비스 실행 log에 return 값 표기

 

 

4. POST 방식 테스트 해보기

  • pydantic 설치
pip install pydantic
  • main.py 파일에 내용 추가
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

@app.post('/post')
def post(user: User):
    return {'message': f'name: {user.name}, age: {user.age}'}

 

  • test_main.http 파일에 내용 추가
POST http://127.0.0.1:8000/post
Content-Type: application/json

{
  "name": "test_name",
  "age": 1
}

#### 주석으로 구분 필수

 

  • http 파일에서 line 에 표기된 실행(▶) 버튼 클릭으로 실행
  • 서비스 실행 log에 return 값 표기

post api 테스트 결과

 

 

5. Swagger UI, ReDoc

  • http://localhost:8000/docs 접속 (Swagger UI)

 

  • http://localhost:8000/redoc 접속 (ReDoc)

 

 

6. pydantic_settings 사용하여 커스텀

  • pydantic-settings 설치
pip install pydantic-settings
  • main.py
from fastapi import FastAPI
from pydantic import BaseModel
from pydantic_settings import BaseSettings


class Settings(BaseSettings):
    openapi_url: str = "/testurl"


settings = Settings()
app = FastAPI(title='Test Docs', docs_url='/test-url', redoc_url='')
# Swagger UI title 변경
# Swagger UI docs url 변경
# redoc_url 미사용 (Redoc 미사용 처리)


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


@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}


class User(BaseModel):
    name: str
    age: int

@app.post('/post')
def post(user: User):
    return {'message': f'name: {user.name}, age: {user.age}'}

 

  • Swagger UI url 변경
  • http://localhost:8000/doc url not found

 

  • http://localhost:8000/test-url 접속 (변경 url)
  • Swagger UI title 변경 (AS-IS FastAPI, TO-BE Test Docs)

 

  • Redoc 비활성화
  • http://localhost:8000/redoc url not found

 


출처

https://fastapi.tiangolo.com/ko

 

FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi.tiangolo.com

 

반응형