2017-11-24 4 views
1

Ich bin dabei, eine Rest-Such-API zu entwerfen, die mehrere Parameter als Filter akzeptieren kann.Mehrere Parameter an Rest-API mit mehreren Bedingungen übergeben

Zum Beispiel:

https://test/api/GetCustomer?Filter=”FirstName=test||LastName=test||telephone=043232323” 

Das obige Beispiel wird im Grunde ein Oder zwischen den Feldern zur Verfügung gestellt. Es übergibt den gesamten Suchstring als einen Parameter. Ich möchte auch eine komplexere Abfrage zu handhaben zu können, wie unten:

https://test/api/GetCustomer?Filter=”(FirstName=test||LastName=test)&&telephone=043232323” 

Ich bin nicht sicher, was der beste Weg ist, um den Endpunkt zu implementieren, wäre es von Wedel-End-Perspektive leichter sein, es zu passieren als ein einziger Parameter und als das Parsen auf der API-Ebene. Aber offensichtlich wird es mehr Aufwand erfordern, die Abfrage speziell zu parsen, wenn sie etwas komplexer ist.

Gibt es eine bessere Möglichkeit, das Szenario zu implementieren?

Antwort

1

Benutzerfreundlichkeit ist eines der Hauptanliegen beim Aufbau eines Backends. Die Einfachheit der Implementierung kommt eine entfernte Sekunde. Im Allgemeinen ist es viel einfacher, eine komplexe Abfrage zu erstellen, als sie zu parsen, sodass Front-End-Entwickler mit relativ geringem Aufwand sehr leistungsfähigen Filtercode erstellen können. das ist eine gute Sache.

Obwohl die Syntaxanalyse recht komplex ist, gibt es Parsing-Tools zum Verwalten der Komplexität, z. B. ANTLR. Obwohl die Lernkurve für das neue Tool möglicherweise etwas steil ist, würden Sie am Ende eine robuste Parsing-Bibliothek erhalten, die es Front-End-Entwicklern erleichtert, Ihren Dienst zu nutzen.

+0

Ja, es sinnvoll, die komplexe Logik zu haben, auf dem Back-End übergehen zu lassen. –

0
var queryString = this.Request.GetQueryNameValuePairs(); 

List<KeyValuePair<string, object>> QueryStringKeys = new 
List<KeyValuePair<string, object>>(); 

foreach (var pair in queryString) 
{ 
    QueryStringKeys.Add(new KeyValuePair<string, object>(pair.Key.ToString(), pair.Value)); 
} 

Boolean firstvalue = true; 
foreach (var keys in QueryStringKeys) 
{ 
    //access key.Key and key.Value here to make dynamic query 
} 

Dies mag nicht der beste Weg, es zu tun, aber Sie können Ihre Ergebnisse als normale Abfrage-String-Variablen

https://test/api/GetCustomer?FirstName=test&LastName=test&telephone=043232323 
+0

Das wird funktionieren, aber Sie können keine komplexen Operationen wie in meinem Beitrag erwähnt ausführen. Wenn ich will oder zwischen firstName und LastName und dann und am Gesamtergebnis mit Telefon. Es kann nicht mit oben erreicht werden. –

Verwandte Themen