Estoy escribiendo una aplicación FastAPI en python y me gustaría usar los documentos de openapi que se generan automáticamente. En particular, me gustaría especificar ejemplos para el valor de respuesta. Sé cómo hacerlo cuando el modelo de response_model
es una clase que hereda del Modelo base de BaseModel
, pero tengo problemas cuando es una lista de tales clases. He aquí un ejemplo mínimo:
from fastapi import FastAPI from typing import List from pydantic import BaseModel, Field class Person(BaseModel): name: str = Field( ..., title="Name", description="The name of the person", example="Alice" ) age: int = Field( ..., title="Age", description="The age of the person", example=83 ) class Config: schema_extra = { 'examples': [ { "name": "Alice", "age": 83 }, { "name": "Bob", "age": 77 } ] } app = FastAPI() @app.get('/person', response_model=Person) def person(): return { "name": "Alice", "age": 83 } @app.get('/people', response_model=List[Person]) def people(): return [ { "name": "Alice", "age": 83 }, { "name": "Bob", "age": 77 } ]
En los documentos de openapi generados automáticamente, el valor de ejemplo para una respuesta exitosa para /person
es
{ "name": "Alice", "age": 83 }
que es lo que quiero. Sin embargo, para /people
es
[ { "name": "Alice", "age": 83 } ]
pero preferiría que fuera
[ { "name": "Alice", "age": 83 }, { "name": "Bob", "age": 77 } ]
¿Hay alguna manera de lograr eso? ¡Gracias de antemano!
Puede especificar su ejemplo en el parámetro de respuestas :
@app.get('/people', response_model=List[Person], responses={ 200: { "description": "People successfully found", "content": { "application/json": { "example": [ { "name": "Alice", "age": 83 }, { "name": "Bob", "age": 77 } ] } } }, 404: {"description": "People not found"} }) def people(): return [ { "name": "Alice", "age": 83 }, { "name": "Bob", "age": 77 } ]
Con este código, el ejemplo se especifica para el código de estado 200, pero también puede configurar el ejemplo para errores (o puede eliminar la entrada 404 si no desea que aparezca en su openapi).
Para más información puede consultar la documentación de FastAPI: https://fastapi.tiangolo.com/advanced/additional-responses/