in ts/src/client.ts [1175:1323]
async execute(params: $OpenApiUtil.Params, request: $OpenApiUtil.OpenApiRequest, runtime: $dara.RuntimeOptions): Promise<{[key: string]: any}> {
let _runtime: { [key: string]: any } = {
key: runtime.key || this._key,
cert: runtime.cert || this._cert,
ca: runtime.ca || this._ca,
readTimeout: runtime.readTimeout || this._readTimeout,
connectTimeout: runtime.connectTimeout || this._connectTimeout,
httpProxy: runtime.httpProxy || this._httpProxy,
httpsProxy: runtime.httpsProxy || this._httpsProxy,
noProxy: runtime.noProxy || this._noProxy,
socks5Proxy: runtime.socks5Proxy || this._socks5Proxy,
socks5NetWork: runtime.socks5NetWork || this._socks5NetWork,
maxIdleConns: runtime.maxIdleConns || this._maxIdleConns,
retryOptions: this._retryOptions,
ignoreSSL: runtime.ignoreSSL,
tlsMinVersion: this._tlsMinVersion,
disableHttp2: this._disableHttp2 || false,
}
let _retriesAttempted = 0;
let _lastRequest = null, _lastResponse = null;
let _context = new $dara.RetryPolicyContext({
retriesAttempted: _retriesAttempted,
});
while ($dara.shouldRetry(_runtime['retryOptions'], _context)) {
if (_retriesAttempted > 0) {
let _backoffTime = $dara.getBackoffDelay(_runtime['retryOptions'], _context);
if (_backoffTime > 0) {
await $dara.sleep(_backoffTime);
}
}
_retriesAttempted = _retriesAttempted + 1;
try {
let request_ = new $dara.Request();
// spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
let headers = this.getRpcHeaders();
let globalQueries : {[key: string ]: string} = { };
let globalHeaders : {[key: string ]: string} = { };
if (!$dara.isNull(this._globalParameters)) {
let globalParams = this._globalParameters;
if (!$dara.isNull(globalParams.queries)) {
globalQueries = globalParams.queries;
}
if (!$dara.isNull(globalParams.headers)) {
globalHeaders = globalParams.headers;
}
}
let extendsHeaders : {[key: string ]: string} = { };
let extendsQueries : {[key: string ]: string} = { };
if (!$dara.isNull(runtime.extendsParameters)) {
let extendsParameters = runtime.extendsParameters;
if (!$dara.isNull(extendsParameters.headers)) {
extendsHeaders = extendsParameters.headers;
}
if (!$dara.isNull(extendsParameters.queries)) {
extendsQueries = extendsParameters.queries;
}
}
let requestContext = new $SPI.InterceptorContextRequest({
headers: {
...globalHeaders,
...extendsHeaders,
...request.headers,
...headers,
},
query: {
...globalQueries,
...extendsQueries,
...request.query,
},
body: request.body,
stream: request.stream,
hostMap: request.hostMap,
pathname: params.pathname,
productId: this._productId,
action: params.action,
version: params.version,
protocol: this._protocol || params.protocol,
method: this._method || params.method,
authType: params.authType,
bodyType: params.bodyType,
reqBodyType: params.reqBodyType,
style: params.style,
credential: this._credential,
signatureVersion: this._signatureVersion,
signatureAlgorithm: this._signatureAlgorithm,
userAgent: OpenApiUtil.getUserAgent(this._userAgent),
});
let configurationContext = new $SPI.InterceptorContextConfiguration({
regionId: this._regionId,
endpoint: request.endpointOverride || this._endpoint,
endpointRule: this._endpointRule,
endpointMap: this._endpointMap,
endpointType: this._endpointType,
network: this._network,
suffix: this._suffix,
});
let interceptorContext = new $SPI.InterceptorContext({
request: requestContext,
configuration: configurationContext,
});
let attributeMap = new $SPI.AttributeMap({ });
// 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
await this._spi.modifyConfiguration(interceptorContext, attributeMap);
// 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
await this._spi.modifyRequest(interceptorContext, attributeMap);
request_.protocol = interceptorContext.request.protocol;
request_.method = interceptorContext.request.method;
request_.pathname = interceptorContext.request.pathname;
request_.query = interceptorContext.request.query;
request_.body = interceptorContext.request.stream;
request_.headers = interceptorContext.request.headers;
let response_ = await $dara.doAction(request_, _runtime);
_lastRequest = request_;
_lastResponse = response_;
let responseContext = new $SPI.InterceptorContextResponse({
statusCode: response_.statusCode,
headers: response_.headers,
body: response_.body,
});
interceptorContext.response = responseContext;
// 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
await this._spi.modifyResponse(interceptorContext, attributeMap);
return {
headers: interceptorContext.response.headers,
statusCode: interceptorContext.response.statusCode,
body: interceptorContext.response.deserializedBody,
};
} catch (ex) {
_context = new $dara.RetryPolicyContext({
retriesAttempted : _retriesAttempted,
httpRequest : _lastRequest,
httpResponse : _lastResponse,
exception : ex,
});
continue;
}
}
throw $dara.newUnretryableError(_context);
}