
# 构造请求
本节介绍REST API请求的组成，并以使用OAuth 2.0协议的客户端鉴权模式获取用户access_token为例说明如何调用API，该API获取access_token，access_token可以用于调用其他API时鉴权。
#### 请求URI
请求URI由如下部分组成：
**{URI-scheme} :// {Endpoint} / {resource-path} ? {query-string}**
尽管请求URI包含在请求消息头中，但大多数语言或框架都要求您从请求消息中单独传递它，所以在此单独强调。
表1URI中的参数说明 
| 参数            | 说明                                                                                                               |
|:---|:---|
| URI-scheme    | 表示用于传输请求的协议，当前所有API均采用**HTTPS**协议。                                                                               |
| Endpoint      | 指定承载REST服务端点的华为云Astro轻应用服务器域名或IP。                                                                                |
| resource-path | 资源路径，即API访问路径。从具体API的URI模块获取，例如"**获取用户Token**"API的resource-path为"/baas/auth/v1.0/oauth2/token"。                  |
| query-string  | 查询参数，是可选部分，并不是每个API都有查询参数。查询参数前面需要带一个"**？** "，形式为"**参数名=参数取值** "，例如"limit=10"，表示查询不超过10条数据。多个查询参数之间使用"**\&**"隔开。 |
   
例如，使用OAuth 2.0协议的客户端鉴权模式，获取用户access_token，"/baas/auth/v1.0/oauth2/token"为资源路径，假设华为云Astro轻应用服务开发态域名为"appcube.cn-north-4.huaweicloud.com"，URI拼接起来如下所示。
```
https://appcube.cn-north-4.huaweicloud.com/baas/auth/v1.0/oauth2/token
```
#### 请求方法
HTTP请求方法（也称为操作或动词），它告诉服务您正在请求什么类型的操作。
表2HTTP方法 
| 方法     | 说明                                        |
|:---|:---|
| GET    | 请求服务器返回指定资源，如获取对象列表。                      |
| PUT    | 请求服务器更新指定资源，如按记录ID更新数据。                   |
| POST   | 请求服务器新增资源或执行特殊操作，如新增对象数据。                 |
| DELETE | 请求服务器删除指定资源，如按记录ID列表删除对象数据。               |
| HEAD   | 请求服务器资源头部。                                |
| PATCH  | 请求服务器更新资源的部分内容。当资源不存在时，PATCH可能会去创建一个新的资源。 |
   
在使用OAuth 2.0的客户端鉴权模式，获取用户access_token的URI部分，您可以看到其请求方法为"**POST**"，则其请求为：
```
POST https://appcube.cn-north-4.huaweicloud.com/baas/auth/v1.0/oauth2/token
```
#### 请求消息头
附加请求头字段，如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头"**Content-Type**"，请求鉴权信息等。
详细的公共请求消息头字段请参见[表3]。
 表3公共请求消息头 
| 消息头名称        | 描述                                                                                                                                                                                                                                                                                                                                                                                                                              | 是否必选                                                           |
|:---|:---|:---|
| Content-Type | HTTP协议中设定的一个参数，用于标识返回的内容用什么格式去解析。 - 配置为"application/json"，表示浏览器将返回内容解析为json对象。  - 配置为"application/x-www-form-urlencoded"，表示urlencode格式。                                                              | 是                                                              |
| tenant-id    | 账号的标识，不能重复，用于定义哪个账号接收请求。                                                                                                                                                                                                                                                                                                                                                                                                        | 否                                                              |
| access-token | access-token是调用华为云Astro轻应用接口API要用到的访问令牌，在调用API的时候将access-token加到请求消息头，从而通过身份认证，获得操作API的权限。 当华为云Astro轻应用的用户和业务用户通过账号密码登录华为云Astro轻应用后，后台会生成一个访问令牌，在响应消息中携带，并存在浏览器中。下次再调用请求后，会带上这个访问令牌，表示这个用户已经被鉴权过。当第三方系统要访问华为云Astro轻应用的业务接口时，需要提前使用OAuth协议进行接入认证，获取客户端鉴权ID（Client ID）和客户端鉴权密钥（Client Secret），再使用客户端鉴权ID和客户端鉴权密钥调用接口"/baas/auth/v1.0/oauth2/token"获取access_token，从而获取华为云Astro轻应用业务接口的访问令牌。 | 否 使用access-token认证时该字段必选。 |
   
