본문 바로가기

API

[FastAPI] FastAPI 기본 설정

SMALL

기본설정

 

새로운 폴더를 생성하고 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

 

LIST