반응형
FastAPI란?
- FaslAPI는 Python 기반의 쉽고 빠르게 개발할 수 있도록 개발된 웹 프레임워크
- Swagger UI, ReDoc 자동 생성
- Pydantic 기반 자동 검증으로 데이터 유효성 검사와 설정 관리에 용이
- 기본적으로 비동기 (Async) 기능 제공
- OpenAPI 및 Json Schema를 사용한 표준 기반
FastAPI의 계층 구조
- Uvicorn: ASGI 서버
- Starlette: (Uvicorn 사용) 웹 마이크로 프레임워크
- FastAPI: (Starlette 사용) API 구축을 위한 데이터 검증 등 여러 추가 기능이 포함된 API 마이크로 프레임워크
- Starlette: (Uvicorn 사용) 웹 마이크로 프레임워크
-> 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
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 값 표기
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
반응형