Serverless: Los eventos APIG ahora fuerzan las plantillas json y form-urlencoded

Creado en 1 sept. 2016  ·  3Comentarios  ·  Fuente: serverless/serverless

Esta es una propuesta de función

Descripción

Al definir eventos http de APIG, el código ahora fuerza la creación de asignaciones tanto para application/json como para application/x-www-form-urlencoded . Si bien puede anular la plantilla, no hay forma de excluir estas asignaciones (es decir, solo quiero permitir solicitudes json en un punto final)

Este cambio se introdujo recientemente a través de esta confirmación en 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,
};

Si bien creo que es increíblemente útil tener estas 2 opciones (y plantillas predefinidas), creo que sería mejor permitir que el usuario incluyera opcionalmente solo las plantillas que desee.

Algo como lo siguiente podría tener 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 

Con el problema abierto actual (# 1168) en torno al comportamiento de paso a través de APIG, y un PR pendiente (# 1992) para abordarlo, esto se vuelve más importante para poder restringir completamente los métodos a los tipos de contenido deseados.

Comentario más útil

Definitivamente me gusta la idea de la función para poder bloquear realmente las plantillas predeterminadas, pero en mi humilde opinión, tendría que suceder para todo el servicio.

Mi suposición es que si desea bloquear completamente las plantillas predeterminadas, querrá hacer esto en todos los métodos de su servicio. Entonces creo que preferiría algo como

provider:
  apigateway:
    default-request-templates: false

De lo contrario, tendría que duplicar la configuración como loco (lo que ya es necesario, por ejemplo, cuando desea establecer plantillas separadas para varias funciones, pero en mi humilde opinión, es un problema menor porque solo lo necesita para eventos que tienen datos de solicitud.

Pero aún no estoy seguro: D. @ serverless / vip ¿ Alguna idea sobre eso, especialmente

Todos 3 comentarios

Definitivamente me gusta la idea de la función para poder bloquear realmente las plantillas predeterminadas, pero en mi humilde opinión, tendría que suceder para todo el servicio.

Mi suposición es que si desea bloquear completamente las plantillas predeterminadas, querrá hacer esto en todos los métodos de su servicio. Entonces creo que preferiría algo como

provider:
  apigateway:
    default-request-templates: false

De lo contrario, tendría que duplicar la configuración como loco (lo que ya es necesario, por ejemplo, cuando desea establecer plantillas separadas para varias funciones, pero en mi humilde opinión, es un problema menor porque solo lo necesita para eventos que tienen datos de solicitud.

Pero aún no estoy seguro: D. @ serverless / vip ¿ Alguna idea sobre eso, especialmente

Esto debería ser posible con esto ahora: https://serverless.com/framework/docs/providers/aws/events/apigateway#custom -request-templates

@flomotlik ¿Cómo abordan las plantillas personalizadas el caso de uso de OP de simplemente application/x-www-form-urlencoded predeterminada, sin la necesidad de crear una plantilla personalizada para application/json ?

¿Fue útil esta página
0 / 5 - 0 calificaciones