request method
Request to the server.
Implementation
@override
Future<O?> request(I? input, RequestContext context){
context.setInput(name, context);
Future<HttpClientRequest> req;
ApiServerIO server = ApiRegistory.getApiServer(_serverName) as ApiServerIO;
Uri uri;
if(_uriBuilder != null){
uri = _uriBuilder!(server.scheme, server.host, server.port, _path, input, context, (scheme, host, port, path, input) => server.uriBuilder?.call(server.scheme, server.host, server.port, _path, _method, input));
}else if(server.uriBuilder != null){
uri = server.uriBuilder!(server.scheme, server.host, server.port, _path, _method, input);
}else{
uri = Uri(
host: server.host,
port: server.port,
scheme: server.scheme,
path: _path
);
}
switch(_method){
case HttpMethod.GET:
req = server.client.getUrl(uri);
break;
case HttpMethod.POST:
req = server.client.postUrl(uri);
break;
case HttpMethod.PUT:
req = server.client.putUrl(uri);
break;
case HttpMethod.PATCH:
req = server.client.patchUrl(uri);
break;
case HttpMethod.HEAD:
req = server.client.headUrl(uri);
break;
case HttpMethod.DELETE:
req = server.client.deleteUrl(uri);
break;
}
Future<HttpClientResponse> resp = req.then((HttpClientRequest request){
if(_requestBuilder != null){
_requestBuilder!(request, input, (request, input) => server.requestBuilder?.call(request, _method, input));
}else if(server.requestBuilder != null){
server.requestBuilder!(request, _method, input);
}
return request.close();
}).catchError(
(e) => context.exception = e
).whenComplete(() {if(context.exception != null) throw context.exception;});
O? output = _outputCreator == null ? null : _outputCreator!(context);
return resp.then((HttpClientResponse response) async{
try{
if(_responseParser != null){
await _responseParser!(
response,
output,
(response, output) {
return server.responseParser?.call(response, _method, output)
.catchError((e) => (e) => context.exception = e);
}
);
}else if(server.responseParser != null){
await server.responseParser!(response, _method, output);
}
}catch(e){
context.exception = e;
}
if(output != null){
context.setOutput(name, output);
}
return output;
}).catchError(
(e) => context.exception = e
).whenComplete(() {if(context.exception != null) throw context.exception;});
}