Skip to content

Commit

Permalink
Improve endpoint document
Browse files Browse the repository at this point in the history
  • Loading branch information
Orisdaddy committed Jul 29, 2020
1 parent c8accab commit 4ac2dcf
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 61 deletions.
82 changes: 56 additions & 26 deletions docs/6-Endpoint-CN.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,56 @@
# 域名

Endpoint 是请求访问的域名

优先级:request > profile > rules

```python
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest

client = AcsClient(
'ACCESS_KEY_ID',
'ACCESS_KEY_SECRET',
)
# 全局生效
client.add_endpoint("region_id", "product", "your endpoint")

request = DescribeRegionsRequest()
# 只对当前request生效
request.endpoint = 'your endpoint'
# 拼接规则设置网络,参数:share、 inner、 vpc、 public
request.request_network = 'public'
response = client.do_action_with_exception(request)
```

拼接规则方式需要产品端支持并符合规范方可使用。
# 域名

Endpoint 是请求接口服务的网络域名,如 `ecs.cn-hangzhou.aliyuncs.com`

### Endpoint 寻址

[相关源码](https://github.com/aliyun/aliyun-openapi-python-sdk/blob/master/aliyun-python-sdk-core/aliyunsdkcore/endpoint/default_endpoint_resolver.py)

1. 用户自定义

`用户自定义`是优先级最高的寻址逻辑,可以直接指定 endpoint 的具体内容。

```python
# 全局生效
client = AcsClient()
client.add_endpoint("<region_id>", "<product>", "<endpoint>")

# 只对当前 Request 生效
request = DescribeRegionsRequest()
request.set_endpoint("<endpoint>")
```

2. Endpoint 拼接规则

在请求 vpc 网络时或产品 SDK 具有 Endpoint 数据文件时,当前寻址逻辑才会生效。 Endpoint 数据文件示例 ([Ecs Endpoint Data File](https://github.com/aliyun/aliyun-openapi-python-sdk/blob/master/aliyun-python-sdk-ecs/aliyunsdkecs/endpoint.py))

```python
# 公网请求
request.request_network = "public" # 因为 `network` 的默认值为 `public`,所以默认情况下不需要配置 `network`

# 跨域请求
request.request_network = "share"

# Ipv6 请求
request.request_network = "ipv6"

# 代理请求
request.request_network = "proxy"

# 内部请求
request.request_network = "inner"

# Ipv4/Ipv6 双协议栈
request.request_network = "dualstack"

# vpc 请求
request.request_network = "vpc"
```

3. 根据 Python SDK Core 中的 [endpoints.json](https://github.com/aliyun/aliyun-openapi-python-sdk/blob/master/aliyun-python-sdk-core/aliyunsdkcore/data/endpoints.json) 数据文件进行寻址

内部操作,无需额外配置。

4. 请求 Location 服务接口,从远端获取

需要产品 SDK 具备 `ServiceCode`
81 changes: 55 additions & 26 deletions docs/6-Endpoint-EN.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,55 @@
# Endpoint

The endpoint is the domain you want to access

Priority:request > profile > rules

```python
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest

client = AcsClient(
'ACCESS_KEY_ID',
'ACCESS_KEY_SECRET',
)
# global
client.add_endpoint("region_id", "product", "your endpoint")

request = DescribeRegionsRequest()
# Only the current request is valid
request.endpoint = 'your endpoint'
# Splicing rules set the network; parameter:share、 inner、 vpc、 public
request.request_network = 'public'
response = client.do_action_with_exception(request)
```

Splicing rules need to be supported by the product side and conform to the specification before they can be used。
# Endpoint

Endpoint is the domain name of the service API. like `ecs.cn-hangzhou.aliyuncs.com`

### Search Endpoint

[Related source code](https://github.com/aliyun/aliyun-openapi-python-sdk/blob/master/aliyun-python-sdk-core/aliyunsdkcore/endpoint/default_endpoint_resolver.py)

1. User custom defined

`User custom defined` is the highest-priority logic to search endpoint and allows you to specify endpoint specifics directly.

```python
# Global effect
client = AcsClient()
client.add_endpoint("<region_id>", "<product>", "<endpoint>")


# Only works for the current request
request = DescribeRegionsRequest()
request.set_endpoint("<endpoint>")
```

2. Endpoint Splicing Rules

`Endpoint Splicing Rules` does not take effect until the vpc network is enabled or the product SDK has an Endpoint data file. Endpoint Data File Example : ([Ecs Endpoint Data File](https://github.com/aliyun/aliyun-openapi-python-sdk/blob/master/aliyun-python-sdk-ecs/aliyunsdkecs/endpoint.py))

```python
# Public network request(default)
request.request_network = "public" # Since the default value of `network` is `public`, there is no need to configure `network` by default.

# Share-domain request
request.request_network = "share"

# Ipv6 network request
request.request_network = "ipv6"

# Proxy network request
request.request_network = "proxy"

# Internal network request
request.request_network = "inner"

# Ipv4/Ipv6 Dual Stack
request.request_network = "dualstack"

# Vpc network request
request.request_network = "vpc"
```

3. Search endpoint from the [endpoints.json](https://github.com/aliyun/aliyun-openapi-python-sdk/blob/master/aliyun-python-sdk-core/aliyunsdkcore/data/endpoints.json) endpoint data file in the Java SDK Core Internal operation, no additional configuration required.

4. Request Location Service API to get `Endpoint` from the remote end.

Requires product SDK with `ServiceCode`.
12 changes: 3 additions & 9 deletions python-sdk-functional-test/new_endpoint_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
from aliyunsdkram.request.v20150501.ListAccessKeysRequest import ListAccessKeysRequest
from aliyunsdkros.request.v20150901.DescribeResourcesRequest import DescribeResourcesRequest
from aliyunsdkcs.request.v20151215.DescribeApiVersionRequest import DescribeApiVersionRequest
from aliyunsdkcloudapi.request.v20160714.DescribeApisRequest import DescribeApisRequest
import aliyunsdkcore.acs_exception.error_code as error_code

Expand Down Expand Up @@ -338,14 +338,8 @@ def test_call_rpc_request_with_client(self):
response = self.client.do_action_with_exception(request)

def test_call_roa_request_with_client(self):
request = DescribeResourcesRequest()
request.set_StackId("StackId")
request.set_StackName("StackName")
try:
response = self.client.do_action_with_exception(request)
assert False
except ServerException as e:
self.assertEqual("StackNotFound", e.get_error_code())
request = DescribeApiVersionRequest()
self.client.do_action_with_exception(request)

def test_location_service_code_not_equals_product_code(self):
request = DescribeApisRequest()
Expand Down

0 comments on commit 4ac2dcf

Please sign in to comment.