2015-09-10 4 views
7

Ich kann nicht herausfinden, wie Sie optionale Abfragezeichenfolgenparameter mithilfe einer Zuordnungsvorlage in der Integrationsanforderung meiner Ressource erstellen.AWS API Gateway: Wie mache ich Querystring-Parameter in der Mapping-Vorlage optional?

Meine Vorlage sieht wie folgt aus:

{ "limit": "$input.params('limit')", "post_date":"$input.params('post_date')" } 

Ich möchte 'Limit' & 'post_date' optional sein. Diese Vorlage erstellt eine Abfragezeichenfolgeflag, der so aussieht, wenn diese Parameter nicht zur Verfügung gestellt werden:

/myresource?limit=undefined& 

Wenn ich erwarte:

/myresource 

Die Docs nicht das scheint zu decken. Ich habe einige Beispielvorlagen in der Dokumentation gefunden, die eine Bash-ähnliche Syntax verwenden, um bedingte Funktionalität bereitzustellen. Ich habe versucht, die Prüfung der folgenden, aber es wird nicht in der AWS-Konsole validieren:

 #set($limit = $input.path('limit')) 
     { 
      #if($limit)"limit": "$input.params('limit')",#end 
     } 

Bin ich auf dem richtigen Weg?

Danke!

+2

Ich denke, Sie sollten alle möglichen Parameter definieren und dann behandeln 'undefined' im Backend. – kixorz

+0

Verwenden Sie 'Lambda' als Backend? – kixorz

+0

@napalm Das mache ich gerade jetzt. Wirklich AWS ?! Das ist lahm. Lambda -> Ja – Nick

Antwort

3

Ja, Sie können dies in Api Gateway absolut tun; obwohl es nicht gut dokumentiert zu sein scheint!

In Ihrer Frage haben Sie erwähnt, dass dies ein Parameter ist; Sie haben jedoch input.path verwendet, das normalerweise auf ein Element im Hauptteil der POST-Anforderung verweist. Folgendes sollte funktionieren:

#set($limit = $input.params('limit')) 
{ 
#if($limit && $limit.length() != 0) 
"limit": "$input.params('limit')" 
#end 
} 

In Bezug auf die Dokumentation habe ich festgestellt, dass die folgende Seite von AWS tatsächlich ziemlich nützlich ist. Es ist in einem Abschnitt über Mock Endpunkte versteckt, aber:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-mock-integration.html