>  기사  >  백엔드 개발  >  FastAPI 기초 이해: FastAPI, Uvicorn, Starlette, Swagger UI 및 Pydantic 가이드

FastAPI 기초 이해: FastAPI, Uvicorn, Starlette, Swagger UI 및 Pydantic 가이드

Barbara Streisand
Barbara Streisand원래의
2024-11-03 22:01:03503검색

Understanding FastAPI Fundamentals: A Guide to FastAPI, Uvicorn, Starlette, Swagger UI, and Pydantic

FastAPI는 Python으로 API를 구축하기 위한 현대적인 고성능 웹 프레임워크로, 개발자가 최소한의 노력으로 강력하고 효율적인 애플리케이션을 만들 수 있도록 해줍니다. 비동기 프로그래밍을 염두에 두고 설계되어 매우 빠르고 여러 요청을 동시에 처리할 수 있습니다. FastAPI를 지원하는 주요 구성 요소로는 Uvicorn, Starlette, Swagger UI 및 Pydantic이 있습니다. 이 가이드에서는 이러한 각 구성 요소를 살펴보고 핵심 개념을 보여주는 코드 예제와 함께 FastAPI에서 구성 요소가 어떻게 결합되는지 살펴보겠습니다.


1. FastAPI의 핵심

FastAPI는 두 가지 주요 기반을 기반으로 구축되었습니다.

  • 비동기 프로그래밍: Python의 비동기 및 대기 기능을 활용하는 FastAPI는 동시에 많은 요청을 처리할 수 있으므로 동시성이 필요한 애플리케이션에 효율적입니다.
  • 유형 주석: FastAPI는 Python의 유형 힌트를 사용하여 요청 및 응답 데이터를 자동으로 검증하고 직렬화하므로 개발이 더 빠르고 안전해집니다.

구조에 대한 아이디어를 얻기 위해 간단한 FastAPI 앱부터 시작해 보겠습니다.

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

이것은 {"Hello": "World"}로 JSON 응답을 반환하는 단일 경로(/)가 있는 기본 FastAPI 애플리케이션입니다.

이 앱을 실행하려면 비동기 웹 애플리케이션을 제공하도록 설계된 ASGI 서버인 Uvicorn을 사용합니다.


2. Uvicorn: ASGI 서버

Uvicorn은 비동기 코드 처리에 최적화된 초고속 ASGI 서버입니다. 이는 들어오는 HTTP 요청을 처리하고 이러한 요청의 수명주기를 관리하기 때문에 FastAPI 애플리케이션을 실행하는 데 필수적입니다.

Uvicorn으로 FastAPI 앱을 실행하려면 다음 명령을 사용하세요.

uvicorn main:app --reload
  • main:app은 Uvicorn이 main.py 파일에서 앱 인스턴스를 찾아야 함을 지정합니다.
  • --reload는 개발 중에 핫 리로드를 활성화하므로 변경 사항을 저장할 때마다 서버가 자동으로 다시 로드됩니다.

이 명령을 실행하면 Uvicorn이 FastAPI 앱 제공을 시작하며 http://127.0.0.1:8000에서 액세스할 수 있습니다.


3. Starlette: FastAPI의 웹 프레임워크 기초

FastAPI는 라우팅, 미들웨어, WebSocket 지원을 비롯한 핵심 HTTP 작업을 처리하는 경량 ASGI 프레임워크인 Starlette를 기반으로 구축되었습니다. Starlette는 FastAPI가 HTTP 요청을 관리하는 데 사용하는 하위 수준 도구를 제공하여 웹 애플리케이션 구축을 위한 안정적이고 성능이 뛰어난 기반을 만듭니다.

FastAPI는 Starlette의 라우팅 시스템을 활용하여 API 엔드포인트를 정의합니다. 예:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

이 예에서는:

  • @app.get("/items/{item_id}")는 경로 매개변수 item_id를 사용하여 경로를 정의합니다.
  • FastAPI는 Starlette의 라우팅 시스템을 유형 확인 및 검증과 통합하여 이 경로 매개변수 유형(여기서는 int)을 처리합니다.

Starlette를 사용하면 CORS(Cross-Origin Resource Sharing) 처리, 요청 로깅 또는 사용자 정의 인증과 같은 다양한 작업을 위해 미들웨어를 추가할 수도 있습니다.

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

