기본설정
새로운 폴더를 생성하고 Visual Studio Code를 이용하여 폴더를 연다

아래의 두 명령을 터미널에서 입력하여 설치한다
pip install fastapi
pip install uvicorn


main.py 파일을 생성한 후 아래와 같이 기본 코드를 입력하고
다음의 명령으로 FastAPI를 실행한다
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
uvicorn main:app --reload
실행이 성공적이라면, http://127.0.0.1:8000으로 접속하라는 메시지를 확인할 수 있다

실행 화면을 웹에서 확인하면 아래와 같다

http://127.0.0.1:8000/redoc으로 접속하면 아래와 같은 관리 페이지를 확인할 수 있다

Download OpenAPI specification를 다운로드하면 아래와 같은 json 파일로 구성 요소를 알 수 있다
{
"openapi":"3.1.0",
"info":{
"title":"FastAPI",
"version":"0.1.0"
},
"paths":{
"/":{
"get":{
"summary":"Root",
"operationId":"root__get",
"responses":{
"200":{
"description":"Successful Response",
"content":{
"application/json":{"schema":{}}
}
}
}
}
}
}
}
파일의 주요 구성 요소는 다음과 같다
1. openapi:
"3.1.0"은 OpenAPI의 버전을 나타냅니다. 이는 해당 스펙이 OpenAPI 3.1.0 표준을 따르고 있음을 의미합니다.
2. info:
API에 대한 정보를 포함합니다. 여기서는 "FastAPI"라는 이름의 API가 "0.1.0" 버전임을 나타냅니다.
3. paths:
이 항목에는 API의 엔드포인트들이 정의되어 있습니다.
예시에서는 하나의 경로 /에 대해 정의가 있습니다.
/ (루트 경로):
get: HTTP GET 메서드를 사용하여 호출할 수 있는 엔드포인트입니다.
summary: "Root"로 API가 루트 경로임을 설명합니다.
operationId: API 호출에 대한 고유 식별자(이 경우 root__get)입니다.
responses:
200 상태 코드는 요청이 성공적으로 처리되었을 때의 응답을 정의합니다.
응답은 application/json 형태로 반환되며, schema 항목이 비어 있으므로
특정 데이터 구조는 정의되지 않았습니다.
이는 응답이 빈 JSON 또는 정의되지 않은 구조일 수 있음을 의미합니다.
이 파일의 용도는 아래와 같다
API 문서화: 자동 생성된 OpenAPI 스펙은 FastAPI의 Swagger UI와 Redoc 같은 도구에서 API 문서로 사용되어
API 사용법을 시각적으로 보여줍니다.
클라이언트 코드 생성: OpenAPI 스펙을 이용해 다양한 언어의 클라이언트 라이브러리를 자동으로 생성할 수 있습니다.
API 테스트 및 통합: 이 스펙을 기반으로 Postman이나 다른 API 테스트 도구에서 쉽게 API를 테스트할 수 있습니다.
API 추가
FastAPI에서는 다양한 HTTP 요청 메서드를 지원하며, 각 메서드는 특정한 동작을 수행할 때 사용된다
일반적으로 RESTful API에서 사용되는 메서드들로, 다음과 같은 요청을 처리할 수 있다
1. GET
설명: 서버에서 데이터를 조회할 때 사용합니다. 요청에 대한 응답으로 리소스를 반환합니다.
예시: 데이터를 읽거나 조회하는 데 사용됩니다 (예: 데이터 목록 보기)
@app.get("/items/") async def read_items(): return {"items": ["item1", "item2", "item3"]}
2. POST
설명: 서버에 데이터를 생성하거나 전송할 때 사용합니다.
주로 새로운 데이터를 추가하는 작업에 사용됩니다.
예시: 새로운 리소스를 생성하는 데 사용됩니다 (예: 사용자 생성)
@app.post("/items/") async def create_item(item: Item): return {"item_name": item.name}
3. PUT
설명: 서버의 기존 데이터를 전체적으로 수정할 때 사용합니다.
전체 리소스를 대체하는 요청으로 간주됩니다.
예시: 기존 데이터를 업데이트할 때 사용됩니다.
@app.put("/items/{item_id}") async def update_item(item_id: int, item: Item): return {"item_id": item_id, "updated_item": item}
4. PATCH
설명: 서버의 기존 데이터를 부분적으로 수정할 때 사용합니다. 리소스의 일부만 업데이트할 때 사용됩니다.
예시: 데이터의 특정 부분만 수정할 때 사용됩니다.
@app.patch("/items/{item_id}") async def partial_update_item(item_id: int, item: Item): return {"item_id": item_id, "patched_item": item}
5. DELETE
설명: 서버에서 데이터를 삭제할 때 사용합니다.예시: 특정 리소스를 삭제하는 데 사용됩니다.@app.delete("/items/{item_id}") async def delete_item(item_id: int): return {"message": "Item deleted"}
6. OPTIONS
설명: 서버에서 특정 리소스에 대한 지원 가능한 HTTP 메서드 목록을 요청할 때 사용됩니다.
예시: 특정 리소스가 지원하는 메서드를 확인합니다.
@app.options("/items/") async def options_item(): return {"allow": "GET, POST, DELETE"}
7. HEAD
설명: GET 요청과 비슷하지만, 응답 본문 없이 헤더만 반환합니다.
주로 리소스의 상태를 확인할 때 사용됩니다.
@app.head("/items/") async def head_items(): return {}
GET: 데이터를 조회할 때 사용.
POST: 새로운 데이터를 추가하거나 서버에 데이터를 전송할 때 사용.
PUT: 전체 데이터를 업데이트할 때 사용.
PATCH: 데이터를 부분적으로 수정할 때 사용.
DELETE: 데이터를 삭제할 때 사용.
OPTIONS: 서버가 지원하는 메서드를 확인할 때 사용.
HEAD: 데이터가 존재하는지 확인할 때 사용 (본문 없음).
아래와 같이 get, post 요청을 하나씩 추가하였다
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# 입력받을 데이터 모델 정의 (Pydantic BaseModel 사용)
class StringInput(BaseModel):
input_string: str
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/getTest")
async def getTest():
return {"testField": "This data come from /getTest"}
# POST 엔드포인트 정의
@app.post("/postTest")
async def postTest(data: str):
return {"testField": f"This data come from /postTest => {data}"}
get 요청은 웹페이지에서 127.0.0.1:8000/ 뒤에 getTest 부분을 입력하여 해당 결과를 얻을 수 있다

하지만 post 요청은 위와 동일한 방법으로 테스트 할 수 없다

따라서 post 요청은 postman을 이용하여 테스트 하겠다
postman으로 post 요청을 보낼 때, str 데이터를 보내면 리턴 값에 정상적으로 들어 있는 것을 볼 수 있다
체크된 박스에 key는 data로 value는 string 데이터를 넣어 send 버튼을 눌러 테스트 하면 된다
(key가 data인 이유는 postTest 메소드의 파라미터 이름이 data이기 때문)
하단의 body에 전달한 데이터를 사용한 결과를 확인할 수 있다


하지만 필요한 데이터를 전달하지 않으면 위의 오른쪽 사진처럼 422 Unprocessable Entity 오류가 발생한다
출처
https://velog.io/@munang/Python-FastAPI-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
Python FastAPI 설치하기
포트폴리오 만들려고, 백엔드 프레임워크를 확인하고 있는데 FastAPI가 눈에 띈다!일단 쉽고, 가볍고, 빠르니 당장 해보자 ㅋㅋ 입문기라 비슷비슷하지만 최근 가장 hot한 프레임워크도 검토해보
velog.io