对于使用OAuth 2.0的客户端鉴权模式，获取用户access_token接口，由于不需要access-token认证，所以只添加"Content-Type"为"application/x-www-form-urlencoded"即可，添加消息头后的请求如下所示。
```
POST https://appcube.cn-north-4.huaweicloud.com/baas/auth/v1.0/oauth2/token 
Content-Type: application/x-www-form-urlencoded
```
#### 请求消息体（可选）
请求消息体通常以结构化格式（如JSON或XML）发出，与请求消息头中Content-type对应，传递除请求消息头之外的内容。若请求消息体中参数支持中文，则中文字符必须为UTF-8编码。
每个接口的请求消息体内容不同，也并不是每个接口都需要有请求消息体（或者说消息体为空），GET、DELETE操作类型的接口就不需要消息体，消息体具体内容需要根据具体接口而定。
对于使用OAuth 2.0的客户端鉴权模式，获取的用户access_token接口，您可以从[表4]看到所需的请求参数及参数说明。
 表4请求参数说明 
| 参数名称          | 类型     | 必选（M）/可选（O） | 参数位置 | 参数含义                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|:---|
| grant_type    | String | M           | Body | 授权模式，OAuth2.0中的grant_type字段的取值。取值范围如下： - client_credentials：客户端模式。  - authorization_code：授权码模式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| client_id     | String | M           | Body | 客户端ID，获取方法如下： 1. 在[华为云Astro轻应用服务控制台](https://console.huaweicloud.com/appcube/?locale=zh-cn#/home)中，单击"进入首页"，进入应用开发页面。  2. 在页面左上方单击![](https://support.huaweicloud.com/api-astrozero/zh-cn_image_0000001965119073.png)，选择"环境管理 \> 环境配置"，进入环境配置。  3. 选择"集成连接 \> OAuth"，单击"新建"。  4. 输入OAuth名称，设置授权类型为"客户端模式"，选择一个用户（当鉴权成功后，将获得到和此用户相同的权限。注意不要具有选择匿名用户权限"Anonymous_User_Profile"的用户，因为该权限不能访问API）。  5. 在OAuth管理列表页，单击具体OAuth所在行![](https://support.huaweicloud.com/api-astrozero/zh-cn_image_0000001965116965.png)，下载密钥文件到本地，从中获取客户端鉴权ID"client_id"取值。   |
| client_secret | String | M           | Body | 客户端密钥。 参考client_id，获取客户端鉴权密钥"client_secret"取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| redirect_url  | String | O           | Body | 重定向URL。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| locale        | String | O           | Body | 语言。 例如：en_US                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
将消息体加入后的请求如下所示，加粗的斜体字段需要根据实际值填写。
```
POST https://appcube.cn-north-4.huaweicloud.com/baas/auth/v1.0/oauth2/token 
Content-Type: application/x-www-form-urlencoded 
  
grant_type=client_credentials&client_id=********&client_secret=********
```
#### 发起请求
到这里为止这个请求需要的内容就具备齐全了，您可以使用[curl](https://curl.haxx.se/)、[Postman](https://www.getpostman.com/)或直接编写代码等方式发送请求调用API。
对于使用OAuth 2.0的客户端鉴权模式，获取的用户access_token接口。返回的响应消息中，"access_token"就是需要获取的用户access_token。有了access_token之后，就可以使用access_token调用华为云Astro轻应用的其他API。
