개발

FastAPI 공식문서 내용 정리

[공식 문서]

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
	return {"message": "Hello World"}
  • FastAPI: API에 대한 모든 기능을 제공하는 파이썬 클래스
  • app: FastAPI 클래스의 "인스턴스"
  • 경로: /
  • 동작: get
  • 함수: 데코레이터 아래에 있는 함수 (@app.get("/") 아래) 
  • dict, list, 단일값을 가진 str, int 등을 반환(return) 할 수 있다

 

동작

동작(Operation)은 HTTP 메소드 중 하나를 나타낸다. HTTP 프로토콜에서는 이러한 "메소드"를 하나(또는 이상) 사용하여 각 경로와 통신할 수 있다. API를 빌드하는 동안 일반적으로 특정 행동을 수행하기 위해 특정 HTTP 메소드를 사용한다.

  • POST : 데이터를 생성하기 위해
  • GET : 데이터를 읽기 위해
  • PUT : 데이터를 업데이트하기 위해
  • DELETE : 데이터를 삭제하기 위해

 

쿼리 매개변수

경로 매개변수의 일부가 아닌 다른 함수 매개변수를 선언할 때, "쿼리" 매개변수로 자동 해석한다.

 

 

Request Body

request body: 클라이언트가 API로 보낸 데이터

response body: API가 클라이언트에 보내는 데이터

 

API는 거의 항상 response body를 보내야 하지만 클라이언트가 항상 request body를 보낼 필요는 없다.

데이터를 보내려면 POST, PUT, DELETE, PATCH 중 하나를 사용해야 한다.

 

pydantic이란?
파이썬 타입 어노테이션을 사용해서 데이터 유효성 검사와 설정 관리를 하는 라이브러리이다.

typing 모듈의 Union이란?
여러 개의 타입이 허용될 수 있는 상황에서는 typing 모듈의 Union을 사용할 수 있다.
Union을 사용할 때 첫번째 타입은, 두 번째 타입보다 좀 더 중요하고 명시하고 싶은 타입을 선언한다. 
from typing import Union

def toString(num: Union[int, float]) -> str:
	return str(num)

>>> toString(1)
'1'

>>> toString(1.5)
'1.5'​

 

응답 상태 코드 (status code)

from fastapi import FastAPI

app = FastAPI()

@app.post("/items/", status_code=201)
async def create_item(name: str):
	return {"name": name}

status_code  매개변수를 사용하여 응답에 대한 HTTP 상태 코드를 선언할 수 있다.

status_code 매개변수는 HTTP 상태 코드를 숫자로 입력받는다.

 

HTTP 상태 코드에 대하여
- **1xx** : "정보"용. 직접적으로 잘 사용되지는 않음. 이 상태 코드를 갖는 응답들은 본문을 가질 수 없음
- **2xx** : "성공적인" 응답을 위해 사용. 가장 많이 사용되는 유형임. 200은 디폴트 상태 코드로 모든 것이 "성공적임"을 의미함. 201은 "생성됨"의 의미로 데이터베이스에 새로운 레코드를 생성한 후 사용함. 204은 "내용 없음"의 의미로 특별한 경우임. 클라이이언트에게 반환할 내용이 없는 경우 사용함. 따라서 응답은 본문을 가질 수 없음.
-  **2xx** : 상태 코드는 "리다이렉션"용임.  본문을 가질 수 없는 304  "수정되지 않음"을 제외하고, 이 상태 코드를 갖는 응답에는 본문이 있을 수도, 없을 수도 있음.
-  **4xx** : "클라이언트 오류" 응답을 위해 사용됨. 가장 많이 사용하게 될 두번째 유형. 404는 "찾을 수 없음" 응답을 위해 사용됨. 일반적인 클라이언트 오류의 경우 400을 사용할 수 있음.
-  **5xx** : 상태 코드는 서버 오류에 사용됨. 이것들을 직접 사용할 일은 거의 없음. 응용 프로그램 코드나 서버의 일부에서 문제가 발생하면 자동으로 이들 상태 코드 중 하나를 반환함.

모든 상태 코드들이 무엇을 의미하는지 외울 필요는 없음.
fastapi.status의 편의 변수를 사용할 수 있음. (editor의 자동완성 기능 사용할 수 있음)

 

Form Data

JSON 대신 form fields를 받아야 하는 경우 Form을 사용할 수 있다.

forms를 사용하기 위해 먼저 python-multipart를 설치해야 한다.

pip install python-multipart

 

from typing import Annotated
from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]
	return {"username": username}

Body 또는 Query와 동일한 방식으로 form parameters 를 만든다.