스택큐힙리스트

FastAPI swagger는 쿼리 매개변수로 전달된 문자열 목록을 호감하지 않지만 브라우저에서는 작동합니다. 본문

카테고리 없음

FastAPI swagger는 쿼리 매개변수로 전달된 문자열 목록을 호감하지 않지만 브라우저에서는 작동합니다.

스택큐힙리스트 2023. 11. 6. 07:51
반응형

@app.get(/items/{item_ID})
async def getQuestion_byID(item_ID: int = Path(
...,
title = 문제의 숫자 ID,
description = 1부터 999 사이의 숫자를 지정하십시오,
ge = 1,
le = 999
), response: Optional[List[str]] = Query(
[],
title=답변을 제공하십시오,
description=알파벳 문자로만 이루어진 대소문자를 구분하지 않는 답변,
min_length=3,
max_length=99,
regex=^[a-zA-Z]+$
), short: bool = Query(
False,
title=짧은 결과에 대한 플래그 설정,
description=1, True, true, on, yes 값을 사용할 수 있음
)):

퀴즈 질문 또는 결과를 반환합니다.
경로 매개변수로 item ID를 받고,
선택적으로 쿼리 매개변수로 response를 받습니다.
response와 item ID가 함께 전달되면 결과를 반환합니다.
그렇지 않으면 퀴즈 질문을 반환합니다.

item = question_bank.get(item_ID, None)
if not item:
return {question: None}
if response:
return evaluate_response(item_ID, response, short)
else:
return {question: item[question]}

도움에 감사드립니다.

답변 1

from fastapi.openapi.utils import get_openapi
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title=FastAPI,
version=0.1.0,
description=이것은 매우 사용자 정의된 OpenAPI 스키마입니다,
routes=app.routes,
)
del openapi_schema[paths][/items/{item_ID}][get][parameters][1][schema][maxLength]
del openapi_schema[paths][/items/{item_ID}][get][parameters][1][schema][minLength]
del openapi_schema[paths][/items/{item_ID}][get][parameters][1][schema][pattern]

app.openapi_schema = openapi_schema
return app.openapi_schema


app.openapi = custom_openapi

위의 모든 솔루션에서, 일반적으로 OpenAPI에서 response 아래에 표시되는 제약 사항 주석((query) maxLength: 99 minLength: 3 pattern: ^[a-zA-Z]+$)은 나타나지 않습니다 (Swagger는 그 제약 사항을 array에 적용된 제약으로부터 생성하기 때문입니다). 하지만 이러한 내용을 보존하는 방법은 없는 것 같습니다. 그러나 Solutions 2와 3에서는, 위의 JSON 코드 스니펫에 표시된 in 속성을 수정하여 주석을 수동으로 추가할 수 있습니다. 하지만 Swagger에서 HTML 요소 등을 제어하기 때문에 전체 주석은 소괄호 안에 표시되고 제약 사항 사이에 줄 바꿈이 없을 것입니다. 그러나 여전히 items에 적용된 제약 사항을 Query 매개변수의 description에 명시함으로써 사용자에게 알릴 수 있습니다.

답변 2

최근 웹 개발 프레임워크인 FastAPI를 사용하여 개발한 API 중에서 Swagger가 쿼리 매개변수를 통해 전달되는 문자열의 목록을 지원하지 않는 문제가 발생했습니다. 하지만 이 문제는 브라우저를 통해 엔드포인트에 직접 접근하면 문제없이 작동하는 것을 확인할 수 있었습니다.
Swagger는 API의 구조와 기능을 문서화하고 시각화하기 위해 많이 사용되는 도구입니다. 이를 통해 개발자들은 API를 사용하는 방법을 쉽게 이해하고 테스트할 수 있습니다. 그러나 FastAPI에서는 Swagger가 쿼리 매개변수로 전달되는 문자열의 목록을 지원하지 않는 점이 아쉬웠습니다.
쿼리 매개변수는 API 엔드포인트에 추가 정보를 제공하기 위해 사용됩니다. 문자열의 목록은 다양한 용도로 사용될 수 있는데, 예를 들어 사용자가 원하는 검색어 목록을 전달하거나 여러 가지 선택 항목을 지정하는 등의 경우에 활용될 수 있습니다. 이러한 기능은 API의 유연성과 사용성을 향상시키는 데 중요합니다.
하지만 FastAPI의 Swagger에서는 문자열의 목록을 표현하는 형식을 지원하지 않아 사용자들은 이를 직접적으로 입력할 수 없는 문제가 있습니다. 이로 인해 API의 사용자들이 해당 기능을 사용하기 위해서는 직접 API 엔드포인트에 접근하여 쿼리 매개변수를 입력해야 합니다.
이러한 제한은 사용자 경험을 저해할 수 있으며, 개발자들이 API 기능을 더욱 쉽게 이해하고 활용할 수 있도록 문서화하는 데 어려움을 야기할 수 있습니다. 따라서 FastAPI의 개발자들은 이러한 문제를 해결하기 위해 개선을 시도해야 할 것입니다.
FastAPI는 이미 인기있는 프레임워크로서 다양한 기능과 편의성을 제공합니다. 그러나 더 나은 개발 경험을 위해서는 FastAPI의 Swagger가 문자열 목록을 지원하는 별도의 기능을 추가하는 것이 필요합니다. 이를 통해 개발자들은 API의 기능과 매개변수에 대한 이해를 돕고, 사용자들은 검색어나 선택 항목과 같은 문자열 목록을 편리하게 입력할 수 있게 될 것입니다.
결론적으로, FastAPI의 Swagger가 쿼리 매개변수에 문자열 목록을 지원하지 않는 문제가 있지만, 이는 브라우저를 통해 엔드포인트에 직접 접근하면 작동하는 것으로 확인되었습니다. 개발자들은 FastAPI의 Swagger를 더욱 향상시키기 위해 문자열의 목록을 지원하는 기능을 추가해야 합니다. 이를 통해 API 사용자들은 더욱 편리하게 API를 활용할 수 있으며, FastAPI는 더욱 많은 사용자들에게 인기를 얻게 될 것입니다.

반응형
Comments