При определении HTTP-событий APIG код теперь принудительно создает сопоставления как для 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
С текущей открытой проблемой (# 1168), связанной с поведением прохождения APIG, и ожидающим 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/x-www-form-urlencoded
по умолчанию без необходимости создавать настраиваемый шаблон для application/json
?
Самый полезный комментарий
Мне определенно нравится идея возможности действительно заблокировать шаблоны по умолчанию, но имхо это должно произойти для всей службы.
Я предполагаю, что если вы хотите полностью заблокировать шаблоны по умолчанию, вы захотите сделать это во всех методах вашей службы. Так что я бы предпочел что-то вроде
В противном случае вам пришлось бы дублировать конфигурацию как сумасшедшую (что уже необходимо, например, когда вы хотите установить отдельные шаблоны для нескольких функций, но, по-моему, это не проблема, потому что вам это нужно только для событий, которые имеют данные запроса.
Но пока не уверен: D. @ serverless / vip есть какие-нибудь мысли по этому поводу , особенно