2016-03-12 11 views
8

Sto provando a impostare i parametri del percorso quando si effettuano chiamate agli endpoint del gateway API tramite l'SDK JavaScript e non si ha fortuna. Sembra che io abbia qualcosa di mal configurato o che ci sia un bug nella generazione dell'SDK.Impostazione dei parametri del percorso nel gateway API AWS SDK JavaScript

Sono in grado di chiamare correttamente endpoint che non accettano parametri di percorso ma quando provo a passare un parametro da utilizzare come parametro di percorso, l'SDK sostituisce semplicemente il parametro path con uno spazio vuoto e la mia chiamata ha esito negativo.

Esempio, supporre client è un client gateway API correttamente inizializzato. Ho un endpoint chiamato /measurement con un figlio di /measurement/{id}. Posso chiamare entrambi direttamente.

client.measurementGet({},{}); - chiama con successo il mio /measurement endpoint client.measurementIdGet({"id": "1234"}, {}); - Browser effettua una chiamata a /measurement/ invece di /measurement/1234

Guardando la fonte dei miei apigClient.js, sembra che il generatore SDK non sta mettendo i parametri di percorso nella elenco dei parametri che sta cercando. Ad esempio, il codice della mia generato measurementIdGet metodo è simile al seguente:

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

ho scavato nella assertParametersDefined e parseParametersToObject e sembra che questi metodi si aspettano un elenco di parametri da cercare. In entrambi i casi l'SDK ha generato liste vuote invece di inserire il mio parametro di percorso.

Se aggiorno manualmente il file generato per modificare le due linee di

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

e

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

L'SDK effettua la chiamata corretta.

Mi manca qualcosa nella configurazione o c'è un errore nel generatore di codice?

+0

Ho questo stesso problema qui. Qualche aggiornamento a questo proposito? @mason – johnny

+0

Stesso problema per me. Ho chiesto informazioni sul forum e non ho ottenuto alcuna risposta: https://forums.aws.amazon.com/thread.jspa?messageID=734395. Qualcuno sa se il generatore SDK è open source?Impossibile trovare da nessuna parte – Sam

+0

Ci scusiamo per l'errore ma qualche aggiornamento qui? Ancora ricevendo questo problema – AvnerSo

risposta

0

Supponendo che si sta importando una definizione swagger per creare l'API, definendo il proprio parameters a livello di metodo anziché il livello del percorso, verrà generato un SDK generato con lo key compilato e dovrebbe funzionare correttamente.

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

Benché definire parameters a livello percorso è corretto secondo la spec Swagger e gateway API fa usarli nel API creato, risulta che gateway API li ignora in alcuni contesti.

1

Se si utilizza la formazione di nuvole come me. Dovrai aggiungerlo nello RequestParameters.

per una risorsa come questa/api/animali/{id}/attributi/{} attrid seguente codice funziona

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 
Problemi correlati