Estamos ejecutando una API con bastante gente usándola. Debido a cierta torpeza heredada de mi parte, uno de los puntos finales está devolviendo el encabezado de tipo de contenido incorrecto , js
cuando debería ser json
. Mi pregunta es, si solucionamos esto intercambiando para devolver el valor correcto, ¿qué tan mal podría estropear las cosas para nuestros clientes existentes? O para decirlo de otra manera, ¿esperaría que muchas bibliotecas de clientes HTTP diferentes arrojen errores fatales al ver tal cambio?
Estamos tratando de decidir si este es un cambio que podemos seguir y hacer sin sudar demasiado, o deberíamos enviar un correo electrónico a todos los usuarios y anunciar un período de desaprobación de varios años ... o algo intermedio.
Probablemente depende un poco de qué tipo de clientes HTTP diferentes están en uso, así que eché un vistazo a los agentes de usuario. Respuesta: ¡muchos diferentes! Aquí hay algunos de los mejores:
"okhttp / 3.2.0", "solicitudes de pitón / 2.10.0", "Ruby", "solicitudes de pitón / 2.7.0", "Mozilla / 5.0", "Java / 1.8.0_91", "solicitudes de pitón /2.4.3 "," okhttp / 3.3.0 "," Lucee "," Dalvik / 2.1.0 "," Google-HTTP-Java-Client / 1.21.0 "," PHP_appname "," NativeHost "," Java /1.7.0_67 "," Apache-HttpClient / UNAVAILABLE "," Dalvik / 1.6.0 "," Web-sniffer / 1.1.0 "," unirest-objc / 1.1 "
Varias bibliotecas de idiomas móviles y de servidor diferentes. La mayoría de las veces no son navegadores que ejecutan JavaScript, sino también algunos de ellos.
La mayoría de las personas no parecen darse cuenta de que el tipo de contenido es incorrecto, pero de vez en cuando aparece una nueva solicitud de soporte quejándose de este problema, por lo que nos gustaría solucionarlo.
fuente
Respuestas:
Podría hundir completamente sus acorazados si han escrito un código que se basa en que este tipo de contenido es incorrecto.
No esperaría que las bibliotecas arrojaran errores, pero espero que en algunos casos las bibliotecas estrictas hayan anulado su comportamiento para manejar el tipo MIME incorrecto.
Si su API tiene un valor de versión / revisión en un campo de solicitud en alguna parte, instálelo y en la nueva versión devuelva el tipo correcto pero continúe devolviendo el tipo incorrecto en las versiones anteriores. Si no tiene ese campo de solicitud, ahora es un buen momento para agregar uno.
fuente
No. Cada biblioteca de cliente HTTP con la que estoy familiarizado ignorará el encabezado de tipo de contenido a menos que el programador lea específicamente ese encabezado y haga algo con él. Puedo imaginar una biblioteca donde el tipo de contenido: application / json automáticamente hace que se involucre un analizador json, pero no conozco ningún caso en el que eso realmente suceda.
¿Cómo notaron el encabezado incorrecto? Podría valer la pena ver eso, porque si el encabezado incorrecto realmente les estaba causando problemas, claramente no lo estaban ignorando, y podrían tener problemas si se soluciona.
fuente
$.ajax
y no especifica ladataType:
opción, infiere el tipo de respuesta delContent-type
encabezado. Entonces, si es asíapplication/json
, lo analizará automáticamente antes de pasarlo a la persona que llama.Demasiado difícil saberlo sin obtener la aprobación de todos sus clientes. Sugeriría tomar uno de los siguientes dos enfoques para actualizar su API a v.Next.
En cualquier caso, comunique a sus clientes los cambios que le gustaría hacer y la fecha / hora de corte objetivo. Aliéntelos a realizar una prueba mucho antes de la fecha objetivo para asegurarse de que no haya interrupción del servicio.
Asegúrese de tener una página dedicada que detalle los cambios realizados en v.Next. Esto debe incluirse en las comunicaciones enviadas a sus clientes. Si ha discutido alguna solución con los clientes existentes, inclúyala en esta página.
Finalmente, pise la línea entre comunicarse en exceso con sus clientes y enviarles correo no deseado. Estas notificaciones pueden pasarse por alto fácilmente a medida que surjan prioridades más inmediatas / urgentes.
FWIW, si las cosas funcionan actualmente, no me preocuparía demasiado por eso. Si, por ejemplo, encuentra que esto causa una vulnerabilidad de seguridad significativa, esa sería una gran razón para impulsar este cambio. De lo contrario, esperaría algo más urgente para incluir este cambio.
fuente
Aquí hay un ejemplo de una biblioteca (bueno, comando único) que esto rompería:
El cmdlet powershell
Invoke-RestMethod
actúa de manera diferente con JSON. Si el resultado de la solicitud es JSON, XML o ATOM / RSS (y creo que se basa en el encabezado), lo analiza / deserializa y devuelve objetos nativos; de lo contrario, devuelve los datos sin procesar.Por lo tanto, el código existente se escribiría para tratar con una cadena (tal vez pasándolo a
ConvertFrom-Json
), y de repente comenzaría a fallar.fuente
He notado dos consecuencias:
fuente