Route
Routes are configuration files that you add to IG to manage requests. They are flat files in JSON format. You can add routes in the following ways:
Manually into the filesystem.
Through Common REST commands.
For information, see "Creating and Editing Routes Through Common REST".
Through Studio. For information, see the Studio User Guide.
Every route must call a handler to process requests and produce responses to requests.
When a route has a condition, it can handle only requests that meet the condition. When a route has no condition, it can handle any request.
Routes inherit settings from their parent configuration. This means that you can configure global objects in the config.json
heap, for example, and then reference the objects by name in any other IG configuration.
For examples of route configurations see Configuring Routers and Routes.
Usage
{ "handler": Handler reference or inline Handler declaration, "heap": [ configuration object, ... ], "condition": runtime expression<boolean>, "name": string, "secrets": configuration object, "session": JwtSession object, "auditService": AuditService object, "globalDecorators": configuration object, "decorator name": decorator configuration object }
Properties
"handler"
: Handler reference, requiredFor this route, dispatch the request to this handler.
Provide either the name of a Handler object defined in the heap, or an inline Handler configuration object.
See also Handlers.
"heap"
: array of configuration objects, optionalHeap object configuration for objects local to this route.
Objects referenced but not defined here are inherited from the parent.
You can omit an empty array. If you only have one object in the heap, you can inline it as the handler value.
See also "Heap Objects".
"condition"
: runtime expression<boolean>, optionalAn inline expression to define a condition based on the request, context, or IG runtime environment, such as system properties or environment variables.
Conditions are defined using IG expressions, as described in "Expressions", and are evaluated as follows:
If the condition evaluates to
true
, the request is dispatched to the route.If the condition evaluates to
false
, the condition for the next route in the configuration is evaluated.If no condition is specified, the request is dispatched unconditionally to the route.
For example conditions and requests that match them, see "Example Conditions and Requests".
An external request can never match a condition that uses the reserved administrative route. Therefore, routes that use these conditions are effectively ignored. For example, if
/openig
is the administrative route, a route with the following condition would effectively be ignored:${matches(request.uri.path, '^/openig/my/path')}
.Default: No condition is specified.
"name"
: string, optionalName for the route.
The Router uses the
name
property to order the routes in the configuration. If the route does not have aname
property, the Router uses the route ID.The route ID is managed as follows:
When you add a route manually to the routes folder, the route ID is the value of the
_id
field. If there is no_id
field, the route ID is the filename of the added route.When you add a route through the Common REST endpoint, the route ID is the value of the mandatory
_id
field.When you add a route through Studio, you can edit the default route ID.
Caution
The filename of a route cannot be
default.json
, and the route'sname
property and route ID cannot bedefault
.Default: route ID
"secrets"
: configuration object, optionalAn object that configures an inline array of one or more secret stores, as defined in "Default Secrets Object".
"session"
: JwtSession object, optionalStateless session implementation for this route. Define a JwtSession object inline or in the heap.
When a request enters the route, IG builds a new session object for the route. The session content is available to the route's downstream handlers and filters. Session content available in the ascending configuration (a parent route or
config.jso
) is not available in the new session.When the response exits the route, the session content is serialized as a secure JWT that is encrypted and signed, and the resulting JWT string is placed in a cookie. Session information set inside the route is no longer available. The
session
references the previous session object.Default: Do not change the session storage implementation.
For more information, see "JwtSession", and "Sessions".
"auditService"
: AuditService object, optionalProvide an audit service for the route. Provide either the name of an AuditService object defined in the heap, or an inline AuditService configuration object.
Default: No auditing of a configuration. The NoOpAuditService provides an empty audit service to the top-level heap and its child routes.
"globalDecorators"
: one or more decorations, optionalDecorate all compatible objects in the route with one or more decorators referred to by the decorator name, and provide the configuration as described in Decorators:
"globalDecorators": { "decorator name": "decoration configuration" ... }
The following object decorates all compatible objects in the route with a capture and timer decorator:
"globalDecorators": { "capture": "all", "timer": true }
Default: No decoration.
"decorator name"
: decoration, optionalDecorate the main handler of this route with a decorator referred to by the decorator name, and provide the configuration as described in Decorators.
Default: No decoration.
Route Metrics at the Prometheus Scrape Endpoint
Route metrics at the Prometheus Scrape Endpoint have the following labels:
name
: Route name, for example,My Route
.If the router was declared with a default handler, then its metrics are published through the route named
default
.route
: Route identifier, for example,my-route
.router
: Fully qualified name of the router, for example,gateway.main-router
.
The following table summarizes the recorded metrics:
Name | Type [a] | Description |
---|---|---|
ig_route_request_active | Gauge | Number of requests being processed. |
ig_route_request_total | Counter | Number of requests processed by the router or route since it was deployed. |
ig_route_response_error_total | Counter | Number of responses that threw an exception. |
ig_route_response_null_total | Counter | Number of responses that were not handled by IG. |
ig_route_response_status_total | Counter | Number of responses by HTTP status code family. The
|
| Summary | A summary of response time observations. |
[a] As described in "Monitoring Types" |
For more information about the the Prometheus Scrape Endpoint, see "Prometheus Scrape Endpoint".
Route Metrics at the Common REST Monitoring Endpoint
Route metrics at the Common REST Monitoring Endpoint are published with an _id
in the following pattern:
heap.router-name.route.route-name.metric
The following table summarizes the recorded metrics:
Name | Type [a] | Description |
---|---|---|
request | Counter | Number of requests processed by the router or route since it was deployed. |
request.active | Gauge | Number of requests being processed by the router or route at this moment. |
response.error | Counter | Number of responses that threw an exception. |
response.null | Counter | Number of responses that were not handled by IG. |
response.status.client_error | Counter | Number of responses with an HTTP status code 400 -499 , indicating client error. |
response.status.informational | Counter | Number of responses with an HTTP status code 100 -199 , indicating that they are provisional responses. |
response.status.redirection | Counter | Number of responses with an HTTP status code 300 -399 , indicating a redirect. |
response.status.server_error | Counter | Number of responses with an HTTP status code 500 -599 , indicating server error. |
response.status.successful | Counter | Number of responses with an HTTP status code 200 -299 , indicating success. |
response.status.unknown | Counter | Number of responses with an HTTP status code 600 -699 , indicating that a request failed completely and was not executed. |
response.time | Timer | Time-series summary statistics. |
[a] As described in "Monitoring Types" |
For more information about the the Common REST Monitoring Endpoint, see "Common REST Monitoring Endpoint".