2016-03-12 13 views
8

Ich versuche, beim Aufruf von API-Gateway-Endpunkten über das JavaScript-SDK Pfadparameter festzulegen und habe kein Glück. Es sieht so aus, als hätte ich etwas falsch konfiguriert oder es liegt ein Fehler in der SDK-Generation vor.Festlegen von Pfadparametern in AWS API Gateway JavaScript-SDK

Ich kann Endpunkte erfolgreich aufrufen, die Pfadparameter nicht übernehmen, aber wenn ich versuche, einen Parameter als Pfadparameter übergeben, ersetzt das SDK nur den Pfadparameter mit einem Leerzeichen, und mein Aufruf schlägt fehl.

Beispiel: angenommen, client ist ein ordnungsgemäß initialisierter API-Gateway-Client. Ich habe einen Endpunkt namens /measurement mit einem Kind von /measurement/{id}. Ich kann beide direkt anrufen.

client.measurementGet({},{}); - erfolgreich ruft mein /measurement Endpunkt client.measurementIdGet({"id": "1234"}, {}); - Browser macht einen Aufruf an /measurement/ statt /measurement/1234

an der Quelle meines apigClient.js Blick scheint es, dass die SDK-Generator nicht Pfadparameter in das setzt Liste der Parameter, nach denen gesucht wird. Zum Beispiel sieht der Code meiner erzeugt measurementIdGet Methode wie folgt:

apigClient.measurementIdGet = function (params, body, additionalParams) { 
     if(additionalParams === undefined) { additionalParams = {}; } 

     apiGateway.core.utils.assertParametersDefined(params, [], ['body']); 

     var measurementIdGetRequest = { 
      verb: 'get'.toUpperCase(), 
      path: pathComponent + uritemplate('/measurement/{id}').expand(apiGateway.core.utils.parseParametersToObject(params, [])), 
      headers: apiGateway.core.utils.parseParametersToObject(params, []), 
      queryParams: apiGateway.core.utils.parseParametersToObject(params, []), 
      body: body 
     }; 

     return apiGatewayClient.makeRequest(measurementIdGetRequest, authType, additionalParams, config.apiKey); 
    }; 

Ich grub in die assertParametersDefined und parseParametersToObject und es sieht aus wie diese Methoden eine Liste von Parametern erwarten zu suchen. In beiden Fällen hat das SDK leere Listen generiert, anstatt meinen Pfadparameter dorthin zu setzen.

Wenn ich manuell die erzeugte Datei aktualisieren, die beiden Linien zu

apiGateway.core.utils.assertParametersDefined(params, ['id'], ['body']);

und

apiGateway.core.utils.parseParametersToObject(params, ['id'])

Das SDK macht den richtigen Anruf zu ändern.

Fehle ich etwas in meiner Konfiguration oder gibt es einen Fehler im Code-Generator?

+0

Ich habe das gleiche Problem funktioniert. Gibt es hierzu Neuigkeiten? @ Mason – johnny

+0

Das gleiche Problem für mich. Ich habe im Forum danach gefragt und habe keine Antwort bekommen: https://forums.aws.amazon.com/thread.jspa?messageID=734395. Wer weiß, ob der SDK-Generator Open Source ist?Konnte es nirgendwo finden – Sam

+0

Entschuldigung, um aber jedes Update hier zu Bug? Immer noch dieses Problem – AvnerSo

Antwort

0

Angenommen, Sie importieren eine Swagger-Definition zum Erstellen der API. Wenn Sie parameters auf Methodenebene im Gegensatz zur Pfadstufe definieren, wird ein generiertes SDK mit der Nummer key ausgefüllt und sollte ordnungsgemäß funktionieren.

{ 
    ... 
    "/path/{to}/resource": { 
     "get": { 
      "parameters": [ // define here 
       "name": "to", 
       "in": "path", 
       ... 
      ], 
      ... 
     }, 
     "parameters": [] // not here 
} 

Obwohl parameters auf der Pfadebene definierte korrekt ist gemäß dem die Swagger spec und API-Gateway funktioniert sie in dem erzeugten API verwendet, scheint es, dass API-Gateway sie in manchen Kontexten absieht.

1

Wenn Sie Wolkenbildung wie mich verwenden. Sie müssen es in der RequestParameters hinzufügen.

für eine Ressource wie dieses/api/Haustiere/{id}/Attribute/{} AttrId folgenden Code hier

PetsByIdAttributesByAttridGetMethod: 
    Type: 'AWS::ApiGateway::Method' 
    Properties: 
     RestApiId: !Ref MyApi 
     ResourceId: !Ref PetsByIdAttributesByAttridResource 
     HttpMethod: GET 
     AuthorizationType: AWS_IAM 
     RequestParameters: 
     method.request.path.id : true 
     method.request.path.attrid : true 
     Integration: 
     Type: AWS_PROXY 
     IntegrationHttpMethod: POST 
     Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyLambda.Arn}/invocations