2016-11-25 3 views
3

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"); 

Antwort

1

Wenn Sie die Parameter eines Verfahrens in geschweiften Klammern wickeln Sie make them optional.

So können Sie immer noch Ihre Methode mit der angegebenen Signatur verwenden. Sie müssen nur den Namen des Parameters hinzufügen, den Sie übergeben möchten:

api.photos.list(postId: "post1"); 
+0

Sieht aus wie ein Gewinner. Vielen Dank. Offensichtlich ist mein Verständnis von Dart's Methodensemantik etwas wackelig. –

Verwandte Themen