Wie können erweiterte Ausdrücke zwischen Abfrageparametern in einer REST-API ausgedrückt werden?

8

Das Problem (oder das fehlende Feature) ist die fehlende Ausdrucksmöglichkeit zwischen verschiedenen Abfrageparametern. Wie ich es sehe kann nur and zwischen Parameter angeben, aber wie lösen Sie es, wenn Sie haben wollen not equal , or oder xor ?

Ich würde gerne folgende Dinge ausdrücken können:

Alle Benutzer mit Alter 20 oder der Name Bosse

  

/ Benutzer? Alter = 22 | Name = Bosse

Alle Benutzer außer David und Lennart

  

/ Benutzer? Name! = David & amp; Name! = Lennart

Meine erste Idee ist es, einen Abfrageparameter namens _filter zu verwenden und einen String mit folgendem Ausdruck zu verwenden:

Alle Benutzer mit Alter 22 oder einem Namen, der nicht Bosse ist

  

/ Benutzer? _filter = Alter eq 22 oder Name neq Bosse

Was ist die beste Lösung für dieses Problem?

Ich schreibe meine API mit Java und Jersey, also wenn es eine spezielle Lösung für Jersey gibt, lass es mich wissen.

    
David Berg 09.11.2015, 15:11
quelle

3 Antworten

3

Ich kann zwei Lösungen sehen, um das zu erreichen:

  • Verwenden eines speziellen Abfrageparameters, der den Ausdruck enthält, wenn eine GET -Methode ausgeführt wird. Es ist die Art und Weise OData ist mit seinem $filter Parametern (siehe diesen Link: Ссылка ). Hier ist ein Beispiel:

    %Vor%

    Parse.com auch ein solcher Ansatz mit seinen where Parameter verwendet, aber die Abfrage beschrieben wird eine JSON-Struktur (siehe diesen Link: Ссылка ). Hier ist ein Beispiel:

    %Vor%
  • Wenn es etwas zu schwer zu beschreiben, man könnte auch eine POST Methode verwenden und die Abfrage in dem Anfrage-Payload angeben. Elasticsearch verwendet ein solcher Ansatz für seine Abfrage-Unterstützung (siehe diesen Link: Ссылка ). Hier ist ein Beispiel:

    %Vor%

Hoffe es hilft dir, Thierry

    
Thierry Templier 01.12.2015, 15:06
quelle
2

OK, also hier ist es Sie könnten + oder - hinzufügen oder ausschließen und ein inklusive Filterschlüsselwort für AND und OR

hinzufügen %Vor%

Auf diese Weise sind die APIs sehr intuitiv, sehr gut lesbar und funktionieren auch.

EDIT - sehr sehr schwierige Frage, aber ich würde es so machen

%Vor%

Was bedeutet, dass die erste Beziehung nicht inklusive ist - oder anders ausgedrückt, es ist ODER zweite Relation ist inklusive - oder anders ausgedrückt: AND

Die Lösung besteht in der Überlegung, dass die Bewertung von links nach rechts erfolgt.

    
Biraj B Choudhury 09.11.2015 15:41
quelle
0

Hey, es scheint unmöglich, wenn Sie sich für Abfrageparams entscheiden ... Wenn es so ist, dass erweiterte Ausdrücke für PathParams verwendet werden, müssen Sie reguläre Ausdrücke filtern.

Aber um nur einen bestimmten Namen zuzulassen="Bosse" müssen Sie eine stringente Regex schreiben.

Anstatt einen REST-Endpunkt nur aus Gründen der Bedingung zu nehmen, erlauben Sie einen beliebigen Namen und dann müssen Sie die Logik schreiben, um sie manuell im Programm zu überprüfen.

    
tech.yenduri 02.12.2015 14:14
quelle

Tags und Links