APIG httpイベントを定義するときに、コードはapplication/json
とapplication/x-www-form-urlencoded
両方のマッピングを強制的に作成するようになりました。 テンプレートをオーバーライドすることはできますが、これらのマッピングを除外する方法はありません(つまり、エンドポイントでのjsonリクエストのみを許可したい)
この変更は最近、このコミットを介してlib / plugins / aws / deploy / compile / events / apiGateway / lib /methods.jsに導入されました。
const integrationRequestTemplates = {
'application/json': DEFAULT_JSON_REQUEST_TEMPLATE,
'application/x-www-form-urlencoded': DEFAULT_FORM_URL_ENCODED_REQUEST_TEMPLATE,
};
これらの2つのオプション(およびテンプレートが事前定義されている)があると非常に便利だと思いますが、ユーザーが必要なテンプレートのみをオプションで含めることができるようにするのが最善だと思います。
次のようなものが理にかなっているかもしれません:
functions:
create:
handler: posts.create
events:
- http:
method: get
path: whatever
request:
template:
text/xhtml: { "stage" : "$context.stage" } # add additional template
application/json: { "httpMethod" : "$context.httpMethod" } # add mapping and override default template
application/x-www-form-urlencoded: true # add mapping and use default template
APIGパススルー動作に関する現在の未解決の問題(#1168)と、それに対処するための保留中のPR(#1992)により、メソッドを目的のコンテンツタイプに完全に制限できるようにすることがより重要になります。
デフォルトのテンプレートを実際にロックダウンできる機能のアイデアは間違いなく気に入っていますが、サービス全体でそれを実行する必要があります。
私の仮定では、デフォルトのテンプレートを完全にロックダウンしたい場合は、サービス全体のすべてのメソッドでこれを実行する必要があります。 だから私は次のようなものが好きだと思います
provider:
apigateway:
default-request-templates: false
そうしないと、クレイジーのように構成を複製する必要があります(たとえば、複数の関数に個別のテンプレートを設定する場合はすでに必要ですが、リクエストデータを持つイベントにのみ必要なので、問題は少なくなります。
しかし、私はまだわかりません:D。 @ serverless / vip、特にますか?
これは今これで可能になるはずです: https ://serverless.com/framework/docs/providers/aws/events/apigateway#custom -request-templates
@flomotlikカスタムテンプレートは、 application/json
カスタムテンプレートを作成する必要なしに、デフォルトのapplication/x-www-form-urlencoded
テンプレートをオプトアウトするというOPユースケースにどのように対処しますか?
最も参考になるコメント
デフォルトのテンプレートを実際にロックダウンできる機能のアイデアは間違いなく気に入っていますが、サービス全体でそれを実行する必要があります。
私の仮定では、デフォルトのテンプレートを完全にロックダウンしたい場合は、サービス全体のすべてのメソッドでこれを実行する必要があります。 だから私は次のようなものが好きだと思います
そうしないと、クレイジーのように構成を複製する必要があります(たとえば、複数の関数に個別のテンプレートを設定する場合はすでに必要ですが、リクエストデータを持つイベントにのみ必要なので、問題は少なくなります。
しかし、私はまだわかりません:D。 @ serverless / vip、特にますか?