La API de LinkedIn: versiones que caducan y subidas que devuelven HTML
Integrar LinkedIn en el panel de publicación fue la integración que más rondas de diagnóstico costó, y casi todas por la misma razón: adivinar la causa en vez de verificarla contra la API real. Estas son las causas que resultaron ser ciertas, y la lección de proceso que dejó.
Un 400 que devuelve una página web
Publicar una imagen en LinkedIn tiene tres pasos: registrar la subida, enviar el archivo binario a una URL prefirmada y crear la publicación que lo referencia. El segundo paso fallaba con HTTP 400, y el cuerpo de la respuesta no era un JSON de error sino la página web completa de LinkedIn. Eso hace pensar en problemas de ruteo, un firewall o el agente de usuario, y ninguna de esas era la causa.
La causa real estaba en cómo se enviaba el archivo. Al pasarle a cURL el
contenido como cuerpo de un POST, cURL agrega por su cuenta un encabezado
que declara el contenido como formulario codificado. LinkedIn rechaza el
binario con ese tipo. La solución fue replicar el comportamiento de
curl --upload-file: enviar el archivo como flujo de subida.
Probado contra la API real, la variante original devolvía 400 y las
variantes con subida en flujo o con el tipo de contenido explícito
devolvían 201.
Versiones que caducan
La API actual de LinkedIn exige un encabezado con la versión en formato año y mes. Solo alrededor de doce meses son válidos a la vez. Una versión que funcionaba en los ejemplos consultados ya no estaba activa, y la API respondía que la versión solicitada no existía. La corrección es trivial, pero hay que saber que se repetirá: cada cierto tiempo la constante de versión debe avanzar.
La API vieja de subidas ya no está
Muchos ejemplos en internet usan la antigua API de activos para registrar subidas. Para apps nuevas está retirada. Hay que usar los endpoints actuales de imágenes, videos y publicaciones, con el encabezado de versión y el de protocolo que la documentación exige.
Imagen con token, video sin token
Un detalle contraintuitivo que está en la documentación pero es fácil pasar por alto: la subida del binario de una imagen debe llevar el token de autorización, y la de un video no debe llevarlo. En ambos casos la URL es prefirmada, pero solo la de video rechaza la petición si se agrega el token.
El identificador está en el encabezado
Al crear la publicación, la API responde 201 con el cuerpo vacío. El identificador de la publicación viene en un encabezado de la respuesta. Leerlo del cuerpo deja un valor vacío, y después la opción de eliminar la publicación no funciona porque no sabe qué borrar.
Tokens que vencen sin renovación
En el nivel de acceso disponible, el token de LinkedIn dura unos 60 días y no incluye token de renovación. Hay que reautorizar a mano. El panel muestra la fecha de vencimiento en la pantalla de canales, y lo ideal es avisar antes de que venza, no enterarse cuando falla una publicación programada.
La lección de proceso
Cuando una API externa devuelve algo raro, no se adivina: se escribe un script que pruebe variantes contra la API real e imprima el código de cada una.
El script que resolvió el problema de la subida hacía el registro una vez y luego probaba cuatro formas distintas de enviar el binario, mostrando el resultado de cada una. En diez minutos respondió lo que horas de cambios a ciegas no habían resuelto. Es la herramienta de diagnóstico más útil para cualquier integración con una API que responde de forma poco clara.