Códigos de Estado Adicionales¶
🌐 Traducción por IA y humanos
Esta traducción fue hecha por IA guiada por humanos. 🤝
Podría tener errores al interpretar el significado original, o sonar poco natural, etc. 🤖
Puedes mejorar esta traducciónayudándonos a guiar mejor al LLM de IA.
Por defecto,FastAPI devolverá los responses usando unJSONResponse, colocando el contenido que devuelves desde tupath operation dentro de eseJSONResponse.
Usará el código de estado por defecto o el que configures en tupath operation.
Códigos de estado adicionales¶
Si quieres devolver códigos de estado adicionales aparte del principal, puedes hacerlo devolviendo unResponse directamente, como unJSONResponse, y configurando el código de estado adicional directamente.
Por ejemplo, supongamos que quieres tener unapath operation que permita actualizar elementos, y devuelva códigos de estado HTTP de 200 "OK" cuando sea exitoso.
Pero también quieres que acepte nuevos elementos. Y cuando los elementos no existían antes, los crea y devuelve un código de estado HTTP de 201 "Created".
Para lograr eso, importaJSONResponse, y devuelve tu contenido allí directamente, configurando elstatus_code que deseas:
fromtypingimportAnnotatedfromfastapiimportBody,FastAPI,statusfromfastapi.responsesimportJSONResponseapp=FastAPI()items={"foo":{"name":"Fighters","size":6},"bar":{"name":"Tenders","size":3}}@app.put("/items/{item_id}")asyncdefupsert_item(item_id:str,name:Annotated[str|None,Body()]=None,size:Annotated[int|None,Body()]=None,):ifitem_idinitems:item=items[item_id]item["name"]=nameitem["size"]=sizereturnitemelse:item={"name":name,"size":size}items[item_id]=itemreturnJSONResponse(status_code=status.HTTP_201_CREATED,content=item)🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromfastapiimportBody,FastAPI,statusfromfastapi.responsesimportJSONResponseapp=FastAPI()items={"foo":{"name":"Fighters","size":6},"bar":{"name":"Tenders","size":3}}@app.put("/items/{item_id}")asyncdefupsert_item(item_id:str,name:str|None=Body(default=None),size:int|None=Body(default=None),):ifitem_idinitems:item=items[item_id]item["name"]=nameitem["size"]=sizereturnitemelse:item={"name":name,"size":size}items[item_id]=itemreturnJSONResponse(status_code=status.HTTP_201_CREATED,content=item)Advertencia
Cuando devuelves unResponse directamente, como en el ejemplo anterior, se devuelve directamente.
No se serializará con un modelo, etc.
Asegúrate de que tenga los datos que deseas que tenga y que los valores sean JSON válidos (si estás usandoJSONResponse).
Detalles Técnicos
También podrías usarfrom starlette.responses import JSONResponse.
FastAPI proporciona los mismosstarlette.responses quefastapi.responses solo como una conveniencia para ti, el desarrollador. Pero la mayoría de los responses disponibles provienen directamente de Starlette. Lo mismo constatus.
OpenAPI y documentación de API¶
Si devuelves códigos de estado adicionales y responses directamente, no se incluirán en el esquema de OpenAPI (la documentación de la API), porque FastAPI no tiene una forma de saber de antemano qué vas a devolver.
Pero puedes documentarlo en tu código, usando:Responses Adicionales.







