Saat mendefinisikan acara APIG http, kode sekarang memaksa pembuatan pemetaan untuk application/json
maupun application/x-www-form-urlencoded
. Meskipun Anda dapat mengganti template, tidak ada cara untuk mengecualikan pemetaan ini (yaitu, saya hanya ingin mengizinkan permintaan json pada titik akhir)
Perubahan ini baru-baru ini diperkenalkan melalui komit ini ke 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,
};
Meskipun saya pikir itu sangat berguna untuk memiliki 2 opsi ini (dan templat yang telah ditentukan sebelumnya), saya pikir akan lebih baik untuk mengizinkan pengguna untuk secara opsional hanya menyertakan templat yang mereka inginkan.
Sesuatu seperti berikut ini mungkin masuk akal:
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
Dengan masalah terbuka saat ini (#1168) seputar perilaku melewati APIG, dan PR yang tertunda (#1992) untuk mengatasinya, ini menjadi lebih penting untuk dapat sepenuhnya membatasi metode ke Tipe-Konten yang diinginkan.
Saya sangat menyukai gagasan fitur untuk dapat benar-benar mengunci templat default, tetapi itu harus terjadi untuk seluruh layanan.
Asumsi saya adalah bahwa jika Anda ingin sepenuhnya mengunci templat default, Anda harus melakukannya di setiap metode di seluruh layanan Anda. Jadi saya pikir saya lebih suka sesuatu seperti
provider:
apigateway:
default-request-templates: false
Kalau tidak, Anda harus menggandakan konfigurasi seperti orang gila (yang sudah diperlukan misalnya ketika Anda ingin mengatur templat terpisah untuk beberapa fungsi, tetapi tidak masalah karena Anda hanya memerlukan ini untuk acara yang memiliki data permintaan.
Tapi saya belum yakin :D. @serverless/vip ada pemikiran tentang itu, terutama @HyperBrain ?
Ini seharusnya dimungkinkan dengan ini sekarang: https://serverless.com/framework/docs/providers/aws/events/apigateway#custom -request-templates
@flomotlik Bagaimana template khusus mengatasi kasus penggunaan OP hanya dengan memilih keluar dari template default application/x-www-form-urlencoded
, tanpa perlu membuat template khusus untuk application/json
?
Komentar yang paling membantu
Saya sangat menyukai gagasan fitur untuk dapat benar-benar mengunci templat default, tetapi itu harus terjadi untuk seluruh layanan.
Asumsi saya adalah bahwa jika Anda ingin sepenuhnya mengunci templat default, Anda harus melakukannya di setiap metode di seluruh layanan Anda. Jadi saya pikir saya lebih suka sesuatu seperti
Kalau tidak, Anda harus menggandakan konfigurasi seperti orang gila (yang sudah diperlukan misalnya ketika Anda ingin mengatur templat terpisah untuk beberapa fungsi, tetapi tidak masalah karena Anda hanya memerlukan ini untuk acara yang memiliki data permintaan.
Tapi saya belum yakin :D. @serverless/vip ada pemikiran tentang itu, terutama @HyperBrain ?