FLAT
CouperSevenval TechnologiesDocker ImageGithub
master
master
  • Changelog
  • FLAT
  • Administration
    • Configuration
    • Docker
    • Logging
  • Cookbook
    • Using the Built-in Mocking
    • Performing Additional Checks on JWT Access Tokens
    • Logging Custom Fields
    • Using Environment Variables
    • Handling Errors with an Error Flow
    • File Serving
    • Forwarding a Request to an Upstream API
    • Extracting Common Initialization Flow Tasks
    • Encoding and Decoding JWT
    • Passing Header Fields to the Client
    • How can I pass an arbitrary header field to an upstream system?
    • Performing Additional Checks on JWT Access Tokens
    • Proxying requests to Upstream APIs
    • Increasing the Request Timeout
    • How can I see what the client requested?
    • Using Swagger UI for API Documentation
    • Testing API Requests
    • Testing with Backend Requests
    • Testing Templates
    • Sending POST Requests
    • Processing Upstream Responses
    • Protecting Access using JWT Tokens
  • Reference
    • Configuration
    • Debugging
    • flat CLI
    • Flow
    • Variables
    • OpenAPI / Swagger Integration
    • OpenAPI
      • CORS - Cross-Origin Resource Sharing
    • OpenAPI
      • Differences from Swagger
    • OpenAPI
      • Mocking
    • OpenAPI
      • Routing
    • OpenAPI
      • Security
    • OpenAPI
      • Upstream APIs
    • OpenAPI
      • Validation
    • Flow Actions
      • assert Action
      • auth Action
      • backend-flow Action
      • copy Action
      • debug Action
      • dump Action
      • echo Action
      • error Action
      • eval Action
      • log Action
      • nameshave Action
      • pass-body Action
      • proxy-request Action
      • regex Action
      • request Action
      • requests Action
      • serve Action
      • set-config Action
      • set-env Action
      • set-response-headers Action
      • set-status Action
      • sub-flow Action
      • template Action
      • test-request Action
      • xslt Action
    • Functions
      • apply-codecs()
      • array-reverse()
      • array()
      • base64-decode()
      • base64-encode()
      • body()
      • calc-signature()
      • capitalize-first()
      • content()
      • decrypt-xml()
      • decrypt()
      • encrypt()
      • ends-with()
      • file-exists()
      • fit-document()
      • fit-log()
      • fit-serialize()
      • get-log()
      • has-class()
      • html-parse()
      • join()
      • json-doc()
      • json-parse()
      • json-stringify()
      • json-to-csv()
      • json-to-xml()
      • jwt-decode()
      • jwt-encode()
      • ldap-lookup()
      • ldap-query()
      • lookup()
      • matches()
      • md5()
      • replace()
      • sort()
      • split()
      • tolower()
      • toupper()
      • trim()
      • unixtime()
      • urldecode(), url-decode()
      • urlencode(), url-encode()
      • uuid3() and uuid4()
      • verify-signature()
      • verify-xmldsig()
      • xml-parse()
      • xml-to-json()
    • Templating
      • {{,}}
      • Comment {{// …}}
      • Dot {{.}}
      • Conditional `{{if <condition>}} … {{elseif <condition> }} … {{else}} … {{end}}
      • loop
      • ?? Operator
      • Object XML Notation (OXN)
      • Pair Producer {{: …}}
      • Placeholder
      • Template Variables
      • with
    • Testing
  • Tutorial
Powered by GitBook
On this page
  • Configuration
  • System Error Document

Was this helpful?

  1. Reference
  2. OpenAPI

Validation

PreviousOpenAPINextFlow Actions

Last updated 5 years ago

Was this helpful?

OpenAPI has rich tools to describe inbound , the and . FLAT can validate all incoming and outgoing HTTP messages against these schemas.

Code and document tend to divert quickly. Therefore, it is strongly recommended to activate validation. It helps spotting errors early during development. In production, the error logs help noticing and diagnosing validation errors.

The has a chapter on .

Configuration

Overall validation is configured in the top-level :

swagger: "2.0"
info:
  description: "…"
  version: "1.0.0"
  title: "My API"
basePath: "/v1"

x-flat-validate:
  request: true
  response: true

The request property activates validation of inbound parameters and request bodies. If the path operation is not defined or the HTTP message does not adhere to the schema, the request is terminated with a and status 400. In that case, the is not executed.

The response property activates validation of the outgoing HTTP response before it is sent to the client. If the response status code is not defined for the path or the response body does not follow the schema, the request is terminated with a and status 500.

Whenever a schema error has been detected, a meaningful message is logged.

Possible values for the validation properties are:

  • true activates validation and enforces the schema

  • false disables Swagger validation (however, the paths must still be defined)

  • report-only performs validation and logs a validation error without terminating the request

The default value is false.

You can also set x-flat-validate more specifically for certain paths and methods, for example:

swagger: "2.0"
x-flat-validate:
  request: report-only
paths:
  # Reports invalid requests (top-level fallback).
  # Does not validate responses (default).
  /relaxed:

  # Validates all incoming requests.
  # Validates responses for GET.
  # Reports invalid responses for POST.
  /strict:
    x-flat-validate:
      request: true

    post:
      x-flat-validate:
        response: report-only

    get:
      x-flat-validate:
        response: true

  # No validation whatsoever (overrides top-level)
  /experimental:
    x-flat-validate:
      request: false
      response: false

System Error Document

FLAT uses an error document for all validation errors. It looks like this:

{
  "error": {
    "message": "Input Validation Failed",
    "status": 400,
    "requestID": "W8chVblhSDR5pk2xwBMUzwAAAA0",
    "info": [
       "Required constraint violated in body for name: The property userName is required."
     ]
  }
}

If the validation configuration has to be dynamic (e.g. read an environment variable to active it), you can use instead of x-flat-validate.

conf/config.xml
parameters
request body
API responses
tutorial
configured flow
system error
system error
extension object x-flat-validate
validation