Starlette의 이러한 유연성 덕분에 FastAPI는 구성 가능성이 높아 개발자가 필요에 따라 사용자 정의 미들웨어를 쉽게 추가할 수 있습니다.


4. Swagger UI: 대화형 API 문서

FastAPI는 Swagger UI를 사용하여 대화형 API 문서를 자동으로 생성합니다. 이 문서는 기본적으로 /docs에서 제공되며 이를 통해 개발자는 브라우저에서 직접 엔드포인트를 테스트할 수 있습니다.

이 내용을 실제로 보려면 FastAPI 앱을 시작하고 http://127.0.0.1:8000/docs를 방문하세요. 모든 경로, 해당 매개변수 및 예상 응답을 나열하는 대화형 Swagger UI가 표시됩니다.

또 다른 문서 인터페이스인 ReDoc도 기본적으로 /redoc에 제공되어 API 사양에 대한 더 자세한 보기를 제공합니다.


5. Pydantic: 데이터 검증 및 직렬화

FastAPI의 가장 강력한 측면 중 하나는 데이터 검증을 위해 Pydantic을 사용한다는 것입니다. Pydantic 모델을 사용하면 엄격한 유형 제약 조건과 자동 유효성 검사를 통해 요청 및 응답 데이터의 구조를 정의할 수 있습니다.

예제에 Pydantic 모델을 추가해 보겠습니다.

uvicorn main:app --reload

이 코드에서는:

  • Item 모델은 BaseModel에서 상속되며 이름, 가격, is_offer의 세 가지 필드를 정의합니다. 이러한 필드에는 특정 데이터 유형과 is_offer에 대한 선택적 기본값이 있습니다.
  • JSON 데이터와 함께 /items/{item_id}에 요청을 보내면 FastAPI는 Pydantic을 사용하여 항목 모델에 대해 데이터를 검증하고 가능한 경우 자동으로 데이터 유형을 변환합니다.

/docs에서 Swagger UI를 사용하여 이와 같은 요청을 보내보세요.

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

FastAPI는 데이터의 유효성을 검사하고 데이터가 예상 유형과 일치하지 않으면 자동으로 오류를 반환합니다. 예를 들어 가격이 문자열(예: "20")로 제공되면 FastAPI는 자세한 유효성 검사 오류로 응답합니다.


6. 모두 합치기

더 많은 경로를 추가하고 지금까지 배운 모든 내용을 결합하여 앱을 확장해 보겠습니다.

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

이 설정을 사용하면:

  • 라우팅 및 매개변수 처리: @app.get("/items/{item_id}") 엔드포인트는 경로 매개변수와 쿼리 매개변수(예: q)를 보여줍니다.
  • 예외 처리: 사용자 정의 오류 응답(예: 항목을 찾을 수 없는 경우)에 HTTPException을 사용합니다.
  • CORS: CORS 미들웨어를 사용하면 다양한 도메인에서 요청할 수 있으며 이는 웹 앱의 프런트엔드-백엔드 통신에 중요합니다.

애플리케이션 실행

이 애플리케이션을 실행하려면 Uvicorn을 사용하세요.

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

http://127.0.0.1:8000/docs로 이동하여 대화형 문서를 확인하거나 cURL 또는 Postman과 같은 도구를 사용하여 다양한 엔드포인트에 요청을 보냅니다.


요약

FastAPI는 비동기 프로그래밍의 성능 이점과 Python 유형 힌트의 단순성을 결합하여 빠르고 사용하기 쉬우며 프로덕션 애플리케이션에 적합한 프레임워크를 만듭니다. FastAPI는 Uvicorn, Starlette, Swagger UI 및 Pydantic을 통합하여 놀라울 정도로 간소화된 API 개발 접근 방식을 제공하므로 신속한 프로토타이핑 및 프로덕션 등급 애플리케이션 모두에 탁월한 선택이 됩니다.

이러한 핵심 기본 사항을 갖추었으므로 이제 FastAPI의 세계에 대해 더 깊이 알아보고 확장 가능한 고성능 애플리케이션을 구축할 수 있습니다.

참조

  1. FastAPI 문서
  2. Uvicorn 문서
  3. 스타렛 문서
  4. Pydantic 문서
  5. Swagger UI 문서

위 내용은 FastAPI 기초 이해: FastAPI, Uvicorn, Starlette, Swagger UI 및 Pydantic 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.