Je migre un service de Flask vers FastAPI et j'utilise des modèles Pydantic pour générer la documentation. Cependant, je ne suis pas sûr de la vérification du schéma. J'ai peur qu'il y ait des données inattendues (comme un format de champ différent) et cela renverra une erreur.

Dans la documentation Pydantic, il existe des moyens de créer un modèle sans vérifier le schéma: https://pydantic-docs.helpmanual.io/usage/models/#creating-models-without-validation

Cependant, comme cela est apparemment instancié par FastAPI lui-même, je ne sais pas comment désactiver cette vérification de schéma lors du retour de FastAPI.

1
Felipe Nunes 14 janv. 2021 à 00:23

2 réponses

Meilleure réponse

Vous pouvez renvoyer Réponse directement, ou en utilisant réponses personnalisées pour la conversion automatique. Dans ce cas, les données de réponse ne sont pas validées par rapport au modèle de réponse. Mais vous pouvez toujours le documenter comme décrit dans Réponses supplémentaires dans OpenAPI.

Exemple:

class SomeModel(BaseModel):
    num: int


@app.get("/get", response_model=SomeModel)
def handler(param: int):
    if param == 1:  # ok
        return {"num": "1"}
    elif param == 2:  # validation error
        return {"num": "not a number"}  # validation error
    elif param == 3:  # ok (return without validation)
        return JSONResponse(content={"num": "not a number"})
    elif param == 4:  # ok (return without validation and conversion)
        return Response(content=json.dumps({"num": "not a number"}), media_type="application/json")
0
alex_noname 14 janv. 2021 à 13:55

FastAPI n'applique aucun type de validation, donc si vous ne le souhaitez pas, n'utilisez simplement pas de modèles Pydantic ou d'indices de type.

app.get('/')
async def your_function(input_param):
  return { 'param': input_param }

# Don't use models or type hints when defining the function params.
# `input_param` can be anything, no validation will be performed.
0
Sushi2all 14 janv. 2021 à 13:02
65709999