FastAPI는 표준 Python 유형 힌트를 기반으로 Python 3.6 이상으로 API를 빌드하기위한 최신의 빠른 (고성능) 웹 프레임 워크입니다.
기존 Flask 보다 빨라 AI관련 설치해보자.
FastAPI 공식 사이트 : https://fastapi.tiangolo.com
주요기능은 다음과 같다.
-
빠름 : NodeJS 및 Go 와 동등한 매우 높은 성능 (Starlette 및 Pydantic 덕분에). 사용 가능한 가장 빠른 Python 프레임 워크 중 하나입니다 .
-
빠른 코딩 : 기능 개발 속도를 약 200 % ~ 300 % 향상시킵니다. *
- 버그 감소 : 인간 (개발자)이 유발 한 오류의 약 40 %를 줄입니다. *
- 직관적 : 훌륭한 편집기 지원. 모든 곳에서 완성 . 디버깅 시간이 줄어 듭니다.
- Easy : 사용하고 배우기 쉽게 설계되었습니다. 문서를 읽는 시간이 줄어 듭니다.
- Short : 코드 중복을 최소화합니다. 각 매개 변수 선언의 여러 기능. 더 적은 버그.
- 견고성 : 프로덕션 준비 코드를 얻습니다. 자동 대화 형 문서.
- 표준 기반 : API에 대한 개방형 표준을 기반으로하며 완전히 호환됩니다 : OpenAPI (이전에는 Swagger라고 함) 및 JSON 스키마 .
설치 요구사항
Python 3.6 이상
설치
1) fastapi 설치
$ pip install fastapi
- 가장 기본이 되는 fastapi를 먼저 설치한다
PS C:\Users\juseok.yun> pip install fastapi
Collecting fastapi
Downloading fastapi-0.61.1-py3-none-any.whl (48 kB)
|████████████████████████████████| 48 kB 450 kB/s
Collecting pydantic<2.0.0,>=1.0.0
Downloading pydantic-1.6.1-py36.py37.py38-none-any.whl (99 kB)
|████████████████████████████████| 99 kB 1.2 MB/s
Collecting starlette==0.13.6
Downloading starlette-0.13.6-py3-none-any.whl (59 kB)
|████████████████████████████████| 59 kB 1.2 MB/s
Installing collected packages: pydantic, starlette, fastapi
Successfully installed fastapi-0.61.1 pydantic-1.6.1 starlette-0.13.6
PS C:\Users\juseok.yun>
2) uvicorn 설치
$ pip install uvicorn
Uvicorn 또는 Hypercorn 과 같은 프로덕션을 위해서는 ASGI 서버도 필요합니다 .
PS C:\Users\juseok.yun> pip install uvicorn
Collecting uvicorn
Downloading uvicorn-0.11.8-py3-none-any.whl (43 kB)
|████████████████████████████████| 43 kB 348 kB/s
Requirement already satisfied: click==7.* in d:\utils\python\python38\lib\site-packages (from uvicorn) (7.0)
Collecting websockets==8.*
Downloading websockets-8.1-cp38-cp38-win32.whl (65 kB)
|████████████████████████████████| 65 kB 834 kB/s
Collecting h11<0.10,>=0.8
Downloading h11-0.9.0-py2.py3-none-any.whl (53 kB)
|████████████████████████████████| 53 kB 620 kB/s
Installing collected packages: websockets, h11, uvicorn
Attempting uninstall: websockets
Found existing installation: websockets 3.3
Uninstalling websockets-3.3:
Successfully uninstalled websockets-3.3
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.
theia 0.9.2 requires websockets==3.3, but you'll have websockets 8.1 which is incompatible.
Successfully installed h11-0.9.0 uvicorn-0.11.8 websockets-8.1
PS C:\Users\juseok.yun>
실행을 위한 main.py 작성
from typing import Optional
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: Optional[str] = None):
return {"item_id": item_id, "q": q}
fastapi + uvicorn 실행
$ uvicorn main:app --reload --host=0.0.0.0 --port=8000
- 위와 같이 명령어로 간단하게 만들어진 API 서버를 실행시킨다.
>> main : 여기서 main은 main.py의 main을 말한다
>> app : main.py안에 있는 app=FastAPI()
>> --reload : 코드 변경 시 자동으로 저장되어 재시작 됨
>> --host : 모든 접근이 가능하게 하려면 0.0.0.0을 입력한다
>> --port : 접속 원하는 포트를 지정해준다
서버 접속
서비스 root ('/')접속
두번째 url ('/items') 접속
다음과 같은 API를 main.py에 만들었습니다.
- 경로 / 및 에서 HTTP 요청을 수신합니다 /items/{item_id}.
- 두 경로가 걸릴 GET 작업 (또한 HTTP의로 알려진 방법 ).
- 경로 /items/{item_id} 갖는 경로 파라미터 item_id 이어야한다 int.
- 경로 /items/{item_id} 선택이 str 쿼리 매개 변수를 q .
자동으로 생성되는 Swagger UI Doc
대체 API 문서
대체자동문서가 자동으로 표시됨.( ReDoc 제공)
PUT(POST) 예시
main.py에 아래 put (post) code 추가
uvicorn 서비 실행시 --reload 옵션을 주었기 때문에 수정된 코드는 자동으로 다시 로드된다.
추가 Test
* async api 추가
Jupyter notebook 을 활용한 API Test