Routing
An API definition must provide a list of callable paths – sometimes also called routes or endpoints.
In swagger.yaml
this is defined in the paths
section:
One important setting is the basePath
property. All described API paths are only accessible below that basePath
.
In general, only the paths that are explicitly defined are permissible, i.e. they may not be extended arbitrarily.
In our example, the following paths are valid:
While these are undefined (especially those pointing outside of base path):
The Swagger docs have more information on paths and operations.
To skirt the rule that every single permissible path must be defined, you can use FLAT's wildcard path feature to match arbitrarily long request paths. Wildcard paths, i.e. paths ending with /**
, match all paths sharing the same prefix. For example, by adding the wildcard path /users/**
to the above definition, the formerly undefined path /v1/users/too/long
will be matched, too, as well as any other path starting with /v1/users/
:
Assigning FLAT Flows
In FLAT you can assign a flow file to every API path to define the request processing. This is done with the x-flat-flow
property:
You can specify a flow for a path (as in /dashboard
) or for specific methods/operations (as in /users
). The same flow can be used for multiple paths or methods.
Fallback Flow
An x-flat-flow
property set directly in the paths
object behaves as a fallback flow. If the incoming request has matched a defined path, but that path did not define a flow, the fallback flow will be executed:
Init Flow
An init flow is a separate flow file that is executed before the regular flow or configured proxy defined for an API path. It is specified by setting x-flat-init
on the top level in the OpenAPI definition:
The init flow can be used to extract common initialization tasks, e.g. initialize variables or set HTTP response headers.
For requests outside of the API basePath
(e.g. /
or /assets
), the init flow is not executed. It is only called for API requests.
A break
statement in the init flow terminates the whole request; the regular flow (specified by x-flat-flow
) is not executed. A return
statement terminates only the init flow; the regular flow is executed. Terminating actions like echo
or dump
will prevent the actual flow from being executed, too.
Error Flow
An error flow is an optional separate flow file that is executed if a client request or response validation error has occurred, or if the exit-on-error
option was set for a request, proxy-request or configured proxy that has failed. It is specified by setting the flow
property of x-flat-error
on the top level in the OpenAPI definition:
The error flow can be used to produce error messages with a custom format or status. Note that the output generated after the error flow has run will not be validated. Additionally, errors encountered while the error flow is processed will not re-start the error flow.
Default Flow
Requests to resources outside the basePath
are handled by the default flow defined in conf/flow.xml
. This allows for serving HTML, images, JavaScript and the like.
Assigning FLAT Proxies
If FLAT acts as a proxy for an upstream API on a specific route, you could assign a flow containing a proxy-request
action.
A simpler way to achieve this is by using x-flat-proxy
in the swagger.yaml
:
A client request to https://client.example.com/api/users/profile
will be proxied to https://users.upstream.example.com/v4/profile
. See wildcard paths for more information about /**
.
x-flat-proxy
can be used below paths
, paths/<path>
and paths/<path>/<operation>
.
The configuration for x-flat-proxy
is the same as that for a proxy-request
action (translated from JSON to YAML syntax).
If configured, the init flow is executed before the proxy request. If configured, the error flow is executed if the exit-on-error
option was set and the proxy request fails.
x-flat-proxy
and x-flat-flow
are alternatives and cannot be used in combination.
Path Parameters
Swagger paths can define path parameters:
All named params are available from inside the flow in the pre-defined variable $request
as properties of the $request/params
object:
Last updated