Wir betreiben eine API, die von einigen Leuten verwendet wird. Aufgrund der Ungeschicklichkeit meines Erachtens gibt einer der Endpunkte den falschen Inhaltstyp-Header zurück , js
wenn dies der Fall sein sollte json
. Meine Frage ist, wenn wir dies durch Tauschen beheben, um den korrekten Wert zurückzugeben, wie schlimm könnte dies die Dinge für unsere bestehenden Kunden durcheinander bringen? Oder anders ausgedrückt: Würden Sie erwarten, dass viele verschiedene HTTP-Client-Bibliotheken schwerwiegende Fehler auslösen, wenn Sie eine solche Änderung sehen?
Wir versuchen zu entscheiden, ob dies eine Änderung ist, die wir einfach vornehmen können, ohne zu viel zu schwitzen, oder wir sollten allen Benutzern sorgfältig eine E-Mail senden und einen mehrjährigen Verfallszeitraum ankündigen ... oder etwas dazwischen.
Es hängt wahrscheinlich ein bisschen davon ab, welche verschiedenen HTTP-Clients verwendet werden, also habe ich mir Benutzeragenten angesehen. Antwort: viele verschiedene! Hier sind einige der Besten:
"okhttp / 3.2.0", "Python-Anfragen / 2.10.0", "Ruby", "Python-Anfragen / 2.7.0", "Mozilla / 5.0", "Java / 1.8.0_91", "Python-Anfragen" /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 "
Verschiedene mobile und serverseitige Sprachbibliotheken. Meistens keine Browser mit Javascript, aber einige davon auch.
Die meisten Leute scheinen nicht zu bemerken, dass der Inhaltstyp falsch ist, aber hin und wieder taucht eine neue Support-Anfrage auf, die sich über dieses Problem beschwert. Deshalb möchten wir es gerne beheben.
quelle
Antworten:
Es könnte ihre Schlachtschiffe völlig untergehen lassen, wenn sie Code geschrieben haben, der davon ausgeht, dass dieser Inhaltstyp falsch ist.
Ich würde nicht erwarten, dass die Bibliotheken Fehler auslösen, aber ich gehe davon aus, dass in einigen Fällen das Verhalten strenger Bibliotheken außer Kraft gesetzt wurde, um den falschen MIME-Typ zu behandeln.
Wenn Ihre API irgendwo in einem Anforderungsfeld einen Versions- / Revisionswert enthält, erhöhen Sie diesen, und geben Sie in der neuen Version den richtigen Typ zurück, während Sie in den älteren Versionen weiterhin den falschen Typ zurückgeben. Wenn Sie kein solches Anforderungsfeld haben, ist jetzt ein guter Zeitpunkt, um eines hinzuzufügen.
quelle
Nein. Jede mir vertraute HTTP-Clientbibliothek ignoriert den Header des Inhaltstyps, es sei denn, der Programmierer liest diesen Header speziell und unternimmt etwas damit. Ich kann mir eine Bibliothek vorstellen, in der der Inhaltstyp: application / json automatisch einen json-Parser auslöst, aber ich kenne keinen Fall, in dem das tatsächlich passiert.
Wie haben sie den falschen Header bemerkt? Es könnte sich lohnen, sich das anzuschauen, denn wenn der falsche Header tatsächlich Probleme verursachte, ignorierten sie es offensichtlich nicht nur und sie könnten Probleme haben, wenn es behoben ist.
quelle
$.ajax
und diedataType:
Option nicht angeben , wird der Antworttyp aus demContent-type
Header abgeleitet. Wenn dies derapplication/json
Fall ist , wird es automatisch analysiert, bevor es an den Anrufer weitergeleitet wird.Zu schwer zu sagen, ohne von all Ihren Kunden eine Bestätigung zu erhalten. Ich würde vorschlagen, einen der folgenden beiden Ansätze zu wählen, um Ihre API auf v.Next zu aktualisieren.
Teilen Sie Ihren Kunden in beiden Szenarien die Änderungen mit, die Sie vornehmen möchten, sowie das Datum und die Uhrzeit der geplanten Umstellung. Fordern Sie sie auf, rechtzeitig vor dem Zieldatum zu testen, um sicherzustellen, dass keine Betriebsstörungen auftreten.
Stellen Sie sicher, dass Sie über eine spezielle Seite verfügen, auf der die an v.Next vorgenommenen Änderungen aufgeführt sind. Dies sollte in den Mitteilungen an Ihre Kunden enthalten sein. Wenn Sie Korrekturen mit vorhandenen Clients besprochen haben, fügen Sie diese auf dieser Seite hinzu.
Schliesslich sollten Sie die Grenze zwischen übermäßiger Kommunikation mit Ihren Kunden und Spam-Mails überschreiten. Diese Benachrichtigungen können leicht übersehen werden, da unmittelbarere / dringlichere Prioritäten anstehen.
FWIW, wenn die Dinge gerade funktionieren, würde ich mir keine Sorgen machen. Wenn Sie beispielsweise feststellen, dass dies eine erhebliche Sicherheitslücke verursacht, ist dies ein guter Grund, diese Änderung zu verwerfen. Ansonsten würde ich auf etwas Dringenderes warten, um diese Änderung mit aufzunehmen.
quelle
Hier ist ein Beispiel für eine Bibliothek (naja, einzelner Befehl), die dadurch kaputt gehen würde:
Das Cmdlet powershell verhält sich
Invoke-RestMethod
bei JSON anders. Wenn das Ergebnis der Anforderung JSON, XML oder ATOM / RSS ist (und ich denke, dass es auf dem Header basiert), analysiert / deserialisiert es es und gibt native Objekte zurück, ansonsten gibt es die Rohdaten zurück.Der vorhandene Code würde also so geschrieben werden, dass er sich mit einer Zeichenfolge befasst (möglicherweise, indem er an diese übergeben wird
ConvertFrom-Json
), und auf einmal würde ein Fehler auftreten.quelle
Ich habe zwei Konsequenzen bemerkt:
quelle