2. First Steps
1. First Steps
- 다음과 같이 간단하게 FastAPI 파일을 작성할 수 있다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
- 위의 코드를
main.py
파일에 복사한다.
- 그리고 다음과 같이 라이브 서버를 실행한다.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [99883] using statreload
INFO: Started server process [99885]
INFO: Waiting for application startup.
INFO: Application startup complete.
Note
uvicorn main:app
은 다음을 의미한다.
main
:main.py
파일(Python "모듈")이다.app
:main.py
내부에app = FastAPI()
라인으로 생성된 객체이다.--reload
: 코드 변경 후 서버를 다시 시작하며, 개발용으로만 사용한다.
- 출력을 보면 다음과 같은 라인이 있는데, 이 라인은 로컬 컴퓨터에서 앱이 제공되는 URL을 보여준다.
2. Check it
- 브라우저를 열어
http//127.0.0.1:8000
에 접속해보면, 다음과 같은 JSON response를 볼 수 있다.
3. Interactive API docs
- 이제
http://127.0.0.1:8000/docs
로 이동해보면, Swagger UI에서 제공되는 자동 대화형 API 문서가 표시되는 것을 볼 수 있다.
4. Recap, step by step
1) Step 1: import FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
FastAPI
는 API에 대한 모든 기능을 제공하는 Python 클래스이다.
Note
FastAPI
는Starlette
에서 직접 상속되는 클래스이다.FastAPI
에서도Starlette
의 모든 기능을 사용할 수 있다.
2) Step 2: create a FastAPI "instance"
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
- 여기서
app
변수는 클래스FastAPI
의 "인스턴스"가 된다. - 이
app
변수는 모든 API를 생성하기 위한 상호작용의 주요 지점이 될 것이다. - 또한 이
app
변수는 다음 커맨드의uvicorn
이 참조한 것과 동일하다.
- 만약 다음과 같이 변경할 수도 있다.
from fastapi import FastAPI
my_awesome_api = FastAPI()
@my_awesome_api.get("/")
async def root():
return {"message": "Hello World"}
- 위의 코드를
main.py
파일에 넣고, 다음과 같이uvicorn
을 호출한다.
3) Step 3: create a path operation
(1) Path
- 여기서 "Path"는 첫 번째
/
에서 시작하는 URL의 마지막 부분을 나타낸다.
- 예를 들어, 다음과 같은 URL에서
- path는 다음과 같다.
Note
- "path"는 일반적으로 "endpoint" 또는 "route"라고도 한다.
(2) Operation
- 여기서 "Operation"은 다음의 HTTP 메소드 중 하나를 나타낸다.
1] POST
2] GET
3] PUT
4] DELETE
5] OPTIONS
6] HEAD
7] PATCH
8] TRACE
- HTTP 프로토콜에서 이러한 메소드 중 하나 이상을 사용하여 각 path와 통신할 수 있다.
- API를 빌드할 때 일반적으로 이러한 특정 HTTP 메소드를 사용하여 특정 작업을 수행한다.
- 일반적으로는 다음의 HTTP 메소드를 사용한다.
1] POST
- 데이터를 생성한다.
2] GET
- 데이터를 읽는다
3] PUT
- 데이터를 업데이트한다.
4] DELETE
- 데이터를 삭제한다.
- 따라서 OpenAPI에서는 각 HTTP 메소드를 "operation"이라고 부르며, "operations"라고도 부른다.
(3) Define a path operation decorator
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/")
은 FastAPI에게 바로 아래의 함수가 다음과 같은 request 처리를 담당한다고 알려준다.
1] path는 /
이다.
2] get
operation을 사용한다.
Note
- Python의
@something
구문을 데코레이터라고 한다. - 데코레이터는 아래의 함수를 취하여 무언가를 수행하는 역할을 한다.
get
operation 외의 다음과 같은 operations도 사용할 수 있다.
1] @app.post()
2] @app.put()
3] @app.delete()
4] @app.options()
5] @app.head()
6] @app.patch()
7] @app.trace()
4) Step 4: define the path operation function
- "path operation function"은 다음을 의미한다.
1] path: /
이다.
2] operation: get
이다.
3] function: 데코레이터(@app.get("/")
) 아래에 있는 함수이다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
- 위의 코드를 보면, root() 함수는
GET
operation을 사용하여 URL "/
"에 대한 request을 수신할 때마다 FastAPI에 의해 호출된다. - 또한 root() 함수 앞에
async
키워드가 붙어 있기 때문에 비동기 함수이다.
- 물론, 다음과 같이
async def
대신 일반 함수로 정의할 수도 있다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello World"}
5) Step 5: return the content
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
dict
,list
,str
,int
등의 값으로 리턴할 수 있다.- 또한 Pydantic 모델을 반환할 수도 있다.