FastAPI) 시작하기

나 안해·2023년 3월 27일
0

FastAPI

목록 보기
3/4
post-thumbnail

main.py의 형식과 실행 방법, 대화형 또는 대안 API 문서를 통한 확인은 이전 게시글 참고

OpenAPI

FastAPI는 API를 정의하기 위한 OpenAPI 표준을 사용하여 여러분의 모든 API를 이용해 "스키마"를 생성한다

스키마

API "스키마"

이 경우, OpenAPI는 API의 스키마를 어떻게 정의하는지 지시하는 규격
이 스키마 정의는 API 경로, 가능한 매개변수 등을 포함

데이터 "스키마"

"스키마"라는 용어는 JSON처럼 어떤 데이터의 형태를 나타낼 수도 있는데
이러한 경우 JSON 속성, 가지고 있는 데이터 타입 등을 뜻합니다.

OpenAPI와 JSON 스키마

OpenAPI는 API에 대한 API 스키마를 정의한다. 또한 이 스키마에는 JSON 데이터 스키마의 표준인 JSON 스키마를 사용하여 API에서 보내고 받은 데이터의 정의(또는 "스키마")를 포함한다.

openapi.json 확인

가공되지 않은 OpenAPI 스키마가 어떻게 생겼는지 궁금하다면, FastAPI는 자동으로 API의 설명과 함께 JSON (스키마)를 생성하니까 로컬에서 앱이 실행되는 url 뒤에 /openapi.json을 추가한 http://127.0.0.1:8000/openapi.json에서 직접 볼 수 있다

OpenAPI의 용도

OpenAPI 스키마는 포함된 두 개의 대화형 문서 시스템을 제공하고 OpenAPI의 모든 것을 기반으로 하는 수십 가지 대안이 있다.

  • FastAPI로 빌드한 애플리케이션에 이러한 대안을 쉽게 추가 할 수 있다.
  • API와 통신하는 클라이언트를 위해 코드를 자동으로 생성하는 데도 사용할 수 있는데 그 예로 프론트엔드, 모바일, IoT 애플리케이션이 있다.

단계별 요약

1단계: import FastAPI

from fastapi import FastAPI

  • FastAPI는 API에 대한 모든 기능을 제공하는 파이썬 클래스다
    • FastAPI는 Starlette를 직접 상속하는 클래스라서 FastAPI로 Starlette의 모든 기능을 사용할 수 있다.

2단계: FastAPI "인스턴스" 생성

from fastapi import FastAPI
인스턴스명 = FastAPI()
  • app 변수는 FastAPI 클래스의 "인스턴스"가 돼서 모든 API를 생성하기 위한 상호작용의 주요 지점이 될 것이다.
  • 이 app은 다음 명령에서 uvicorn이 참조하고 것과 동일하다

3단계: 경로 동작 생성

from fastapi import FastAPI
인스턴스명 = FastAPI()
@인스턴스명.get("/")

3.1 "경로"

일반적으로 "앤드포인트" 또는 "라우트"라고도 불리며 API를 빌드하는 동안 "경로"는 "관심사"와 "리소스"를 분리하는 주요 방법이다

  • 여기서 "경로"는 첫 번째 /에서 시작하는 URL의 마지막 부분이므로
    https://example.com/items/foo라는 URL에서의 경로는 /items/foo

3.2 "동작(Operation)"

HTTP "메소드" 중 하나

  • POST, GET, PUT, DELETE 외에도 OPTIONS, HEAD, PATCH, TRACE도 있다
  • HTTP 프로토콜에서는 이러한 "메소드"를 하나(또는 이상) 사용하여 각 경로와 통신할 수 있다

@something

데코레이터라고 부르며 아래 있는 함수를 받고 그걸 이용해 무언가를 한다

  • @인스턴스.get("/") FastAPI에게 아래 함수가 경로 /에 해당하는 get 동작하라고 알려주는데 이게 경로 동작 데코레이터

4단계: 경로 동작 함수 정의

from fastapi import FastAPI
인스턴스명 = FastAPI()

@인스턴스명.get("/")
async def root():

위에서 먼저 정리한대로
경로는 /
동작은 get 등
함수는 "데코레이터" 아래에 있는 함수 (@app.get("/") 아래).

  • 위의 경우 async함수를 사용했는데 async def 대신 일반 함수로 정의할 수 있다

5단계: 콘텐츠 반환

from fastapi import FastAPI
인스턴스명 = FastAPI()

@인스턴스명.get("/")
async def root():
	return {"콘텐츠명":"콘텐츠"}

요약

  • FastAPI 임포트.
  • 인스턴스 생성.
  • 경로 동작 데코레이터 작성.
  • 경로 동작 함수 작성.
  • 개발 서버 실행(uvicorn main:app --reload)

참고

FastAPI, 자습서-사용자 안내서

0개의 댓글