Flask-Jeroboam valide et sérialise vos réponses en utilisant les modèles Pydantic. Cela garantit que votre API retourne les données dans le format attendu et détecte les bugs avant qu’ils n’atteignent les clients.
Parfois, vous récupérez plus de données que vous ne voulez les retourner :
classItemOut(BaseModel):id:intname:strprice:floatclassConfig:# Seuls ces champs sont inclus dans les réponsesfields={"id","name","price"}@app.get("/items/<int:item_id>",response_model=ItemOut)defget_item(item_id:int):# Le modèle interne peut avoir secret_key, password, etc.item=fetch_item_internal(item_id)returnitem# Seuls id, name, price sont retournés
fromtypingimportOptional@app.get("/items/<int:item_id>",response_model=Optional[ItemOut])defget_item_if_exists(item_id:int):item=fetch_item(item_id)returnitem# Pourrait être None
Pydantic force les valeurs à correspondre au modèle :
classItemOut(BaseModel):id:intquantity:int@app.get("/items/<int:item_id>",response_model=ItemOut)defget_item(item_id:int):# fetch_item retourne les quantités sous forme de chaînes "42"item=fetch_item(item_id)returnitem# Pydantic force "42" à 42
Votre code retourne des chaînes mais la réponse contient des entiers.
Comment sérialiser les réponses¶
Flask-Jeroboam valide et sérialise vos réponses en utilisant les modèles Pydantic. Cela garantit que votre API retourne les données dans le format attendu et détecte les bugs avant qu’ils n’atteignent les clients.
Modèles de réponse simples¶
Définissez ce que votre endpoint retourne en utilisant les modèles Pydantic :
Jeroboam valide que votre valeur de retour correspond à ItemOut. Si un champ manque, une erreur est levée en développement.
Listes et collections¶
Retournez des listes en enveloppant le modèle dans un type liste :
Alias de champ¶
Sérialisez avec des noms différents de vos champs Python :
Le JSON de réponse sera
{"name": "...", "price": ...}même si votre code Python utilise des noms différents.Exclure les champs¶
Parfois, vous récupérez plus de données que vous ne voulez les retourner :
Réponses imbriquées¶
Utilisez des modèles imbriqués pour les structures complexes :
La réponse inclura l’objet auteur imbriqué, sérialisé automatiquement.
Réponses optionnelles¶
Les endpoints peuvent retourner None parfois :
Retourner None sera sérialisé en
nullen JSON.Coercition de type¶
Pydantic force les valeurs à correspondre au modèle :
Votre code retourne des chaînes mais la réponse contient des entiers.
Champs calculés¶
Ajoutez des champs qui sont calculés à la volée :
La réponse inclut
total_valuemême si ce n’est pas dans la base de données. Elle est calculée à partir de quantity et price_each.Sérialiseurs personnalisés¶
Transformez les données pendant la sérialisation :
Les datetimes sont sérialisés en chaînes ISO au lieu du format par défaut.