Response validation
When a source is backed by an OpenAPI spec, Reqon can check responses against the operation's schema.
Enabling validation
Set validateResponses: true on the source:
source API from "./spec.yaml" {
auth: bearer,
validateResponses: true
}
What gets validated
Validation runs only for call Source.operationId requests, against the operation's 200 JSON response schema. Plain get/post fetches are not validated, and neither are non-200 responses.
call API.getPetById
// If API has validateResponses: true and getPetById defines a 200 schema,
// the response body is checked against that schema.
Behaviour
Validation is advisory. When a response doesn't match the schema, Reqon logs warnings (visible with --verbose) and execution continues. It does not throw, abort, or change response, and there's no validationMode option — it always warns and carries on.
For checks that must block the pipeline, use a validate step (see below).
Validation rules
The validator checks the following against the schema.
Required fields
Pet:
required:
- id
- name
A response missing name is reported:
{ "id": "123" } // warning: missing required property 'name'
Type checking
Pet:
properties:
id:
type: string
age:
type: integer
{ "id": 123, "age": "five" }
// warnings: id expected string, age expected integer
Enum
Pet:
properties:
status:
type: string
enum: [available, pending, sold]
{ "status": "active" } // warning: value not in enum
Numeric and string constraints
minimum/maximum for numbers, and minLength/maxLength/pattern for strings, are all checked.
Arrays
Pets:
type: array
items:
$ref: '#/components/schemas/Pet'
minItems/maxItems are checked, and each item is validated against the item schema.
Nested objects
Pet:
properties:
owner:
$ref: '#/components/schemas/Owner'
Nested object properties are validated recursively, including additionalProperties when the schema sets it.
Hard validation with the validate step
Schema validation only logs. To stop the pipeline on bad data, add a validate step. Each assume is a condition; a failed assumption throws and aborts the mission:
action FetchOrder {
call API.getOrder
validate response {
assume .total >= 0
assume .items is array
assume length(.items) > 0
}
store response -> orders { key: .id }
}
Programmatic validation
The validator is also exported for direct use:
import { validateResponse } from 'reqon-dsl';
const result = validateResponse(data, schema);
if (!result.valid) {
for (const err of result.errors) {
console.warn(`${err.path}: ${err.message}`);
}
}
Troubleshooting
Warnings you didn't expect
The spec may be out of date with the live API. Update the spec, or check for an API version change.
Validation isn't running
Confirm all of these:
- The source is declared with
from "./spec.yaml". validateResponses: trueis set on the source.- You're using
call Source.operationId(not a plainget/post). - The operation defines a
200JSON response schema. - You're running with
--verboseso the warnings are visible.