pip install fastapi
pip install uvicorn
: 서버 역할을 하는 uvicorn
설치
FastAPI
라는 디렉토리를 만들고 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}
uvicorn main:app --reload
명령어를 치면 다음과 같은 화면이 나오면서 서버가 켜진다main
: main.py
파일을 의미함 ( 파이썬 "모듈" )app
: main.py
파일에서 app = FastAPI()
라인에 있는 app 이름을 써주면 된다.ERROR: Error loading ASGI app. Attribute "app" not found in module "main".
이런 에러 발생--reload
: 코드가 변경된 후 서버 재시작하기http://127.0.0.1:8000 로 접속하면 다음과 같은 화면이 뜬다
이 결과는
@app.get("/")
def read_root():
return {"Hello": "World"}
에서 설정한 값이다. app에서 GET
메소드를 통해 "/"를 경로로 read_root()함수의 리턴값을 받는다
http://127.0.0.1:8000/items/3 로 접속하면 다음과 같다
http://127.0.0.1:8000/items/5?q=what!!! 로 접속하면 다음과 같다
위의 두 결과는 아래에 따른 것이다.
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
/items/{item_id}
를 필수 경로로 받고 매개변수 {item_id}
는 int
형이어야 한다. (path parameter)/items/{item_id}
뒤에 나오는 query string(?)
은 선택적인 매개변수이고 str
형이어야 한다. 디폴트 값은 null이 반환된다.상당히 편리한 두 가지 API문서를 제공해준다
여기서 맘에 드는 하나를 잡아서 익히자
Try it Out
을 클릭하면 매개변수를 채울 수 있다.from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name : str
price : float
is_offer : Optional[bool] = None
@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}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
PUT
메소드를 사용하기 위해 main.py
를 위와 같이 수정해보자. django와 다른 점이 몇 가지 보인다.
uvicorn main:app --reload
아까 서버를 킬 때 쳤던 이 명령어 덕분에 서버가 자동으로 리로딩할 수 있게 되었다.
Execute
를 누르면 사용자 인터페이스는 API와 통힌하고 매개변수를 전송하며 그 결과를 가져와서 화면에 표시한다.