2016-03-12 13 views
8

Próbuję ustawić parametry ścieżki podczas wykonywania wywołań punktów końcowych bramy API za pośrednictwem zestawu JavaScript SDK i nie mając szczęścia. Wygląda na to, że mam coś źle skonfigurowanego lub jest błąd w generowaniu SDK.Ustawianie parametrów ścieżki w bramce interfejsu API AWS JavaScript SDK

Jestem w stanie skutecznie wywoływać punkty końcowe, które nie przyjmują parametrów ścieżki, ale kiedy próbuję przekazać parametr, który ma być użyty jako parametr ścieżki, SDK zamienia tylko parametr ścieżki na puste i moje połączenie nie działa.

Przykład, załóżmy, że client jest poprawnie zainicjalizowanym klientem bramy API. Mam punkt końcowy o nazwie /measurement z dzieckiem o numerze /measurement/{id}. Mogę zadzwonić do obu bezpośrednio.

client.measurementGet({},{}); - skutecznie wywołuje mój /measurement końcowym client.measurementIdGet({"id": "1234"}, {}); - Przeglądarka umożliwia wywołanie /measurement/ zamiast /measurement/1234

Patrząc na źródło moich apigClient.js, wydaje się, że generator SDK nie jest wprowadzenie parametrów ścieżki dostępu w lista parametrów, których szuka. Na przykład, kod mojego wygenerowanym measurementIdGet metody wygląda następująco:

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

ja wykutych w assertParametersDefined i parseParametersToObject i wygląda na to, te metody są spodziewa listę parametrów szukać. W obu przypadkach SDK wygenerował puste listy zamiast umieszczać tam mój parametr ścieżki.

Gdybym ręcznie zaktualizować wygenerowany plik zmienić dwie linie do

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

i

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

SDK umożliwia prawidłowe połączenie.

Czy brakuje mi czegoś w mojej konfiguracji lub czy jest jakiś błąd w generatorze kodu?

+0

mam ten sam problem tutaj. Czy to ma jakieś aktualizacje? @mason – johnny

+0

Dla mnie ten sam problem. Pytałem o to na forum i nie otrzymałem żadnej odpowiedzi: https://forums.aws.amazon.com/thread.jspa?messageID=734395. Ktoś wie, czy generator SDK jest open source?Nie można go nigdzie znaleźć – Sam

+0

Przepraszam za bug, ale jakakolwiek aktualizacja tutaj? Nadal dostaję ten problem – AvnerSo

Odpowiedz

0

Zakładając, że jesteś importowanie definicji Swagger stworzyć API, definiowania parameters na poziomie metody, w przeciwieństwie do poziomu ścieżki spowoduje SDK wygenerowanym z key wypełniony i powinny działać poprawnie.

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

Chociaż zdefiniowanie parameters na poziomie ścieżka jest poprawna według spec Swagger i API Bramka nie używać ich w stworzonym API, wydaje się, że API bramy pomija je w niektórych kontekstach.

1

Jeśli korzystasz z chmury, tak jak ja. Będziesz musiał dodać go do RequestParameters.

dla zasobu jak ta/api/Zwierzęta/{id}/atrybuty/{attrid} Następujący kod działa

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 
Powiązane problemy