2016-07-05 8 views
1

Während des Entwurfs der API mit dem Team wurde ein Vorschlag in Bezug auf einige komplexe Abfrageparameter weitergeleitet, die wir als Objekte, Arrays von Objekten, etc. codiert werden müssen eine Route GET /resource/ und ich möchte eine Reihe von Filtern direkt in den Abfrageparametern anwenden. Die Objektliteral Struktur dieses Filters wäre so etwas wieVerwenden Sie codierte Objektabfrageparameter für GET-Anforderung

filter: { 
    field1: { 
    contains: 'value', 
    notin: ['value2', 'value3'] 
    }, 
    field2: { 
    greaterThan: 10 
    } 
} 

Encoding dies in der URL, über einen Query-String-Parser wie den qs Knoten Modul sein, das intern Express.js verwendet, würde auf dem Back-End billig sein. Jedoch 1) Die generierte URL ist sehr schwer zu lesen, wenn ein Client eine Verbindung mit der API herstellen möchte, müsste er eine Codierungsbibliothek verwenden und 2) Ich glaube nicht, dass ich jemals die Verwendung von Abfrageparametern wie dieser sah ein bisschen overengineered und ich bin mir nicht sicher, wie es benutzt wird und ob es wirklich sicher ist.

Das obige Beispiel würde Abfrage params wie Ausbeute:

GET /resource/?field1%5Bcontains%5D=value&field1%5Bnotin%5D%5B0%5D=value2&field1%5Bnotin%5D%5B1%5D=value3&field2%5BgreaterThan%5D=10 

Ist diese Praxis des Versendens URL Abfrageparameter, die komplexe Objekte haben einige Standards oder Best Practices geschehen sein?

Antwort

1

Wir haben eine andere Lösung für das Filtern implementiert, wenn die Liste der möglichen Parameter sehr lang war. Wir haben es in zwei Schritten gemacht, den Filter gepostet und eine Filter-ID zurückgegeben. Die Filter-ID könnte dann in der GET-Abfrage verwendet werden.

Wir hatten Probleme, dafür Best Practices zu finden.

Verwandte Themen