title: Use Swagger API validation with Serverless Framework
body: <p>I want add an api validation to the serverless aws-nodes template and nothing I have tested until now has worked very well. </p>
  
  <p>My current approach is to overwrite the existing api-gateway, which is generated by the serverless framework, with a yml/json swagger definition that contains my models for the validation. This works for me when I test it in the API-Gateway UI, but on external requests the api don't validate the request for the lambda-proxy. </p>
  
  <p>When I use normal lambda the api gateway also passthrough the request body without validation or transformation.   </p>
  
  <p>My current swagger api definition with validation:</p>
  
  <pre><code>  swagger: "2.0"
    info:
      title: feedback
      version: '1.0'
  
    schemes:
    - https
    produces:
    - application/json
    x-amazon-apigateway-api-key-source : HEADER
  
    x-amazon-apigateway-request-validators:
      full:
        validateRequestBody: true
        validateRequestParameters: true
      body-only:
        validateRequestBody: true
        validateRequestParameters: false
    x-amazon-apigateway-request-validator: full
  
    # Custom 400 response with validation feedback
    x-amazon-apigateway-gateway-responses:
      BAD_REQUEST_BODY:
        statusCode: 400
        type:
          application/json: 
        responseTemplates:
        application/json:
          |-
            {
                "message": $context.error.messageString,
                "validation":  "$context.error.validationErrorString",
                "statusCode": "'400'"
            }
  
    # request structure
    paths:
      /feedback:
        post:
          # validation definition
          x-amazon-apigateway-request-validator: body-only
          parameters:
          - in: body
            name: Create ...
            required: true
            schema: 
              "$ref": "#/definitions/Model"
          responses:
            '200':
              description: validation succeeded
            '400':
              description: validation failed
  
          x-amazon-apigateway-integration:
  
            uri: "arn:aws:apigateway:{api-region}:lambda:path/2015-03-31/functions/arn:aws:lambda:{lambda-region}:{konto-id}:function:{function-name}/invocations"
  
            passthroughBehavior: when_no_match
            httpMethod: POST
            requestTemplates:
              application/json: '{"statusCode": 200}'
            type: aws
        get:
          responses:
            '201':
              description: list all Data
              content:
                application/json:
                  schema:
                    type: array
                    items:
                      feedback:
                        $ref: "#/definitions/Model"
            '401':
              $ref: "#/definitions/UnauthorizedError"
          x-amazon-apigateway-integration:
            uri: "arn:aws:apigateway:{api-region}:lambda:path/2015-03-31/functions/arn:aws:lambda:{lambda-region}:{konto-id}:function:{function-name}/invocations"
            passthroughBehavior: never
            httpMethod: POST
            type: aws_proxy
  
    # definition of the request/respons model with validation
    definitions:
        Model:
          type: object
          properties:
            topic:
              $ref: "#/definitions/Topic"
            text:
              type: string
              minLength: 1
              maxLength: 250
          required:
            - topic
            - text
        Topic:
              type: string
              enum: 
                - xyz
  </code></pre>
  
  <p>My api definition from my serverless.yml</p>
  
  <pre><code>functions:
    create:
      handler: feedback/create.create
      events:
       - http:
           path: feedback
           method: post
   list:
      handler: feedback/list.list
      events:
        - http:
            path: feedback
            method: get 
  </code></pre>
  
  <blockquote>
    <p>the lambda functions only read/write feedback from/to an DynamoDB</p>
  </blockquote>
  
  <p>Has someone an idea how I can add some kind of api validation to my serverless project without using small plugins (serverless-reqvalidator-plugin) or how to solve the problem with the data transformation ?</p>