|
|
@@ -1,276 +1,141 @@
|
|
|
-# Alibaba Cloud Go Software Development Kit
|
|
|
-
|
|
|
-[](https://badge.fury.io/gh/aliyun%2Falibaba-cloud-sdk-go)
|
|
|
-[](https://travis-ci.org/aliyun/alibaba-cloud-sdk-go)
|
|
|
-[](https://ci.appveyor.com/project/aliyun/alibaba-cloud-sdk-go/branch/master)
|
|
|
-[](https://codecov.io/gh/aliyun/alibaba-cloud-sdk-go)
|
|
|
-[](https://app.codacy.com/app/aliyun/alibaba-cloud-sdk-go?utm_source=github.com&utm_medium=referral&utm_content=aliyun/alibaba-cloud-sdk-go&utm_campaign=Badge_Grade_Dashboard)
|
|
|
-[](https://goreportcard.com/report/github.com/aliyun/alibaba-cloud-sdk-go)
|
|
|
-[](https://app.fossa.io/projects/git%2Bgithub.com%2Faliyun%2Falibaba-cloud-sdk-go?ref=badge_shield)
|
|
|
-
|
|
|
-See [中文文档](./README_zh.md)
|
|
|
-
|
|
|
-The Alibaba Cloud Go Software Development Kit (SDK) allows you to access Alibaba Cloud services such as Elastic Compute Service (ECS), Server Load Balancer (SLB), and CloudMonitor. You can access Alibaba Cloud services without the need to handle API related tasks, such as signing and constructing your requests.
|
|
|
-
|
|
|
-This document introduces how to obtain and call Alibaba Cloud Go SDK.
|
|
|
-
|
|
|
-If you have any problem while using Go SDK, please [submit an issue](https://github.com/aliyun/alibaba-cloud-sdk-go/issues/new).
|
|
|
-
|
|
|
-
|
|
|
-## Online Demo
|
|
|
-
|
|
|
-**[API Explorer](https://api.aliyun.com)** provides the ability to call the cloud product OpenAPI online, and dynamically generate SDK Example code and quick retrieval interface, which can significantly reduce the difficulty of using the cloud API. **It is highly recommended**.
|
|
|
-
|
|
|
-<a href="https://api.aliyun.com" target="api_explorer">
|
|
|
- <img src="https://img.alicdn.com/tfs/TB12GX6zW6qK1RjSZFmXXX0PFXa-744-122.png" width="180" />
|
|
|
-</a>
|
|
|
-
|
|
|
-
|
|
|
-## Prerequisites
|
|
|
-
|
|
|
-- To use Alibaba Cloud Go SDK, you must have an Alibaba Cloud account as well as an AccessKey.
|
|
|
-
|
|
|
- The AccessKey is required when initializing `AcsClient`. You can create an AccessKey in the Alibaba Cloud console. For more information, see [Create an AccessKey](https://usercenter.console.aliyun.com/?spm=5176.doc52740.2.3.QKZk8w#/manage/ak).
|
|
|
-
|
|
|
- > **Note:** To increase the security of your account, we recommend that you use the AccessKey of the RAM user to access Alibaba Cloud services.
|
|
|
-
|
|
|
-- To use Alibaba Cloud Go SDK to access the APIs of a product, you must first activate the product on the [Alibaba Cloud console](https://home.console.aliyun.com/?spm=5176.doc52740.2.4.QKZk8w) if required.
|
|
|
-
|
|
|
-
|
|
|
-## Installation
|
|
|
-
|
|
|
-Use `go get` to install SDK:
|
|
|
-
|
|
|
-```sh
|
|
|
-$ go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
|
|
|
-```
|
|
|
-
|
|
|
-If you have used glide to manage dependence, you can also use glide to install Alibaba Cloud Go SDK:
|
|
|
-
|
|
|
-```powershell
|
|
|
-glide get github.com/aliyun/alibaba-cloud-sdk-go
|
|
|
-```
|
|
|
-## Using
|
|
|
-
|
|
|
-The following code example shows the three main steps to use Alibaba Cloud Go SDK:
|
|
|
-
|
|
|
-1. Create the client.
|
|
|
-2. Create an API request and set parameters.
|
|
|
-3. Initiate the request and handle exceptions.
|
|
|
-
|
|
|
-```go
|
|
|
-package main
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
-
|
|
|
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
|
|
|
- "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
|
|
|
-)
|
|
|
-
|
|
|
-func main() {
|
|
|
- // Create an ECS client
|
|
|
- ecsClient, err := ecs.NewClientWithAccessKey(
|
|
|
- "<your-region-id>", // Your Region ID
|
|
|
- "<your-access-key-id>", // Your AccessKey ID
|
|
|
- "<your-access-key-secret>") // Your AccessKey Secret
|
|
|
- if err != nil {
|
|
|
- // Handle exceptions
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- // Create an API request and set parameters
|
|
|
- request := ecs.CreateDescribeInstancesRequest()
|
|
|
- // Set the request.PageSize to "10"
|
|
|
- request.PageSize = requests.NewInteger(10)
|
|
|
- // Initiate the request and handle exceptions
|
|
|
- response, err := ecsClient.DescribeInstances(request)
|
|
|
- if err != nil {
|
|
|
- // Handle exceptions
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- fmt.Println(response)
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-When you create an instance of client, you need to fill out three parameters: `Region ID`、`Access Key ID` and `Access Key Secret`. You can get `Access Key ID` and `Access Key Secret` from console, and get `Region ID` from [region list](https://help.aliyun.com/document_detail/40654.html?spm=5176.doc52740.2.8.FogWrd)
|
|
|
-
|
|
|
-## Debug
|
|
|
-
|
|
|
-If the request has occured an error, you can view the HTTP request process by adding the environment variable `DEBUG=sdk`.
|
|
|
-
|
|
|
-## Ignore certificate validation
|
|
|
-
|
|
|
-When you send a https request, it may be fail due to certificate validation. At this moment, you can use the way below to ignore certificate validation.
|
|
|
-
|
|
|
-```go
|
|
|
-// You can set HTTPSInsecure as true to ignore certificate validation.
|
|
|
-// Request HTTPSInsecure has a higher priority than client HTTPSInsecure.
|
|
|
-// If you don't set any HTTPSInsecure, the default HTTPSInsecure is false.
|
|
|
-
|
|
|
-// Set request HTTPSInsecure(Only the request is effected.)
|
|
|
-request.SetHTTPSInsecure(true) // Set request HTTPSInsecure to true.
|
|
|
-isInsecure := request.GetHTTPSInsecure() // Get request HTTPSInsecure.
|
|
|
-
|
|
|
-// Set client HTTPSInsecure(For all requests which is sent by the client.)
|
|
|
-client.SetHTTPSInsecure(true) // Set client HTTPSInsecure to true .
|
|
|
-isInsecure := client.GetHTTPSInsecure() // Get client HTTPSInsecure.
|
|
|
-```
|
|
|
-
|
|
|
-## HTTP Proxy
|
|
|
-
|
|
|
-If you want to use http proxy, https proxy or no proxy, you can set environment variables `HTTP_PROXY`, `HTTPS_PROXY` or `NO_PROXY`, or you can set them by client.
|
|
|
-
|
|
|
-```go
|
|
|
-// client proxy has a high priority than environment variables.
|
|
|
-client.SetHttpProxy("http://127.0.0.1:8080") // Set Http Proxy.
|
|
|
-client.GetHttpProxy() // Get Http Proxy.
|
|
|
-
|
|
|
-client.SetHttpsProxy("https://127.0.0.1:8080") // Set Https Proxy.
|
|
|
-client.GetHttpsProxy() // Get Https Proxy.
|
|
|
-
|
|
|
-client.SetNoProxy("127.0.0.1,localhost") // Set No Proxy.
|
|
|
-client.GetNoProxy() // Get No Proxy.
|
|
|
-```
|
|
|
-
|
|
|
-## Keep-alive
|
|
|
-
|
|
|
-Alibaba Cloud Go SDK uses primordial `net/http` of Go language to send and accept requests,so it's configuration is the same as `net/http`'s,you can use config to deliver configuration to the bottomed httpClient.
|
|
|
-
|
|
|
-```go
|
|
|
-httpTransport := http.Transport{
|
|
|
- // set http client options
|
|
|
-}
|
|
|
-config := sdk.NewConfig()
|
|
|
- .WithHttpTransport(&httpTransport)
|
|
|
- .WithTimeout(timeout)
|
|
|
-ecsClient, err := ecs.NewClientWithOptions(config)
|
|
|
-```
|
|
|
-
|
|
|
-## Concurrent Request
|
|
|
-
|
|
|
-* Due to the concurrency nature of the Go language, we recommend that you control the concurrent requests for the SDK at the application level.
|
|
|
-* In order to facilitate your use, we also provide a direct use of concurrent invocation mode, the relevant concurrency control by the SDK internal implementation.
|
|
|
-
|
|
|
-### Timeout
|
|
|
-
|
|
|
-```go
|
|
|
-// Request Timeout has a higher priority than client Timeout.
|
|
|
-// If you don't set any timeout, the default ReadTimeout is 10 second, and the default ConnectTimeout is 5 second.
|
|
|
-
|
|
|
-// Set request Timeout(Only the request is effected.)
|
|
|
-request.SetReadTimeout(10 * time.Second) // Set request ReadTimeout to 10 second.
|
|
|
-readTimeout := request.GetReadTimeout() // Get request ReadTimeout.
|
|
|
-request.SetConnectTimeout(5 * time.Second) // Set request ConnectTimeout to 5 second.
|
|
|
-connectTimeout := request.GetConnectTimeout() // Get request ConnectTimeout.
|
|
|
-
|
|
|
-// Set client Timeout(For all requests which is sent by the client.)
|
|
|
-client.SetReadTimeout(10 * time.Second) // Set client ReadTimeout to 10 second.
|
|
|
-readTimeout := client.GetReadTimeout() // Get client ReadTimeout.
|
|
|
-client.SetConnectTimeout(5 * time.Second) // Set client ConnectTimeout to 5 second.
|
|
|
-connectTimeout := client.GetConnectTimeout() // Get client ConnectTimeout.
|
|
|
-```
|
|
|
-
|
|
|
-### Open SDK Client's concurrent function.
|
|
|
-
|
|
|
-```go
|
|
|
-// Maximum Running Vusers
|
|
|
-poolSize := 2
|
|
|
-// The maximum number of requests that can be cached
|
|
|
-maxTaskQueueSize := 5
|
|
|
-
|
|
|
-// Enable asynchronous functionality at creation time
|
|
|
-config := sdk.NewConfig()
|
|
|
- .WithEnableAsync(true)
|
|
|
- .WithGoRoutinePoolSize(poolSize) // Optional,default:5
|
|
|
- .WithMaxTaskQueueSize(maxTaskQueueSize) // Optional,default:1000
|
|
|
-ecsClient, err := ecs.NewClientWithOptions(config)
|
|
|
-
|
|
|
-// It can also be opened after client is initialized
|
|
|
-client.EnableAsync(poolSize, maxTaskQueueSize)
|
|
|
-```
|
|
|
-
|
|
|
-##### Make an asynchronous call
|
|
|
-Alibaba Cloud Go SDK supports asynchronous calls in two ways:
|
|
|
-
|
|
|
-1. Using channel as return values
|
|
|
- ```go
|
|
|
- responseChannel, errChannel := client.FooWithChan(request)
|
|
|
-
|
|
|
- // this will block
|
|
|
- response := <-responseChannel
|
|
|
- err = <-errChannel
|
|
|
- ```
|
|
|
-
|
|
|
-2. Use callback to control the callback
|
|
|
-
|
|
|
- ```go
|
|
|
- blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
|
|
|
- // handle the response and err
|
|
|
- })
|
|
|
-
|
|
|
- // blocker which is type of (chan int),is used to control synchronization,when returning 1 means success,and returning 0 means failure.
|
|
|
- // When <-blocker returns failure,err also will be handled by afferent callback.
|
|
|
- result := <-blocker
|
|
|
- ```
|
|
|
-
|
|
|
-## Generalize the call interface(CommonAPI)
|
|
|
-
|
|
|
-### What is CommonAPI
|
|
|
-
|
|
|
-CommonAPI which is launched by Alibaba Cloud Go SDK,is an universal grid way to call API. CommonAPI has the following characteristics: :
|
|
|
-1. Lightweight: only the Core package is required to initiate the call, without the need to download and install the SDK of each product line.
|
|
|
-2. Easy: call the newly released API without updating the SDK.
|
|
|
-3. Iterating fast
|
|
|
-
|
|
|
-### Start to use
|
|
|
-
|
|
|
-CommonAPI needs to be used in conjunction with the corresponding API documentation to query information about the API.
|
|
|
-
|
|
|
-You can query the API documentation for all products at[Document Center](https://help.aliyun.com/?spm=5176.8142029.388261.173.23896dfaav2hEF).
|
|
|
-
|
|
|
-Launching a CommonAPI request requires you to query the following parameters:
|
|
|
-* Domain name: the generic domain name for the product, which can be viewed in the "call mode" page.
|
|
|
-* API version: the version number of the API, in the form of 'yyyy-mm-dd', which can be found in the "public parameters" page.
|
|
|
-* Interface name (apiName) : the name of the API
|
|
|
-
|
|
|
-We take ECS [DescribeInstanceStatus API](https://help.aliyun.com/document_detail/25505.html?spm=5176.doc25506.6.820.VbHnW6) as an example.
|
|
|
-
|
|
|
-```go
|
|
|
-package main
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
- "os"
|
|
|
-
|
|
|
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
|
|
|
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
|
|
|
-)
|
|
|
-
|
|
|
-func main() {
|
|
|
-
|
|
|
- client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
|
|
|
- if err != nil {
|
|
|
- // Handle exceptions
|
|
|
- panic(err)
|
|
|
- }
|
|
|
-
|
|
|
- request := requests.NewCommonRequest()
|
|
|
- request.Domain = "ecs.aliyuncs.com"
|
|
|
- request.Version = "2014-05-26"
|
|
|
- request.ApiName = "DescribeInstanceStatus"
|
|
|
-
|
|
|
- request.QueryParams["PageNumber"] = "1"
|
|
|
- request.QueryParams["PageSize"] = "30"
|
|
|
-
|
|
|
- response, err := client.ProcessCommonRequest(request)
|
|
|
- if err != nil {
|
|
|
- // Handle exceptions
|
|
|
- panic(err)
|
|
|
- }
|
|
|
-
|
|
|
- fmt.Print(response.GetHttpContentString())
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-## License
|
|
|
-[](https://app.fossa.io/projects/git%2Bgithub.com%2Faliyun%2Falibaba-cloud-sdk-go?ref=badge_large)
|
|
|
+English | [简体中文](./README_zh.md)
|
|
|
+
|
|
|
+
|
|
|
+<p align="center">
|
|
|
+<a href=" https://www.alibabacloud.com"><img src="https://aliyunsdk-pages.alicdn.com/icons/AlibabaCloud.svg"></a>
|
|
|
+</p>
|
|
|
+
|
|
|
+<h1 align="center">Alibaba Cloud Client for Go</h1>
|
|
|
+
|
|
|
+<p align="center">
|
|
|
+<a href="https://badge.fury.io/gh/aliyun%2Falibaba-cloud-sdk-go"><img src="https://badge.fury.io/gh/aliyun%2Falibaba-cloud-sdk-go.svg" alt="Latest Stable Version"></a>
|
|
|
+<a href="https://app.fossa.io/projects/git%2Bgithub.com%2Faliyun%2Falibaba-cloud-sdk-go?ref=badge_shield"><img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Faliyun%2Falibaba-cloud-sdk-go.svg?type=shield" alt="License"></a>
|
|
|
+<br/>
|
|
|
+<a href="https://codecov.io/gh/aliyun/alibaba-cloud-sdk-go"><img src="https://codecov.io/gh/aliyun/alibaba-cloud-sdk-go/branch/master/graph/badge.svg" alt="codecov"></a>
|
|
|
+<a href="https://travis-ci.org/aliyun/alibaba-cloud-sdk-go"><img src="https://travis-ci.org/aliyun/alibaba-cloud-sdk-go.svg?branch=master" alt="Travis Build Status"></a>
|
|
|
+<a href="https://ci.appveyor.com/project/aliyun/alibaba-cloud-sdk-go/branch/master"><img src="https://ci.appveyor.com/api/projects/status/1hiuo3ppx5j49psv/branch/master?svg=true" alt="Appveyor Build Status"></a>
|
|
|
+<a href="https://app.codacy.com/app/aliyun/alibaba-cloud-sdk-go?utm_source=github.com&utm_medium=referral&utm_content=aliyun/alibaba-cloud-sdk-go&utm_campaign=Badge_Grade_Dashboard"><img src="https://api.codacy.com/project/badge/Grade/291a39e242364b04ad442f0cce0e30d5" alt="Codacy Badge"></a>
|
|
|
+<a href="https://goreportcard.com/report/github.com/aliyun/alibaba-cloud-sdk-go"><img src="https://goreportcard.com/badge/github.com/aliyun/alibaba-cloud-sdk-go" alt="Go Report Card"></a>
|
|
|
+</p>
|
|
|
+
|
|
|
+
|
|
|
+Alibaba Cloud Client for Go is a client tool that helps Go developers manage credentials and send requests, [Alibaba Cloud SDK for Go][SDK] dependency on this tool.
|
|
|
+
|
|
|
+
|
|
|
+## Online Demo
|
|
|
+[API Explorer][open-api] provides the ability to call the cloud product OpenAPI online, and dynamically generate SDK Example code and quick retrieval interface, which can significantly reduce the difficulty of using the cloud API.
|
|
|
+
|
|
|
+
|
|
|
+## Requirements
|
|
|
+- It's necessary for you to make sure your system meet the [Requirements][Requirements], such as installing a Go environment which is new than 1.10.x.
|
|
|
+
|
|
|
+## Installation
|
|
|
+Use `go get` to install SDK:
|
|
|
+
|
|
|
+```sh
|
|
|
+$ go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
|
|
|
+```
|
|
|
+
|
|
|
+If you have used glide to manage dependence,you can also use glide to install Alibaba Cloud Go SDK:
|
|
|
+
|
|
|
+```sh
|
|
|
+$ glide get github.com/aliyun/alibaba-cloud-sdk-go
|
|
|
+```
|
|
|
+
|
|
|
+## Quick Examples
|
|
|
+Before you begin, you need to sign up for an Alibaba Cloud account and retrieve your [Credentials](https://usercenter.console.aliyun.com/#/manage/ak).
|
|
|
+
|
|
|
+### Create Client
|
|
|
+```go
|
|
|
+package main
|
|
|
+
|
|
|
+import "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
|
|
|
+
|
|
|
+func main() {
|
|
|
+
|
|
|
+ client, err := sdk.NewClientWithAccessKey("REGION_ID", "ACCESS_KEY_ID", "ACCESS_KEY_SECRET")
|
|
|
+ if err != nil {
|
|
|
+ // Handle exceptions
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### ROA Request
|
|
|
+```go
|
|
|
+package main
|
|
|
+
|
|
|
+import "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
|
|
|
+
|
|
|
+func main() {
|
|
|
+ request := requests.NewCommonRequest() // Make a common request
|
|
|
+ request.Method = "GET" // Set request method
|
|
|
+ request.Product = "CS" // Specify product
|
|
|
+ request.Domain = "cs.aliyuncs.com" // Location Service will not be enabled if the host is specified. For example, service with a Certification type-Bearer Token should be specified
|
|
|
+ request.Version = "2015-12-15" // Specify product version
|
|
|
+ request.PathPattern = "/clusters/[ClusterId]" // Specify path rule with ROA-style
|
|
|
+ request.Scheme = "https" // Set request scheme. Default: http
|
|
|
+ request.ApiName = "DescribeCluster" // Specify product interface
|
|
|
+ request.QueryParams["ClusterId"] = "123456" // Assign values to parameters in the path
|
|
|
+ request.QueryParams["RegionId"] = "region_id" // Specify the requested regionId, if not specified, use the client regionId, then default regionId
|
|
|
+ request.TransToAcsRequest() // Trans commonrequest to acsRequest, which is used by client.
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### RPC Request
|
|
|
+```go
|
|
|
+package main
|
|
|
+
|
|
|
+import "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
|
|
|
+
|
|
|
+func main() {
|
|
|
+ request := requests.NewCommonRequest() // Make a common request
|
|
|
+ request.Method = "POST" // Set request method
|
|
|
+ request.Product = "Ecs" // Specify product
|
|
|
+ request.Domain = "ecs.aliyuncs.com" // Location Service will not be enabled if the host is specified. For example, service with a Certification type-Bearer Token should be specified
|
|
|
+ request.Version = "2014-05-26" // Specify product version
|
|
|
+ request.Scheme = "https" // Set request scheme. Default: http
|
|
|
+ request.ApiName = "CreateInstance" // Specify product interface
|
|
|
+ request.QueryParams["InstanceType"] = "ecs.g5.large" // Assign values to parameters in the path
|
|
|
+ request.QueryParams["RegionId"] = "region_id" // Specify the requested regionId, if not specified, use the client regionId, then default regionId
|
|
|
+ request.TransToAcsRequest() // Trans commonrequest to acsRequest, which is used by client.
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+## Documentation
|
|
|
+* [Requirements](docs/0-Requirements-EN.md)
|
|
|
+* [Installation](docs/1-Installation-EN.md)
|
|
|
+* [Client](docs/2-Client-EN.md)
|
|
|
+* [SSL Verify](docs/3-Verify-EN.md)
|
|
|
+* [Proxy](docs/4-Proxy-EN.md)
|
|
|
+* [Timeout](docs/5-Timeout-EN.md)
|
|
|
+* [Debug](docs/6-Debug-EN.md)
|
|
|
+* [Concurrent](docs/7-Concurrent-EN.md)
|
|
|
+* [Asynchronous Call](docs/8-Asynchronous-EN.md)
|
|
|
+
|
|
|
+
|
|
|
+## Issues
|
|
|
+[Opening an Issue][issue], Issues not conforming to the guidelines may be closed immediately.
|
|
|
+
|
|
|
+
|
|
|
+## Contribution
|
|
|
+Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before making a pull request.
|
|
|
+
|
|
|
+
|
|
|
+## References
|
|
|
+* [Alibaba Cloud Regions & Endpoints][endpoints]
|
|
|
+* [OpenAPI Explorer][open-api]
|
|
|
+* [Go][go]
|
|
|
+* [Latest Release][latest-release]
|
|
|
+
|
|
|
+
|
|
|
+## License
|
|
|
+[](https://app.fossa.io/projects/git%2Bgithub.com%2Faliyun%2Falibaba-cloud-sdk-go?ref=badge_large)
|
|
|
+
|
|
|
+[SDK]: https://github.com/aliyun/alibaba-cloud-sdk-go
|
|
|
+[issue]: https://github.com/aliyun/alibaba-cloud-sdk-go/issues/new
|
|
|
+[open-api]: https://api.aliyun.com/#/
|
|
|
+[latest-release]: https://github.com/aliyun/alibaba-cloud-sdk-go/releases
|
|
|
+[go]: https://golang.org/dl/
|
|
|
+[endpoints]: https://developer.aliyun.com/endpoints
|