Wie sollte eine Web-API mit falsch geschriebenen / zusätzlichen Parametern umgehen?

8

Frage: Bei einer öffentlich zugänglichen Web-API (HTTP-Get / Post-Anforderungen senden, JSON / XML-Daten zurückholen), wie sollen Parameter behandelt werden, die entweder falsch geschrieben oder extra sind.

Es scheint mir, dass ein Fehler im Code des Anrufers unbemerkt bleiben kann, wenn die falschen Parameter ignoriert werden, da sie ein gültiges Ergebnis zurückerhalten würden. Dies kann insbesondere in Situationen der Fall sein, in denen dies anhand der zurückgegebenen Ergebnisse nicht offensichtlich ist.

Ich beziehe mich nur auf optionale Parameter. Wenn ein erforderlicher Parameter falsch geschrieben ist, wird der Parameter offensichtlich als fehlend betrachtet und ein Fehler wird zurückgegeben.


Beispielsweise verfügt der API-Aufruf "Ortssuche" über vier erforderliche Parameter (Standort, Radius, Sensor und Schlüssel) und mehrere optionale Parameter (Typ ist einer davon).

Ich kann diese Befehle (mit einem API-Schlüssel) ausführen und gültige Ergebnisse zurückerhalten:

curl "https://maps.googleapis.com/maps/api/place/search/json?location=45.47554,-122.794189&radius=500&sensor=false&key=<api_key>&type=bakery"

curl "https://maps.googleapis.com/maps/api/place/search/json?location=45.47554,-122.794189&radius=500&sensor=false&key=<api_key>&types=bakery"

Der erste Befehl hat den Parameter "types" in der Singularform, bei der es sich um einen ungültigen Schlüsselnamen handelt. Die API ignoriert diesen Parameter und gibt alle Arten von Entitäten zurück. In diesem Fall ist der Fehler offensichtlich, aber es kann Zeiten (und andere API-Aufrufe) geben, in denen dies nicht der Fall ist.

juan2raid
quelle

Antworten:

3

Das Ignorieren zusätzlicher Parameter ist Standard. Es ist einfach, solchen Code zu schreiben

if (params.type) { 
  ... 
}

Es lohnt sich nicht, alle übergebenen Parameter zu überprüfen, um festzustellen, ob sie ungültig sind. Rechtschreibfehler sind das Problem des Kunden.

Kevin Cline
quelle
1

Wenn es ein kleiner Aufwand wäre, einen Rechtschreibfehlertest für Parameternamen einzuschließen (wie viel Arbeit möchten Sie tun, indem Sie die Namen ALLER Parameter anhand einer Liste der wahrscheinlichsten Rechtschreibfehler überprüfen?), Würde ich dies möglicherweise tun, aber normalerweise würde ich dies tun empfehlen, einfach die zusätzlichen Parameter zu ignorieren, die falsch geschrieben sind. Natürlich könnte es schön sein, wenn ein WebService die Nachricht "Kein gültiger Parameter type, meinten Sie types?" Zurücksendet. Aber nur, wenn Sie die Zeit haben, es richtig zu implementieren, und da ich normalerweise nicht erwarte, dass diese Art von Nachricht zurückkommt, werde ich es nicht verpassen, wenn es nicht da ist.

FrustratedWithFormsDesigner
quelle
1

Ich denke, es hängt davon ab, wie die API spezifiziert ist und wer für diese Probleme verantwortlich gemacht wurde. Wenn ich eine API entwerfen würde, würde ich die Verantwortung dafür übernehmen, sicherzustellen, dass die erwarteten korrekten Parameter (und die zugehörigen Werte, falls vorhanden) in der erwarteten Weise behandelt werden oder dass unerwartete Eingaben vorgenommen wurden (wie erforderlich, um die Methode vor seltsamen und seltsamen Ereignissen zu schützen) verrückte Daten), dann wurde die entsprechende Ausnahme ausgelöst oder ein Fehlercode zurückgegeben.

Ich würde dann sagen, dass alle Eingaben, die nicht Teil der erwarteten Parameterlisten sind, nicht Teil des API-Problems sind. Auf diese Weise können Sie spezifisch sein und die Verantwortung für eine genau definierte Spezifikation übernehmen. Jeder, der diese verwenden möchte, ist dafür verantwortlich, dass er sie ordnungsgemäß verwendet.

Sie haben ein Tool und eine Reihe von Anweisungen zur Verwendung bereitgestellt. Machen Sie es zur Verantwortung des Benutzers, es richtig zu verwenden.

dreza
quelle