u-sdk 0.6.3

Some useful SDKs
Documentation
# 阿里云 OpenAPI 通用(非 SLS, OSS) API 注意事项记录

- 对于 API 文档的请求参数,比如:

| 名称                                            | 类型              | 必填 | 描述             | 示例值  |
|:----------------------------------------------|:----------------|----|----------------|------|
| TagFilter                                     | `array<object>` || 标签过滤规则。        |      |
| <span style="padding-left:20px"> - Key</span> | `string`        || 标签键,用于查询的过滤条件。 | tag1 |
| <span style="padding-left:20px"> - Key</span> | `string`        || 标签值,用于查询的过滤条件。 | aaa  |

签名的时候对于这种复杂对象的转化为url query参数的时候有两种方法:

1. 扁平化参数:将复杂对象展开为多个简单参数。例如,上述的 TagFilter 可以展开为 TagFilter.1.Key=tag1, TagFilter.1.Value=aaa
2. JSON 序列化:将复杂对象序列化为 JSON 字符串,然后作为单个参数传递。例如,上述的 TagFilter 可以序列化为
   TagFilter=[{"Key":"tag1","Value":"aaa"}]

具体使用的是哪种,直接看API的文档可能不太清楚,需要参考API元数据,如果下面该字段API的元数据:

```json
{
    "name": "TagFilter",
    "in": "query",
    "style": "json",
    "schema": {
        "description": "标签过滤规则。",
        "type": "array",
        "items": {
            "type": "object",
            "properties": {
                "Key": {
                    "description": "标签键,用于查询的过滤条件。",
                    "type": "string",
                    "required": false,
                    "example": "tag1"
                },
                "Value": {
                    "description": "标签值,用于查询的过滤条件。",
                    "type": "string",
                    "required": false,
                    "example": "aaa"
                }
            },
            "required": false
        },
        "required": false
    }
}
```

[OpenAPI签名文档](https://help.aliyun.com/zh/sdk/product-overview/v3-request-structure-and-signature)说到:

在OpenAPI元数据中,如果API的请求参数信息包含了"in":"query"时,需要将这些请求参数按照如下构造方法拼接起来:

1. 将请求参数按照参数名称的字符顺序升序排列。
2. 使用UTF-8字符集按照RFC3986的规则对每个参数的参数名称和参数值分别进行URI编码,具体规则与上一节中的CanonicalURI编码规则相同。
3. 使用等号(=)连接编码后的请求参数名称和参数值。当参数没有值时,应使用空字符串作为该参数的值。
4. 多个请求参数之间使用与号(&)连接。

> ### 重要
>
> 当请求参数类型是array、object时,需要将参数值转化为带索引的键值对。
>
> 当请求参数是JSON字符串类型时,JSON字符串中的参数顺序不会影响签名计算。
>
> 当无查询字符串时,使用空字符串作为规范化查询字符串。

所以这个字段包含在url的query中,但是需要使用哪种方式,需要参考API元数据中的style字段。如果为json,则把这个复杂字段序列化为JSON字
符串传递; 如果style字段不是`json`,遇见过的有`repeatList`或其他,或者不存在style字段,则使用扁平化参数传递(
默认序列化就是扁平化处理)。

在usdk中,传入的给签名的struct如果序列化的时候这个字段是struct类型,那么会按照扁平化方式处理,如果需要最终结果是json字符串,
那么需要自定义这个字段的serialize方法,手动把它序列化为json字符串。

# 授权信息的确认

有的时候,在api文档`授权信息`这一块会显示:当前API暂无授权信息透出。

并不是说这个API不需要授权,而是没写出来。

获取具体授权方式方法:在RAM的`权限策略`
有可视化编辑器,在里面搜索这个API的操作名称;在[OpenAPI文档](https://api.aliyun.com/)上具体的api上会有更详细的api相关信息