servidores services que español colombia aws amazon-web-services aws-api-gateway serverless-framework serverless-plugins

amazon web services - services - definiciones de modelos de documentación sin servidor con campos opcionales?



lambda aws (2)

Quiero definir modelos de solicitud y respuesta. Uso el Framework Serverless con AWS y todo lo que veo recomienda el uso de la documentación sin servidor-aws

El README dice que necesito tener esta línea en custom.documentation.models.MODELNAME

schema: ${file(models/error.json)}

Pero no tienen un archivo de ejemplo de models/error.json para usar como referencia.

En el ejemplo real serverless.yml tienen una definición como esta:

- name: DoSomethingRequest contentType: "application/json" schema: type: array items: type: string

Esto no proporciona suficientes detalles para lo que estoy tratando de hacer.

Mi objetivo es tener un esquema definido para una matriz de objetos de cadena, un mensaje y un código de estado. Sin embargo, el mensaje y el código de estado son opcionales. Estos también podrían ser parte de otros modelos y, si es posible, me gustaría no repetir su definición para cada modelo.

Mi intento actual es:

- name: ReturnArrayResponse contentType: "application/json" schema: type: array itemsArray: type: string message: type: string statusCode: type: number

Creo que esto va a hacer lo que quiero, pero ¿cómo puedo tener message y statusCode ser opcionales y repetir estos dos elementos en mis otros modelos?

Estaría contento con una solución yml que puedo poner en mi archivo serverless.yml o un archivo json al que pueda hacer referencia.


Solo una suposición (publicarlo como una respuesta para conservar el formato): su entidad de nivel superior en el esquema debe ser un object , no una array , algo como esto:

schema: type: object properties: items: type: array items: type: string message: type: string statusCode: type: number


Incluyendo un archivo

En el ejemplo dado, error.json puede contener cualquier esquema válido. Entonces algo tan simple como esto está bien:

{"type":"object","properties":{"message":{"type":"string"}}}

También está bien incluir atributos como $schema y title :

{ "$schema" : "http://json-schema.org/draft-04/schema#", "title" : "Error Schema", "type" : "object", "properties" : { "message" : { "type" : "string" }, "statusCode": { "type": "number" }, "itemsArray": { "type": "array", "items": { "type": "string" } } } }

Esto es especialmente útil cuando tiene modelos ya definidos en AWS, pero no tiene el yaml sin servidor para compilarlos. Simplemente puede copiar el esquema de la consola de AWS, pegar el json en un archivo y usar la sintaxis del schema: ${file()} menciona en la pregunta. Por lo que puedo decir, todo lo que pueda conseguir que acepte la consola de AWS funcionará.

SECO

No conozco una forma de referenciar modelos de otros modelos en un archivo sin servidor, pero podría usar el mismo enfoque que los autores de los complementos, y simplemente colocar todo lo que necesite volver a utilizar fuera de los models y en algún lugar sea más fácil de reutilizar. . Los autores del complemento usan commonModelSchemaFragments .

Entonces, si tienes algunos fragmentos así:

commonModelSchemaFragments: # defining common fragments means you can reference them with a single line StringArrayFragment: type: array items: type: string HttpResponse: type: object properties: message: type: string statusCode: type: number

Puede hacer referencia a esos fragmentos en modelos como este:

- name: HttpStatusResponse contentType: "application/json" schema: type: object properties: serverResponse: ${self:custom.commonModelSchemaFragments.HttpResponse} messageArray: ${self:custom.commonModelSchemaFragments.StringArrayFragment}

Marcado de atributos opcionales

Puede lograr esto marcando atributos según sea required . Simplemente proporcione una lista de todos los atributos, excepto los que desea que sean opcionales . El esquema json para eso se ve así:

{ "type": "object", "required": ["message"], "properties": { "optionalMessage": { "type": "string" }, "message": { "type": "string" } } }

que construirías usando yall así en tu archivo sin servidor:

- name: OptionalResponse contentType: "application/json" schema: type: object required: - "message" properties: message: type: string optionalMessage: type: string

Nota sobre la validación de solicitud

Marcar los atributos required u optional solo importa si la validación del cuerpo de la solicitud está activada:

No sé de una forma de activar la validación de solicitud utilizando cualquier sintaxis especial sin servidor. Parece que puede hacer esto en la sección de resources , pero no lo he intentado. Fuente