[공식 문서]
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 를 만든다.
'개발' 카테고리의 다른 글
[JupyterLab] 주피터랩에 anaconda 가상환경 연결하기 (0) | 2024.02.08 |
---|---|
[FastAPI] HTTP Request를 사용하는 두 가지 방법 (0) | 2023.07.18 |
[Linux] chmod(change mode)로 접근 권한 지정하기 (0) | 2023.03.17 |
[Linux] 명령어 Is 옵션의 의미, ls -l 영역별 의미 (0) | 2023.03.17 |
[에러해결] Could not load the Qt platform plugin "xcb" (0) | 2023.01.27 |