728x90
Overview
- Python version : 3.11.4
- FastAPI Version : 0.109.0
- Document : https://fastapi.tiangolo.com/ko/
API 프로젝트가 있어 여러 언어와 웹 프레임워크를 조사하면서 FastAPI에 눈길이 가게 되었다. 최근에 파이썬으로 프로젝트를 진행한 경험도 있고, 파이썬의 생산 능력이 너무 좋다는 것도 잘 알게 되어서 잠깐 테스트를 해보게 되었다. FastAPI 를 찍먹 해보면서 느낀 주관적인 몇 가지 특징이 있다.
- 코드 작성이 굉장히 직관적이다. (파이썬과 웹 동작에 대한 이해만 있다면 어떤 언어를 한 사람이라도 금방 접근 할 수 있을 것 같다.)
- 테스트 코드도 쉽게 작성할 수 있는 것 같다.
- 위 두 특징과 더불어 Swagger UI가 자동으로 완성해주는 덕분에 매우 빠른 개발 속도가 나온다.
- 공식 문서가 굉장히 잘 되어 있는 것 같다.
- 깃허브 스타도 가파르게 상승하고 있으며 관심도도 많아 커뮤니티가 활성화 되어 있는 느낌이 든다.
- Pydantic을 이용한 Validation이 이해만 한다면 굉장히 편리한 것 같다.
- API가 빠르다고는 하지만 역시 파이썬에서 오는 성능은 역시나 아쉽다.
FastAPI 기본 실행을 위한 방법입니다.
main.py
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: str | None):
return {"item_id": item_id, "q": q}
Run FastAPI
- --reload : 런타임 상에서 코드 수정 시 재적용을 위한 옵션 (Production 환경에서는 사용하지 않는게 좋다.)
- --workers : 워커 프로세스의 개수
- --host : Listen 하는 호스트
- --port : Listen 하는 포트
> uvicorn main:app --reload --workers 2 --host 0.0.0.0 --port 8080
INFO: Will watch for changes in these directories: ['/Users/myuser/project/python/simple-fastapi']
WARNING: "workers" flag is ignored when reloading is enabled.
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
INFO: Started reloader process [20959] using WatchFiles
INFO: Started server process [20961]
INFO: Waiting for application startup.
INFO: Application startup complete.
...
...
...
Run Test
# 기본 루트 요청
> curl -v http://localhost:8080/
* Trying 127.0.0.1:8080...
...
...
{"Hello":"World"}
# Query Parameter를 조합한 요청
> curl -v 'http://localhost:8080/items/1234?q=justitem'
* Trying 127.0.0.1:8080...
...
...
{"item_id":1234,"q":"justitem"}
# 존재하지 않는 자원에 대한 요청
> curl -v http://localhost:8080/a
* Trying 127.0.0.1:8080...
...
...
< HTTP/1.1 404 Not Found
...
...
{"detail":"Not Found"}
# 잘못된 Path Parameter를 포함한 요청
> curl -v 'http://localhost:8080/items/aa?q=aa'
* Trying 127.0.0.1:8080...
...
...
< HTTP/1.1 422 Unprocessable Entity
...
...
{"detail":[{"type":"int_parsing","loc":["path","item_id"],"msg":"Input should be a valid integer, unable to parse string as an integer","input":"aa","url":"https://errors.pydantic.dev/2.4/v/int_parsing"}]}
# 잘못된 데이터를 포함한 요청
# Query Parameter와 변수명을 자동으로 매치해주고 Validation도 수행한다.
> curl -v 'http://localhost:8080/items/1234?qa=1234'
* Trying 127.0.0.1:8080...
...
...
< HTTP/1.1 422 Unprocessable Entity
...
...
{"detail":[{"type":"missing","loc":["query","q"],"msg":"Field required","input":null,"url":"https://errors.pydantic.dev/2.4/v/missing"}]}
728x90
'FastAPI' 카테고리의 다른 글
[FastAPI] Depends를 이용한 Validation (0) | 2024.02.28 |
---|---|
[FastAPI] Pydantic을 이용한 Validation (1) | 2024.02.24 |