Ich habe eine Dart-Anwendung, die Daten von einem benutzerdefinierten Google-Endpunkt erhält. Ich verwende discoveryapis_generator, um die Client-Bibliothek zu generieren. Ich möchte eine Abfrage wie folgt auszustellen:Unterstützung für Abfrageparameter in Dart für Google Endpoints?
import endpoints_api.dart as EndpointsApi;
api = new EndpointsApi.MyApi();
api.photos.list(api.Photo.post_id == "post1");
endpoints_api.dart
ist die Client-Bibliothek, die von discoveryapis_generator generate.dart
. MyApi
ist meine benutzerdefinierte Endpunkte API und photos
ist einer ihrer Dienste. I denkenPhoto
ist eine Endpunkte Modellklasse, die eine Instanzeigenschaft post_id
hat.
Die Ausgabe der Anfrage führt zu einem Fehler, der dazu führt, dass Photo keinen statischen Getter "post_id" hat. Dies ähnelt der Syntax einer Abfrage in der Python-API, daher war es die einzige Möglichkeit, sie hier anzugeben.
Ich weiß nicht, was sonst bei der Beschreibung meiner Anfrage hilfreich sein könnte. Hoffentlich ist es selbstverständlich. Es gibt eine aktive Erweiterung, die here beschrieben wird, aber sie scheint sich auf das Begrenzen der Felder statt der Elemente in der Antwort zu beziehen.
Update:
Stochern in der Client-Bibliothek, fand ich die Quelle für die list
Methoden. Es sieht ganz so aus, als ob Abfrageparameter unterstützt werden. Aber es scheint mir, dass es nicht ganz richtig ist. Die formale Parameterliste der Abfrageparameter enthält in dem in geschweifte Klammern API angegeben:
async.Future<PhotoCollection> list({core.String postId, core.String regionId}) {...
Aber in der Methode Körper, gibt es folgende:
if (regionId != null) {
_queryParams["region_id"] = [regionId];
die Klammern in [regionId]
Sind region
von der extrahieren Parameterliste?
Ich zog die Klammern aus der Parameterliste. Da ich immer nur von postId
abzufragen erwarten, das ist der einzige Parameter:
async.Future<PhotoCollection> list(core.String postId) {...
Voila. Ich kann jetzt einen Parameter für die Abfrage von nur Angabe ihres Wertes im Aufruf hinzu:
api.photos.list("post1");
Sieht aus wie ein Gewinner. Vielen Dank. Offensichtlich ist mein Verständnis von Dart's Methodensemantik etwas wackelig. –