Skip to content

Request ID ​

requestId(...) gives each request a stable request ID and exposes it through useRequestId(event).

Import it from the first-party middleware entrypoint:

dart
import 'package:spry/middleware.dart';

What it does ​

By default, requestId(...):

  • reads x-request-id from the incoming request when present
  • trusts and reuses that value by default
  • generates a new ID when the request header is missing
  • stores the selected value in event.locals[#requestId]
  • fills the response x-request-id header when it is missing
  • does not override the response header if downstream code already set it

Basic usage ​

Use it in global middleware:

dart
// middleware/01_request_id.dart
import 'package:spry/middleware.dart';
import 'package:spry/spry.dart';

final middleware = requestId();

A handler can then read the value through the helper:

dart
import 'package:spry/middleware.dart';
import 'package:spry/spry.dart';

Response handler(Event event) {
  final requestId = useRequestId(event);
  return Response.json({'requestId': requestId});
}

Internally, Spry stores this value under the built-in event.locals[#requestId] key.

API ​

dart
Middleware requestId({
  String headerName = 'x-request-id',
  FutureOr<String> Function(Event event)? generator,
  bool trustIncoming = true,
});

Options ​

headerName ​

Changes the request and response header name.

generator ​

Provides a custom generator for new request IDs.

If not provided, Spry uses a lightweight timestamp-plus-random-suffix strategy.

trustIncoming ​

Defaults to true.

When true, requestId(...) reuses an incoming request header value when it exists.

When false, Spry ignores the incoming header and always generates a new request ID.

Response header behavior ​

requestId(...) is intentionally conservative.

It fills the response header only when the response does not already define that header.

That means downstream handlers can still set a different response request ID explicitly when needed.

When to use it ​

Use requestId(...) when you want:

  • request tracing in logs
  • easier debugging across middleware and handlers
  • a stable correlation ID in JSON error responses
  • compatibility with gateways or proxies that already send x-request-id

If your application already has a stronger tracing layer, use the generator hook or a custom middleware wrapper to align the formats.

Released under the MIT License.