RESTful 接口定义标准
### RESTful 接口定义标准知识点详解 #### 一、简要说明 RESTful API设计是一种基于HTTP协议的标准网络应用程序接口设计方式。本文件详细介绍了该公司内部所采用的一套RESTful API设计准则,旨在提高API的易用性和一致性。本文档主要包含以下几个方面的内容: - **接口风格**:遵循RESTful风格,即每个资源通过URI标识,且能够通过HTTP标准动词进行操作。 - **基础URL结构**:分为单资源、单资源带ID、复数资源、复数资源带查找以及资源下的子集五种情况,并对每种情况进行了详细解释。 - **返回值格式**:规定了API返回数据的具体格式,包括单资源、复数资源和带有分页功能的复数资源。 - **高级URL**:提供了进一步的URL结构扩展,如添加业务域来区分不同的权限或功能。 #### 二、接口风格详解 在RESTful风格中,资源是核心概念,而资源通过URL(统一资源定位符)进行标识。对于同一资源,可以使用不同的HTTP方法(GET、POST、PUT、DELETE等)进行操作,实现资源的不同交互。 - **GET**:获取资源的信息。 - **POST**:向服务器提交资源。 - **PUT**:更新资源。 - **DELETE**:删除资源。 #### 三、基础URL结构详解 根据资源的不同类型,URL的结构也会有所变化。 1. **单资源** - **格式**:`/{resource}` - **GET**:返回一个新的资源(使用默认值生成)。 - **POST**:创建一个新资源。 2. **单资源带ID** - **格式**:`/{resource}/{:id}` - **GET**:返回对应ID的资源。 - **PUT**:修改对应ID的资源。 - **DELETE**:删除对应ID的资源。 3. **复数资源** - **格式**:`/{resources}` - **GET**:返回所有资源。 4. **复数资源带查找** - **格式**:`/{resources}` - **GET**:支持通过`key_like`和`key_in`参数查询资源。 - `key_like`:SQL LIKE操作符,匹配含有特定字符的键值。 - `key_in`:SQL IN操作符,匹配指定集合中的键值。 - **分页查询**:通过`?page=1&pageSize=10`这样的参数来实现分页。 5. **资源下的子集** - **格式**:`/{resource}/{:id}/{item}` - **GET**:返回新的子资源(使用默认值生成)。 - **POST**:创建新的子资源。 #### 四、返回值格式详解 为了保证API的响应数据具有良好的一致性和可读性,定义了一套固定的返回值格式。 1. **单资源** - **message**:消息提示。 - **code**:状态码,通常为`200`。 - **success**:布尔值,表示请求是否成功。 - **data**:JSON格式的数据对象。 2. **复数资源** - 结构与单资源类似,但`data`字段是一个JSON数组,包含多个资源对象。 3. **复数资源带分页** - 在复数资源的基础上增加了分页信息。 - **message**:消息提示。 - **code**:状态码,通常为`200`。 - **success**:布尔值,表示请求是否成功。 - **data**:包含分页信息的对象。 - **totalElements**:资源总数。 - **totalPages**:总页数。 - **size**:每页大小。 - **number**:当前页码(从0开始计数)。 - **sort**:排序规则。 - **last**:是否为最后一页。 - **first**:是否为第一页。 - **content**:包含当前页数据的JSON数组。 #### 五、高级URL结构详解 除了基本的URL结构外,还提供了一种更灵活的方式来组织API路径。 - **格式**:`/{domain}/{rest-convention}` - **domain**:业务域,用于区分不同的权限或功能。 - **rest-convention**:具体接口,实现业务逻辑。 #### 六、文档实例 以GitHub API为例,说明如何调用API并处理返回的数据。 - **地址**:`https://api.github.com/api/v1/customer/:id` - **方法**:`GET` - **调用方法**:`curl -H "token:XXXXXXXXXXX" https://api.github.com/api/v1/customer/1` **Header参数**: - **token**:授权令牌。 **返回值示例**: - **Success 200** - **message**:消息体。 - **code**:状态码`200`。 - **success**:布尔值`true`。 - **data**:返回结果对象。 - **id**:资源ID。 - **nickname**:昵称。 - **name**:用户名。 - **password**:密码。 - **cate**:用户分类(0:游客,1:注册用户)。 - **headimgId**:用户头像ID。 - **mobile**:电话号码。 - **gender**:性别(1:男,2:女)。 - **age**:年龄。 - **birth**:出生日期。 - **city**:城市。 - **province**:省份。 - **country**:国家。 - **headimgurl**:头像URL。 - **enabled**:是否启用。 - **optId**:操作者ID。 - **optDate**:操作时间。 - **createId**:创建者ID。 - **createDate**:创建时间。 - **Success 400** - **message**:错误信息。 - **code**:状态码`4xx`。 - **success**:布尔值`false`。 以上内容详细地解释了RESTful接口定义标准的各项细节,有助于开发者更好地理解和应用这一标准,从而提高开发效率和代码质量。