Serverless: Os eventos APIG agora forçam os modelos json e form-urlencoded

Criado em 1 set. 2016  ·  3Comentários  ·  Fonte: serverless/serverless

Esta é uma proposta de recurso

Descrição

Ao definir eventos APIG http, o código agora força a criação de mapeamentos para application/json e também para application/x-www-form-urlencoded . Embora você possa substituir o modelo, não há como excluir esses mapeamentos (ou seja, eu só quero permitir solicitações json em um endpoint)

Esta mudança foi introduzida recentemente por meio deste commit em 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,
};

Embora eu ache que é extremamente útil ter essas 2 opções (e modelos predefinidos), acho que seria melhor permitir que o usuário incluísse opcionalmente apenas os modelos que deseja.

Algo como o seguinte pode fazer sentido:

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 

Com a questão aberta atual (# 1168) em torno do comportamento de passagem do APIG e um PR pendente (# 1992) para resolvê-la, isso se torna mais importante para poder restringir totalmente os métodos aos Tipos de Conteúdo desejados.

Comentários muito úteis

Eu definitivamente gosto da ideia do recurso ser capaz de realmente bloquear os modelos padrão, mas, imho, isso teria que acontecer para todo o serviço.

Minha suposição é que se você deseja bloquear completamente os modelos padrão, você desejará fazer isso em todos os métodos em seu serviço. Então, acho que prefiro algo como

provider:
  apigateway:
    default-request-templates: false

Caso contrário, você teria que duplicar a configuração como um louco (o que já é necessário, por exemplo, quando você deseja definir modelos separados para várias funções, mas não é um problema porque você só precisa disso para eventos que têm dados de solicitação.

Mas ainda não tenho certeza: D. @ serverless / vip alguma opinião sobre isso, especialmente @HyperBrain ?

Todos 3 comentários

Eu definitivamente gosto da ideia do recurso ser capaz de realmente bloquear os modelos padrão, mas, imho, isso teria que acontecer para todo o serviço.

Minha suposição é que se você deseja bloquear completamente os modelos padrão, você desejará fazer isso em todos os métodos em seu serviço. Então, acho que prefiro algo como

provider:
  apigateway:
    default-request-templates: false

Caso contrário, você teria que duplicar a configuração como um louco (o que já é necessário, por exemplo, quando você deseja definir modelos separados para várias funções, mas não é um problema porque você só precisa disso para eventos que têm dados de solicitação.

Mas ainda não tenho certeza: D. @ serverless / vip alguma opinião sobre isso, especialmente @HyperBrain ?

Isso deve ser possível agora: https://serverless.com/framework/docs/providers/aws/events/apigateway#custom -request-templates

@flomotlik Como os modelos personalizados abordam o caso de uso de OP de simplesmente desativar o modelo application/x-www-form-urlencoded padrão, sem a necessidade de criar um modelo personalizado para application/json ?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

brendanmckenzie picture brendanmckenzie  ·  3Comentários

tomyam1 picture tomyam1  ·  3Comentários

chris-hailstorm picture chris-hailstorm  ·  3Comentários

bradgreens picture bradgreens  ·  3Comentários

jthomas picture jthomas  ·  3Comentários