2016-03-12 7 views
8

JavaScript SDKを使用してAPI Gatewayエンドポイントを呼び出すときにパスパラメータを設定しようとしています。私は何かが間違って設定されているか、SDKの生成にバグがあるようです。AWS API GatewayのJavaScript APIでパスパラメータを設定する

パスパラメータを使用しないエンドポイントを正常に呼び出すことができますが、パスパラメータとして使用するパラメータを渡そうとすると、SDKはパスパラメータを空白に置き換えて呼び出しが失敗します。

例:clientが適切に初期化されたAPIゲートウェイクライアントであるとします。私は、/measurement/{id}の子を持つ/measurementというエンドポイントを持っています。私は両方を直接呼び出すことができます。

client.measurementGet({},{}); - 成功した私の/measurementエンドポイント client.measurementIdGet({"id": "1234"}, {});を呼び出す - ブラウザは私のapigClient.jsのソースを見てみる代わりに/measurement/1234

/measurement/への呼び出しを行い、SDKジェネレータはへパスパラメータを入れていないように見えます探しているパラメータのリスト。例えば、私の生成measurementIdGet方法のコードは次のようになります。

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

私はassertParametersDefinedparseParametersToObjectに掘って、これらのメソッドは、探すためのパラメータのリストを期待しているように見えます。どちらの場合も、SDKはパスパラメータを入力する代わりに空のリストを生成しています。

私は手動で

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

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

SDKに2行を変更するために生成されたファイルを更新する場合は、適切な呼び出しを行います。

設定に何か不足していますか、コードジェネレータにバグがありますか?

+0

の作品のようなリソースの

。これに関するどんな更新? @mason – johnny

+0

私のために同じ問題。私はフォーラムでそれについて尋ねたが、何の答えも得ていない:https://forums.aws.amazon.com/thread.jspa?messageID=734395。 SDKジェネレータがオープンソースであるかどうかは誰にでも分かりますか?どこでも見つかりませんでした – Sam

+0

バグは残念ですが、ここに更新はありますか?引き続きこの問題を解決する – AvnerSo

答えて

0

スワッガー定義をインポートしてAPIを作成すると仮定すると、パスレベルではなくメソッドレベルでparametersを定義すると、keyで生成されたSDKが正しく出力されます。パスレベルでparametersを定義すること闊歩仕様に従って正しく、APIゲートウェイが作成されたAPIでそれらを使用していますが

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

は、API Gatewayは、いくつかの文脈でそれらを無視していることが表示されます。

1

私のような雲の形成を使用している場合。 RequestParametersに追加する必要があります。次のコードこの/ API /ペット/ {ID} /属性/ {attridは}私はここに、この同じ問題を持っている

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 
関連する問題