Build in Public · LF-13
Cómo el catálogo de capacidades en tiempo real reduce la deriva en la documentación: verifica por separado declaraciones, ejecución y entrega
Diseña instantáneas del catálogo, diferencias de contrato y comprobaciones de ejemplos a partir de las discrepancias reales de identificadores, parámetros y descubrimiento MCP; especifica la caché, los campos faltantes y los umbrales de publicación para no equiparar la consistencia del catálogo con la disponibilidad total del servicio.
Al escribir documentación de API, el error más peligroso suele parecer muy razonable. Escribir google_maps para una plataforma de reseñas de lugares parece más recordable que google_maps_reviews, y añadir since a cada endpoint de reseñas encaja con la intuición de crear una ingesta incremental. Sin embargo, lo razonable no garantiza la compatibilidad real, y los lectores que copian estos ejemplos se atascan en el primer paso.
Durante esta revisión de contenido en EveryInfra, contrastamos las capacidades citadas en el artículo con el catálogo público y realizamos una comprobación de solo lectura de la implementación. Este proceso vuelve a demostrar que un catálogo en tiempo real resulta útil, pero no constituye una prueba infalible de corrección. El mantenimiento de la documentación exige responder simultáneamente a qué declara el servicio, qué ocurrió en esta solicitud y qué obtuvo la empresa, en lugar de limitarse a mostrar un estado verde.
Valor del catálogo a partir de tres discrepancias concretas
La primera concierne a la identidad de la plataforma. El 2026-09-04 a las 46 (hora de Pekín), la consulta al catálogo público de google_maps devuelve HTTP 400 unknown_capability, con una sugerencia que incluye google_maps_reviews. Aunque el catálogo identifica el nombre erróneo, el editor debe confirmar que el objetivo corresponde efectivamente a las reseñas de lugares, sin adoptar automáticamente ningún candidato similar.
La segunda se refiere a los parámetros de reseñas de Amazon. La entrada pública del mismo día solo especifica url y domain, sin declarar valores numéricos para default_limit o max_limit. Aunque la implementación local ofrece descripciones de parámetros más detalladas, estas no deben presentarse como una capacidad desplegada. El cuerpo del texto debe atenerse a rangos verificables; ante la ausencia de un límite declarado, solo cabe registrarlo como desconocido en lugar de asumir una cantidad ilimitada.
La tercera atañe al descubrimiento MCP. La sonda de 20:43 lee seis herramientas, pero la notificación de inicialización completada incluye un cuerpo de respuesta inesperado. Que coincidan el nombre y el número de herramientas no basta para garantizar que el protocolo cumpla estrictamente los requisitos, ni mucho menos para asegurar que cada cliente haya completado la autenticación y la invocación real. Esta diferencia exige su propia validación y no debe ocultarse tras un catálogo que se muestre normal.
La reevaluación bajo la misma ruta en 2026-09-08 conserva este antecedente al tiempo que confirma que el catálogo público se ha ampliado a ocho herramientas y que la notificación de inicialización completada devuelve un código HTTP 202 con un cuerpo de respuesta de 0 bytes. La discrepancia anterior no se reprodujo en esta ocasión, pero como todavía no se ha ejecutado ninguna herramienta de negocio, esto no valida la autenticación del host, los resultados reales ni la compatibilidad a largo plazo.
Estos tres casos corresponden respectivamente a la identidad, el alcance de las declaraciones y el comportamiento del protocolo. Todos afectan a la integración, pero requieren tratamientos distintos: corregir los nombres incorrectos, acotar los compromisos de la documentación y conservar las condiciones de revisión del protocolo. Agrupar todas las diferencias bajo el término genérico de documentación obsoleta oculta quién debe resolver cada problema y cómo se verifica.
Estratificación en estructura, ejecución y entrega
- Evidencia estructural: el catálogo actual especifica la acción, los parámetros obligatorios, los valores permitidos y los campos devueltos para construir peticiones y analizar estrategias.
- Evidencia de ejecución: se completa una operación GET, petición HTTP o descubrimiento por protocolo específico, registrando la entrada, el tipo de respuesta, el estado y la hora de observación.
- Evidencia de entrega: un objetivo de negocio autorizado obtiene contenido acorde al contrato, verificando resultados vacíos, finalizaciones parciales, fallos y tarificación mediante una validación de negocio independiente.
La presencia de owner_response en el catálogo no garantiza que todas las reseñas cuenten con una respuesta del establecimiento. Obtener 200 tampoco demuestra que se haya completado toda la paginación. El éxito de una muestra empresarial no valida la disponibilidad de cada elemento del catálogo. El artículo debe mantener el nivel de evidencia correspondiente junto a cada afirmación para evitar que una comprobación débil respalde un compromiso excesivo.
Reutilización de contratos legibles por máquina en lugar de múltiples explicaciones
Una misma capacidad puede aparecer en la documentación HTTP, el catálogo de capacidades, las descripciones de campos, los esquemas MCP y los ejemplos de los artículos. Al realizar el mantenimiento, puedes centralizar la identificación, las entradas y las definiciones de campos en un contrato reutilizable, delegando responsabilidades específicas en cada canal: el catálogo ayuda al descubrimiento, la página de campos explica la semántica, los ejemplos aclaran las tareas del lector y las pruebas contrastan el comportamiento en ejecución.
EveryInfra permite respaldar este enfoque de reutilización mediante la representación del contrato de capacidad y la validación de parámetros en el código actual; sin embargo, la existencia de funciones compartidas no garantiza que todas las páginas en línea y las instancias desplegadas se encuentren sincronizadas. Del mismo modo, la lectura del mismo catálogo por parte de textos redactados manualmente no les otorga automáticamente casos de uso, límites de autorización ni avisos de error correctos.
OpenAPI describe las interfaces HTTP y su estructura como parte de este enfoque de mantenimiento. No obstante, las aplicaciones prácticas exigen documentar explícitamente la semántica de las acciones, los campos faltantes, los rangos de muestras y las restricciones de uso. Aunque la generación automática reduce los errores al copiar campos, no sustituye el criterio editorial a la hora de evaluar si una frase amplía indebidamente el alcance de una capacidad.
La comparación estructural también debe distinguir entre properties, required y null. La guía oficial de JSON Schema aclara que los campos listados en properties no son obligatorios por defecto. Comparar únicamente los conjuntos de nombres de campos puede pasar por alto cambios de integración como la conversión de un campo opcional en obligatorio; a la inversa, permitir la ausencia de un campo no autoriza el uso de valores nulos explícitos.
Consulta exclusiva de los contratos necesarios en cada tutorial
Al realizar integraciones, determina primero la plataforma y el objeto antes de acotar la acción. El siguiente comando lee únicamente el catálogo público sin recuperar reseñas ni emplear claves. Como jq muestra como nulas las propiedades seleccionadas que no devuelven datos, es preciso diferenciar entre la ausencia de un campo en la respuesta original y un valor nulo asignado explícitamente; ninguna de las dos situaciones debe interpretarse arbitrariamente como cero.
curl -fsS --max-time 30 \
'https://api.everyinfra.com/api/v1/social/catalog?platform=amazon' \
| jq -e '.capabilities[] | select(.action == "reviews") | {
platform, action, required_params, optional_params, param_meanings,
mode, returns_list, default_limit, max_limit, response_fields
}'Adjunta a esta observación la URL de origen, la hora de obtención y un resumen de la respuesta real. Si una solicitud o su análisis fallan, evita generar un catálogo vacío que sobrescriba la instantánea anterior; conserva el contenido previo y el estado de error para que los mantenedores sepan que no se ha podido obtener la nueva declaración y no que el servicio ha eliminado todas sus capacidades.
Registra los parámetros y campos de respuesta utilizados en tu propia aplicación. La incorporación de campos en una acción no relacionada no exige necesariamente interrumpir la tarea actual, pero cualquier cambio en los parámetros obligatorios o en la forma de la salida empleados requiere un responsable asignado. La detección de diferencias debe recaer en los consumidores reales y no limitarse a reportar variaciones en el recuento total de elementos.
Comparación de diferencias semánticas en lugar de textos JSON completos
Las modificaciones en el orden de las claves de los objetos, la disposición de las listas o los textos descriptivos pueden alterar considerablemente el aspecto del archivo sin modificar el modo de invocación. En contraste, cambiar un solo valor de returns_list de true a false basta para invalidar el analizador sintáctico. Selecciona primero los campos que deseas comprobar y procesa las diferencias por categorías.
function contractDiff(before, after) {
if (before.platform !== after.platform || before.action !== after.action) {
throw new Error("compare the same capability");
}
const normalize = row => {
const names = key => {
const values = row[key];
if (!Array.isArray(values)
|| values.some(v => typeof v !== "string" || !v.trim())
|| new Set(values).size !== values.length) {
throw new Error("explicit unique field list required");
}
return [...values].sort();
};
if (typeof row.mode !== "string" || !row.mode
|| typeof row.returns_list !== "boolean") {
throw new Error("explicit mode and result shape required");
}
return {
required_params: names("required_params"),
response_fields: names("response_fields"),
mode: row.mode, returns_list: row.returns_list
};
};
const left = normalize(before), right = normalize(after);
return Object.keys(left).filter(key =>
JSON.stringify(left[key]) !== JSON.stringify(right[key]));
}
const baseline = {
platform: "synthetic", action: "comments",
required_params: ["url"], response_fields: ["id", "text"],
mode: "sync", returns_list: true
};
console.log(contractDiff(baseline, {
...baseline, response_fields: ["text", "id"]
}));
console.log(contractDiff(baseline, {
...baseline, required_params: ["url", "region"]
}));Los dos resultados sintéticos corresponden a la ausencia de cambios y a modificaciones en required_params respectivamente. Este mecanismo contrasta cuatro estructuras explícitas y no implementa una evaluación completa de compatibilidad; los parámetros opcionales, las enumeraciones, los tipos de campo, los límites de cantidad, la disponibilidad y las declaraciones de tarificación siguen requiriendo revisiones independientes. La omisión de una estructura genera un error en lugar de tratarse silenciosamente como una lista vacía.
Entre los cambios que exigen una revisión prioritaria figuran la adición de entradas obligatorias, la eliminación de campos utilizados, el acotamiento de enumeraciones o rangos numéricos y la modificación del modo de ejecución. Incluso al añadir campos de respuesta, debes comprobar si los sistemas de consumo rechazan incorrectamente los campos desconocidos. El detector se limita a señalar las modificaciones para que el mantenedor evalúe su impacto junto a los consumidores reales, sin generar conclusiones de compatibilidad automáticas.
La caché almacena observaciones, no garantías permanentes
La clave de caché debe diferenciar al menos la dirección del servicio, la plataforma y la acción, además de registrar la hora de obtención y la versión del protocolo o contrato empleado. Compartir la misma clave de caché entre múltiples entornos puede introducir declaraciones de prueba en producción. Los ciclos de revisión para la disponibilidad, los parámetros y el origen de los artículos también pueden diferir, por lo que no se debe enmascarar todo el riesgo con un único intervalo de tiempo.
Por ejemplo, si el equipo editorial programa una reevaluación de los datos para el día siguiente, se trata de una organización interna del trabajo y no de un compromiso del servidor de mantener inalterado su catálogo durante veinticuatro horas. Ante la aparición de parámetros desconocidos, cambios en la estructura de respuesta o actualizaciones de despliegue, debe iniciarse una actualización específica sin aguardar a que expire el temporizador fijo. Los contenidos obsoletos pueden consultarse con fines informativos, pero las operaciones críticas no deben seguir dependiendo de declaraciones antiguas sin confirmar.
Las instantáneas anteriores deben conservar su propia marca temporal. Actualizar la fecha antigua a la del día en curso cuando una nueva petición falla crea la falsa impresión de que la información ha sido verificada. Almacenar el historial de observaciones junto con el estado de la última comprobación permite explicar en qué estado del servicio se basó un tutorial determinado.
Si el servicio proporciona las cabeceras de respuesta adecuadas, puedes recurrir al mecanismo de peticiones condicionales y revalidación de la norma RFC 9111 para determinar si la caché es reutilizable. Este artículo no verifica si el catálogo admite ETag o 304; en ausencia de dicho contrato, no debes equiparar un resumen local con un validador del servidor ni denominar compromiso de caché del servidor al ciclo de revisión.
Tratamiento de los ejemplos del texto como un cliente más
La verificación de los ejemplos debe extraer el código directamente de los artículos en lugar de redactar una prueba paralela de apariencia similar. Los comandos de los catálogos gratuitos pueden comprobarse de forma directa; en el caso de las peticiones POST de negocio que carezcan de muestras autorizadas, verifica primero la sintaxis, la construcción de la petición y las ramas de respuesta sin conexión, dejando constancia de que los resultados del servicio aún no se han verificado. Evita situaciones en las que el código de prueba funcione correctamente mientras los lectores copian una versión que sitúa el parámetro limit en un nivel incorrecto.
Los enlaces también deben comprobarse según su finalidad. Las páginas de capacidades internas facilitan la continuidad de la integración, la documentación oficial respalda las definiciones originales de los productos y protocolos correspondientes, y el enlace oficial a una plataforma no implica que esta avale todos los usos posibles de EveryInfra. Asimismo, los artículos pendientes de publicación no deben remitir prematuramente a los lectores a un enlace de detalles sujeto a 404.
Orden de actuación ante la detección de desviaciones
- Lectura fallida: conserva el estado de error sin sobrescribirlo con un contrato nuevo y suspende las operaciones que dependan de dicha declaración si es necesario.
- Modificación del contrato: enumera los parámetros, campos y consumidores afectados para decidir si se actualizan los ejemplos, se adapta el código o se mantiene el bloqueo.
- Divergencia entre el estado local y el público: regístralos por separado y evita considerar que una modificación local equivale a un despliegue completado.
- Conflicto entre las declaraciones públicas y la entrega: conserva la muestra mínima autorizada, traslada el problema a los mantenedores del servicio y acota provisionalmente los compromisos en el artículo.
- Coincidencia de elementos: informa únicamente de la ausencia de diferencias en el ámbito de la comprobación actual, sin publicar automáticamente el artículo ni declarar que todas las integraciones han tenido éxito.
Inicia el proceso a partir de la acción de negocio utilizada con mayor frecuencia para establecer tres registros interconectados: la observación del catálogo, la comprobación de ejemplos y la aceptación de entrega. De este modo, la actualización de la documentación deja de consistir en un simple reemplazo de capturas de pantalla antiguas por otras nuevas y pasa a reflejar con precisión qué hecho ha cambiado, quién resulta afectado y qué evidencias respaldan la continuidad de uso.