respond method
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.');
});