Puedes establecer los siguientes campos que se usan en la especificación OpenAPI y en las interfaces automáticas de docs de la API:
Parameter
Tipo
Descripción
title
str
El título de la API.
summary
str
Un breve resumen de la API. Disponible desde OpenAPI 3.1.0, FastAPI 0.99.0.
description
str
Una breve descripción de la API. Puede usar Markdown.
version
str
La versión de la API. Esta es la versión de tu propia aplicación, no de OpenAPI. Por ejemplo 2.5.0.
terms_of_service
str
Una URL a los Términos de Servicio de la API. Si se proporciona, tiene que ser una URL.
contact
dict
The contact information for the exposed API. It can contain several fields. Campos de contact
Parameter
Tipo
Descripción
name
str
El nombre identificador de la persona/organización de contacto.
url
str
La URL que apunta a la información de contacto. DEBE estar en formato de URL.
email
str
El correo electrónico de la persona/organización de contacto. DEBE estar en formato de correo electrónico.
license_info
dict
The license information for the exposed API. It can contain several fields. Campos de license_info
Parameter
Tipo
Descripción
name
str
REQUIRED (si se establece license_info). El nombre de la licencia usada para la API.
identifier
str
Una expresión de licencia SPDX para la API. El campo identifier es mutuamente excluyente del campo url. Disponible desde OpenAPI 3.1.0, FastAPI 0.99.0.
url
str
Una URL a la licencia usada para la API. DEBE estar en formato de URL.
Puedes establecerlos de la siguiente manera:
fromfastapiimportFastAPIdescription="""ChimichangApp API helps you do awesome stuff. 🚀## ItemsYou can **read items**.## UsersYou will be able to:* **Create users** (_not implemented_).* **Read users** (_not implemented_)."""app=FastAPI(title="ChimichangApp",description=description,summary="Deadpool's favorite app. Nuff said.",version="0.0.1",terms_of_service="http://example.com/terms/",contact={"name":"Deadpoolio the Amazing","url":"http://x-force.example.com/contact/","email":"dp@x-force.example.com",},license_info={"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0.html",},)@app.get("/items/")asyncdefread_items():return[{"name":"Katana"}]
Consejo
Puedes escribir Markdown en el campo description y se renderizará en la salida.
Con esta configuración, las docs automáticas de la API se verían así:
Desde OpenAPI 3.1.0 y FastAPI 0.99.0, también puedes establecer el license_info con un identifier en lugar de una url.
Por ejemplo:
fromfastapiimportFastAPIdescription="""ChimichangApp API helps you do awesome stuff. 🚀## ItemsYou can **read items**.## UsersYou will be able to:* **Create users** (_not implemented_).* **Read users** (_not implemented_)."""app=FastAPI(title="ChimichangApp",description=description,summary="Deadpool's favorite app. Nuff said.",version="0.0.1",terms_of_service="http://example.com/terms/",contact={"name":"Deadpoolio the Amazing","url":"http://x-force.example.com/contact/","email":"dp@x-force.example.com",},license_info={"name":"Apache 2.0","identifier":"Apache-2.0",},)@app.get("/items/")asyncdefread_items():return[{"name":"Katana"}]
Probémoslo en un ejemplo con tags para users y items.
Crea metadata para tus tags y pásala al parámetro openapi_tags:
fromfastapiimportFastAPItags_metadata=[{"name":"users","description":"Operations with users. The **login** logic is also here.",},{"name":"items","description":"Manage items. So _fancy_ they have their own docs.","externalDocs":{"description":"Items external docs","url":"https://fastapi.tiangolo.com/",},},]app=FastAPI(openapi_tags=tags_metadata)@app.get("/users/",tags=["users"])asyncdefget_users():return[{"name":"Harry"},{"name":"Ron"}]@app.get("/items/",tags=["items"])asyncdefget_items():return[{"name":"wand"},{"name":"flying broom"}]
Ten en cuenta que puedes usar Markdown dentro de las descripciones, por ejemplo "login" se mostrará en negrita (login) y "fancy" se mostrará en cursiva (fancy).
Consejo
No tienes que añadir metadata para todos los tags que usas.
Usa el parámetro tags con tus operaciones de path (y APIRouters) para asignarlas a diferentes tags:
fromfastapiimportFastAPItags_metadata=[{"name":"users","description":"Operations with users. The **login** logic is also here.",},{"name":"items","description":"Manage items. So _fancy_ they have their own docs.","externalDocs":{"description":"Items external docs","url":"https://fastapi.tiangolo.com/",},},]app=FastAPI(openapi_tags=tags_metadata)@app.get("/users/",tags=["users"])asyncdefget_users():return[{"name":"Harry"},{"name":"Ron"}]@app.get("/items/",tags=["items"])asyncdefget_items():return[{"name":"wand"},{"name":"flying broom"}]
El orden de cada diccionario de metadata de tags también define el orden mostrado en la interfaz de docs.
Por ejemplo, aunque users iría después de items en orden alfabético, se muestra antes de ellos, porque añadimos su metadata como el primer diccionario en la lista.
Si quieres deshabilitar completamente el esquema OpenAPI puedes establecer openapi_url=None, eso también deshabilitará las interfaces de documentación que lo usan.