respond method

Future<Response> respond(
  1. Request request,
  2. String rest
)

The answer to request, whose path below the API is rest (no leading slash).

Implementation

Future<Response> respond(Request request, String rest) =>
    _guard(() async {
      final String method = request.method.toUpperCase();
      if (method != 'GET' && method != 'HEAD') _requireCsrf(request);
      final List<String> segments = rest
          .split('/')
          .where((String s) => s.isNotEmpty)
          .map(Uri.decodeComponent)
          .toList(growable: false);
      if (segments.isEmpty) {
        throw _StudioRefusal(404, 'not_found', 'No such Studio endpoint.');
      }
      switch (segments.first) {
        case 'models':
          return await _models(request, method, segments.sublist(1));
        case 'pages':
          return await _pages(request, method);
        case 'site':
          return await _site(request, method, segments.sublist(1));
        case 'functions':
          return await _functions(request, method);
        case 'grants':
          if (segments.length == 1) return await _grantsAt(request, method);
        case 'queues':
          return await _queuesAt(method, segments.sublist(1));
        case 'cache':
          return await _cacheAt(method, segments.sublist(1));
        case 'graph':
          if (segments.length == 1) return _graph(method);
        case 'me':
          if (segments.length == 1) return await _me(request, method);
        case 'repository':
          return await _repositoryAt(request, method, segments.sublist(1));
      }
      throw _StudioRefusal(404, 'not_found', 'No such Studio endpoint.');
    });