request method

Future<RawApiResponse> request({
  1. required ApiVersion version,
  2. required ApiHttpMethod method,
  3. required String path,
  4. Map<String, String>? queryParameters,
  5. String? body,
  6. String? contentType,
  7. Map<String, String>? headers,
})

Führt einen versionsgebundenen, relativen Request aus.

path - Pfad relativ zur konfigurierten DOCUframe-API, ohne Versions- und ohne Alias-Präfix (beides ergänzt der Runtime); mit oder ohne führenden /. headers - zusätzliche Header; überschreiben bei Namensgleichheit die Standard-Header.

Wirft ArgumentError bei ungültigem Pfad (absolute URL, Schema, ..-Traversierung, Backslashes (roh oder als %5c), eigenem v1/v2- oder Alias-Präfix, Query oder Fragment im Pfad) und StateError, wenn der zugehörige Runtime bereits freigegeben wurde.

Implementation

Future<RawApiResponse> request({
  required ApiVersion version,
  required ApiHttpMethod method,
  required String path,
  Map<String, String>? queryParameters,
  String? body,
  String? contentType,
  Map<String, String>? headers,
}) {
  final rawRequest = RawApiRequest(
    version: version,
    method: method,
    path: path,
    queryParameters: queryParameters,
    body: body,
    contentType: contentType,
    headers: headers,
  );

  _validatePath(rawRequest.path);

  // Raw ist NIE Multi-Request-fähig, unabhängig vom angefragten Pfad
  // (derselbe Pfad kann über einen nativen Endpoint durchaus multi-fähig
  // sein). Dies läuft daher über eine interne No-Buffer-Runtime-Grenze
  // statt über eine öffentliche Per-Request-Buffering-Option.
  return RuntimeExecutionContext.runWithoutBuffering(
    () => _runtime.execute(
      ApiRequest<RawApiResponse>(
        method: rawRequest.method,
        version: rawRequest.version,
        path: rawRequest.path,
        queryParameters: rawRequest.queryParameters,
        body: rawRequest.body,
        contentType: rawRequest.contentType,
        additionalHeaders: rawRequest.headers,
        authentication: AuthenticationPolicy.session,
        responsePolicy: const RawSessionAwareResponsePolicy(),
        operationId: 'raw.${version.name}.${method.name}',
      ),
    ),
  );
}