fastapi/docs/ko/docs/how-to/extending-openapi.md

3.7 KiB

OpenAPI 확장하기

생성된 OpenAPI 스키마를 수정해야 하는 경우가 있습니다.

이 섹션에서 그 방법을 살펴보겠습니다.

일반적인 과정

일반적인(기본) 과정은 다음과 같습니다.

FastAPI 애플리케이션(인스턴스)에는 OpenAPI 스키마를 반환해야 하는 .openapi() 메서드가 있습니다.

애플리케이션 객체를 생성하는 과정에서 /openapi.json(또는 openapi_url에 설정한 경로)용 경로 처리가 등록됩니다.

이 경로 처리는 애플리케이션의 .openapi() 메서드 결과를 JSON 응답으로 반환할 뿐입니다.

기본적으로 .openapi() 메서드는 프로퍼티 .openapi_schema에 내용이 있는지 확인하고, 있으면 그 내용을 반환합니다.

없으면 fastapi.openapi.utils.get_openapi에 있는 유틸리티 함수를 사용해 생성합니다.

그리고 get_openapi() 함수는 다음을 파라미터로 받습니다:

  • title: 문서에 표시되는 OpenAPI 제목.
  • version: API 버전. 예: 2.5.0.
  • openapi_version: 사용되는 OpenAPI 스펙 버전. 기본값은 최신인 3.1.0.
  • summary: API에 대한 짧은 요약.
  • description: API 설명. markdown을 포함할 수 있으며 문서에 표시됩니다.
  • routes: 라우트 목록. 각각 등록된 경로 처리입니다. app.routes에서 가져옵니다.

/// info | 정보

summary 파라미터는 OpenAPI 3.1.0 이상에서 사용할 수 있으며, FastAPI 0.99.0 이상에서 지원됩니다.

///

기본값 덮어쓰기

위 정보를 바탕으로, 동일한 유틸리티 함수를 사용해 OpenAPI 스키마를 생성하고 필요한 각 부분을 덮어쓸 수 있습니다.

예를 들어, 커스텀 로고를 포함하기 위한 ReDoc의 OpenAPI 확장을 추가해 보겠습니다.

일반적인 FastAPI

먼저, 평소처럼 FastAPI 애플리케이션을 모두 작성합니다:

{* ../../docs_src/extending_openapi/tutorial001_py39.py hl[1,4,7:9] *}

OpenAPI 스키마 생성하기

그다음 custom_openapi() 함수 안에서, 동일한 유틸리티 함수를 사용해 OpenAPI 스키마를 생성합니다:

{* ../../docs_src/extending_openapi/tutorial001_py39.py hl[2,15:21] *}

OpenAPI 스키마 수정하기

이제 OpenAPI 스키마의 info "object"에 커스텀 x-logo를 추가하여 ReDoc 확장을 더할 수 있습니다:

{* ../../docs_src/extending_openapi/tutorial001_py39.py hl[22:24] *}

OpenAPI 스키마 캐시하기

생성한 스키마를 저장하기 위한 "cache"로 .openapi_schema 프로퍼티를 사용할 수 있습니다.

이렇게 하면 사용자가 API 문서를 열 때마다 애플리케이션이 스키마를 매번 생성하지 않아도 됩니다.

스키마는 한 번만 생성되고, 이후 요청에서는 같은 캐시된 스키마가 사용됩니다.

{* ../../docs_src/extending_openapi/tutorial001_py39.py hl[13:14,25:26] *}

메서드 오버라이드하기

이제 .openapi() 메서드를 새 함수로 교체할 수 있습니다.

{* ../../docs_src/extending_openapi/tutorial001_py39.py hl[29] *}

확인하기

http://127.0.0.1:8000/redoc로 이동하면 커스텀 로고(이 예시에서는 FastAPI 로고)를 사용하는 것을 확인할 수 있습니다: