Estamos executando uma API com muitas pessoas usando. Devido a alguma falta de jeito herdada da minha parte, um dos pontos de extremidade está retornando o cabeçalho do tipo de conteúdo errado , js
quando deveria json
. Minha pergunta é: se corrigirmos isso trocando para retornar o valor correto, o quanto isso poderia atrapalhar as coisas para nossos clientes existentes? Ou, de outra forma, você esperaria que muitas bibliotecas clientes HTTP diferentes gerassem erros fatais ao ver uma alteração dessas?
Estamos tentando decidir se é uma mudança que podemos seguir em frente e fazer sem suar demais, ou devemos enviar um email com cuidado a todos os usuários e anunciar um período de descontinuação de vários anos ... ou algo assim.
Provavelmente depende um pouco do tipo de clientes HTTP diferentes em uso, então dei uma olhada nos agentes do usuário. Resposta: muitas diferentes! Aqui estão alguns dos principais:
"okhttp / 3.2.0", "requisições python / 2.10.0", "Ruby", "requisições python / 2.7.0", "Mozilla / 5.0", "Java / 1.8.0_91", "requisições python /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 "
Várias bibliotecas de idiomas diferentes para dispositivos móveis e servidores. Principalmente não navegadores que executam javascript, mas alguns deles também.
A maioria das pessoas parece não perceber que o tipo de conteúdo está errado, mas de vez em quando aparece uma nova solicitação de suporte reclamando sobre esse problema, por isso gostaríamos de corrigi-lo.
fonte
Respostas:
Isso poderia afundar completamente seus navios de guerra se eles escrevessem um código que se baseie nesse tipo de conteúdo incorreto.
Eu não esperaria que as bibliotecas gerassem erros, mas espero que, em alguns casos, as bibliotecas estritas tenham seu comportamento substituído para manipular o tipo MIME incorreto.
Se sua API tiver um valor de versão / revisão em um campo de solicitação em algum lugar, aumente e, na nova versão, retorne o tipo correto, mas continue retornando o tipo incorreto nas versões mais antigas. Se você não possui um campo de solicitação, agora é uma boa hora para adicionar um.
fonte
Não. Toda biblioteca de cliente HTTP que eu conheço ignorará o cabeçalho do tipo de conteúdo, a menos que o programador leia especificamente esse cabeçalho e faça algo com ele. Posso imaginar uma biblioteca em que o tipo de conteúdo: application / json automaticamente faz com que um analisador de json se envolva, mas não conheço nenhum caso em que isso realmente ocorra.
Como eles perceberam o cabeçalho incorreto? Pode valer a pena olhar para isso, porque se o cabeçalho incorreto estava realmente causando problemas, eles claramente não estavam apenas ignorando-o e podem ter problemas se for corrigido.
fonte
$.ajax
e não especifica adataType:
opção, ele infere o tipo de resposta doContent-type
cabeçalho. Portanto, se forapplication/json
, ele será analisado automaticamente antes de repassá-lo ao chamador.Difícil de distinguir sem receber aprovação de todos os seus clientes. Sugiro que você siga uma das duas abordagens a seguir para atualizar sua API para a v.Next.
Em qualquer um dos cenários, comunique aos seus clientes as alterações que você deseja fazer e a data / hora de transição desejada. Incentive-os a testar bem antes da data prevista para garantir que não haja interrupção do serviço.
Verifique se você possui uma página dedicada detalhando as alterações feitas na v.Next. Isso deve ser incluído nas comunicações enviadas aos seus clientes. Se você discutiu alguma correção com clientes existentes, inclua-as nesta página.
Por fim, trote a linha entre a comunicação excessiva com os clientes e o envio de spam. Essas notificações podem ser facilmente ignoradas à medida que surgem prioridades mais imediatas / urgentes.
FWIW, se as coisas estão funcionando atualmente, eu não me preocuparia muito com isso. Se, por exemplo, você achar que isso causa uma vulnerabilidade de segurança significativa, seria um ótimo motivo para promover essa alteração. Caso contrário, eu esperaria algo mais urgente para incluir essa alteração.
fonte
Aqui está um exemplo de uma biblioteca (bem, comando único) que isso quebraria:
O cmdlet do powershell
Invoke-RestMethod
age de maneira diferente com o JSON. Se o resultado da solicitação for JSON, XML ou ATOM / RSS (e acho que é baseado no cabeçalho), ele a analisa / desserializa e retorna objetos nativos, caso contrário, retorna os dados brutos.Portanto, o código existente seria escrito para lidar com uma string (talvez passando-a para
ConvertFrom-Json
) e, de repente, começaria a falhar.fonte
Eu notei duas consequências:
fonte