Guías
Versionado y obsolescencia
Dentro de v1 Filmo solo añade cosas. Cualquier cosa que pueda romper tu integración se anuncia antes, ya sea como una nueva versión mayor o como una obsolescencia con al menos seis meses antes de la retirada.
La versión del contrato
Enlace a esta sección: La versión del contratoLa versión del contrato sigue semver y aparece en info. en el archivo OpenAPI. GET /api también la devuelve. Usa esa versión para identificar el contrato de tu integración. Consulta también la Referencia de OpenAPI.
Política de compatibilidad
Enlace a esta sección: Política de compatibilidad| Cambio | Dentro de v1 | Cómo te llega |
|---|---|---|
| Una operación nueva; un campo de petición, filtro o parámetro opcional nuevo | Aditivo: permitido | Se publica en cualquier versión sin aviso previo. Se registra en el changelog con la versión en la que llegó. |
| Una propiedad nueva en una respuesta; un valor nuevo en una unión de respuesta (un estado, un tipo) | Aditivo: permitido | Igual que arriba. |
| Una validación más laxa | Aditivo: permitido | Igual que arriba. |
| Eliminar o renombrar una operación, un campo o un parámetro; cambiar un tipo; hacer anulable una propiedad de la respuesta | Incompatible | Solo con una nueva versión mayor, o mediante una obsolescencia con aviso previo. |
| Endurecer una validación; cambiar el scope que requiere una operación | Incompatible | Igual que arriba. |
| Eliminar un campo | Nunca dentro de una versión mayor | Un campo que deja de tener sentido se marca como obsoleto en su esquema y se registra en el changelog. Solo se elimina en la siguiente versión mayor. |
Los campos con datos sensibles para el negocio (costes, márgenes, códigos de acceso, documentos fiscales internos, nóminas del personal y datos personales) quedan excluidos por diseño del borde público. Hoy no forman parte de la v1, así que no planifiques una integración en torno a ellos.
Cómo te llega una deprecación
Enlace a esta sección: Cómo te llega una deprecaciónUn cambio incompatible se hace exactamente de una de estas dos formas.
- En una nueva versión mayor,
/api. Filmo mantiene v1 en funcionamiento durante al menos doce meses después de anunciar v2./v2 - Mediante deprecación con aviso. La operación se marca como
deprecateden el archivo OpenAPI, con un objetox-deprecationque llevasince(la versión que la anunció),on(el día en que entra en vigor),sunset(el día en que desaparece),replacement(opcional) y unanote. Los días sonYYYY-MM-DD.
Una operación obsoleta te lo indica en tres sitios.
- Toda respuesta, incluidas las de error, lleva la cabecera
Deprecation(RFC 9745, una marca de tiempo Unix con el prefijo@) y la cabeceraSunset(RFC 8594, una fecha HTTP). - Las mismas respuestas llevan una cabecera
Linkcon dos relaciones:rel="deprecation"yrel="sunset", ambas apuntan a la documentación. - Todo cuerpo JSON correcto lleva una entrada
meta.conwarnings[] codepuesto endeprecated, unmessage, el díasunset, elreplacement(onullcuando no hay ninguno) y unlinka la documentación.
El día de sunset es al menos 180 días (seis meses) después del día en que la deprecación entra en vigor. La operación sigue funcionando hasta entonces y desaparece el día de sunset: después responde 404 not_found, antes incluso de autenticar la petición, así que un cliente que ignoró los avisos ve una operación inexistente en lugar de un error de autorización.
// Call this for every response you receive, with the parsed JSON body (or null).
export function noteDeprecation(method, path, res, body) {
const deprecation = res.headers.get("Deprecation");
const sunset = res.headers.get("Sunset");
const warned = (body?.meta?.warnings ?? []).some((w) => w.code === "deprecated");
if (deprecation || sunset || warned) {
console.warn("Deprecated:", method, path, { deprecation, sunset });
}
}def note_deprecation(method, path, res, body):
"""Call for every response, with the parsed JSON body (or None)."""
deprecation = res.headers.get("Deprecation")
sunset = res.headers.get("Sunset")
warnings = ((body or {}).get("meta") or {}).get("warnings") or []
warned = any(w.get("code") == "deprecated" for w in warnings)
if deprecation or sunset or warned:
print("Deprecated:", method, path, {"deprecation": deprecation, "sunset": sunset})El changelog
Enlace a esta sección: El changelogCada versión queda registrada en la pestaña Changelog de estos documentos, en el formato Keep a Changelog: un encabezado con la versión y la fecha ([x.) y, debajo, solo las secciones que tienen contenido entre Added, Changed, Deprecated, Removed y Fixed. Una línea de deprecación nombra la operación, el día en que quedó obsoleta, su día de retirada y el sustituto. Nada se elimina antes de su retirada. Suscríbete al feed y léelo antes de cada actualización de un cliente generado.
Escribe un cliente tolerante
Enlace a esta sección: Escribe un cliente toleranteLos cambios aditivos se publican sin aviso, así que tu integración debe tolerarlos.
- Ignora las propiedades de respuesta que no uses. No valides las respuestas con un esquema cerrado que rechace propiedades desconocidas.
- Gestiona los valores que no conozcas en una unión: un estado, un tipo. Hoy los estados son listas cerradas, y un valor nuevo es un cambio aditivo documentado. Da a cada switch una rama por defecto.
- Ten cuidado con los clientes generados con enums cerrados. Un valor nuevo puede hacer que lancen un error al procesar una respuesta.
- No controles la lógica con
detailni conerrors[].. Son para personas y cambian con el idioma. Ramifica segúnmessage code. - Configura alertas para las cabeceras
DeprecationySunsety parameta., de modo que una obsolescencia llegue a una persona al menos 180 días antes de la retirada.warnings[]
Las mismas comprobaciones están en la lista de comprobación de salida a producción.
Páginas relacionadas
Enlace a esta sección: Páginas relacionadasGuías
Archivo OpenAPI y clientes generados
Filmo publica toda su API como un archivo OpenAPI 3.1. Úsalo para generar un cliente tipado, para importar la API en Postman, Insomnia o Bruno, o para ejecutar un servidor mock en tu máquina.
Guías
Lista de comprobación de salida a producción
Repasa estas ocho comprobaciones antes de que tu integración funcione con datos de producción. Cada una remite a la guía que la explica.
Guías
Respuestas
Las respuestas correctas envuelven su contenido en
data; las listas añadenpagination; algunas operaciones añadenmeta; los errores son problemas RFC 9457. Las respuestas de la API comparten un mismo conjunto de cabeceras.
¿Te ha resultado útil esta página?