compliance/assets/images/RESTful/RESTful_easy.txt
Wyle.Gong-巩文昕 32676a314f init
2025-05-12 14:34:50 +08:00

390 lines
10 KiB
Plaintext

RESTful接口设计要求
1
使用范围
本设计要求旨在基于标准的 RESTful 协议。对部分内容的使用加以约束。指导 RESTful接口的设计人员设计出相对统
-的接口。提高接口的可复用性。增强系统的扩展性。
2.参考文档
RESTfuI官方文档
HTTP官方文档
3.基本规范
3.1 命名规约
[推荐] RESTfuI 接口采用以下格式迸行命名: [协议]:[域名]1[项目代码]1[模块名称]/[版本]1[资源路径] 。模块名称可
以有多级。使用斜线(1)分开。根据项目的情况确定。
正例: https:llapi.example.comlauthlvlusers/{user_id} II 版本 V1 的查询用户列表的 API 接0
注意:
个产品无论辰端有多少个服务组成也应该只有
ARI入O, 示例中的 API 入0为:
https:llapi.example.coml
3.2 域名
[推荐] 在不会引起跨域问题的前提下
应该尽量将 API 部署在专用域名之下。
正例: https:llapi.example.com
3.3 模块
[强制] 模块命名尽量采用全小写单词。如果需要连接多个单词。则采用中划线( -)。如果要把多个单词连接起来形
成-个具有描逑性的名称则使用下划线(
)连接
3.4 资源路径
[强制] 资源的路径应该从根到子依次如下:
Iresources}Iresource_id}l{sub_resources}l{sub
FeSOUTCe_
_id}l{sub_resource
property}
(强制] URL 中不采用大小写混合的驼峰命名方式。尽量采用全小写单词;
如果需要连接多个单词
则采用连接
符 _
不能出现
正例:
/api
task_
吕rOUps
反例:
Japi
task-groups
[强制] 接口路径使用资源名词而非动词。动作应由 HTTP Method 体现。资源组可以迸行逻辑嵌套
正例: POST
Japi
tasks 或 /apiltask_
Broups /I/tasks 表示在 id 为1的任务组下创建任务
反例: POST
Japilcreate_
ta5k
接口路径中的获取复数资源的时候使接口路径中的获取复数资源的时候使用复数
正例:
Japi
tasks
反例:
Japi
task/list
3.5 请求参数
(强制] 如果有请求参数。请求参数使用小驼峰
[推荐] header中要加入一个唯
-的追踪标识符" X-Trace-ID" (Trace ID) , 用于请求的跟踪和对账。
X-Trace
ID:
12324567-2896-1243-3456-426614174000
POST 请求参数放入
body 中
使用 json 绢码方式。
正例:
POST http:
LWWVI
examp Le
COm HTTP/I.1
Content-Type:
applicationyjson;charset=UCF_
X-Trace
ID:
12324567-2896-1243-
3456-426614174000
{"title"
Itesti
sUbValue
[1,2,3]}
3.6
过滤信息
[推荐] 在请求时推荐使用过滤。排序和分页。`减轻服务器的负担和网络通信的数据量
1。分页参数
limit
指定每页显示的资源数量。
ffset
指定从哪里开始获取资源。
GET
/apilitems ? limit= IO&offset- 20
或者使用 page 参数:
GET /apilitems
page= 381imit-10
2。排序参数
SOrt
指定排序的字段。
order
指定排序的方向 (升序或降序)
GET
1api/iems
sort=created_atgorder-desc
3。筛选参数
filter
根据特定条件筛选资源。
可以使用多个筛选参数来细化条件。
GET
1api/items
filter [status ]=activegfilter [type] =premium
4。搜索参数
Search
对资源迸行搜索。
GET
1api/iems
search-widget
日期范围
date_
from
date
to
指定日期范围进行筛选。
GET
1api/orders
date
From-2023-01-018date_
t0=2023-01-31
4.响应
[强制] HTTP请求的返回码是200的情况下。响应数据应该包含三个属性。状态码 (code)
信息描述
(message) , 响应数据 (data) _
4.1 状态码 (code)
[推荐] 状态码分成三类。业务逻辑错误
(1XXX)
数据验证错误
(2xxX) 和其它
3XXXI
业务逻辑错误
错误代码
错误消息
描述
1001
Inyalidoperation
请求的操作无效或未被支持
1002
ResourceNotFound
请求的资源不存在
1003
ResourceAlreadyExists
请求创建的资源已经存在。
1004
ResourcelnUse
资源正在使用中。无法执行请求的操作。
1005
PermissionDenied
用户没有足够的权限执行请求的操作。
1006
QUOtaExceeded
请求的操作导致配额超限。
1007
SericeUnavailable
服务当前不可用
可能是临时的。
1008
DependenciesFailed
请求的操作依赖于其他服务_
而这些服务失败了
1009
PaymentRequired
请求的操作需要支付。但末捉供支付信息
数据验证错误
错误代码
错误消息
描述
2001
ValidationError
请求的数据验证失败
2002
MissingField
请求中缺少必要的字段
2003
InvalioField
请求中的字段值无效_
2004
FieldFormatError
请求中的字段格式错误。
2005
FieldRangeError
请求中的字段值超出允许的范围。
2006
FielaLengthError
请求中的字段长度不符合要求。
2007
DuplicateEntry
请求中的数据已经存在。导致重复=
其他错误
错误代码
错误消息
描述
3001
Timeout
请求处理超时
3002
NetworkError
网络错误
如DNS查询失败或连接拒绝
3003
ContigurationError
服务配叠错误。如数据库连接失败。
3004
SystemMaintenance
系统正在维护中。暂时无法提供服务
3005
UnknownError
出现未知错误。无法确定具悴原因_
4.2 信息描述 (message)
[强制] 信息描述填写项目定义的状态值。
正例:
object类型数据
Icodel
500002
"message
UNKNOWNI
I0ata"
4.3 响应数据 (data)
[强制] array 类型数据。通过 list 字段。保证 data 的 Object 结构
正例:
/1
array类型数据
Icodel
100000
Message
WSUCCESSI
Tdatal
IZist": []
[强制1 空数组使用 [],而不是 null
正例:
Icodel
100000
Message
ISUCCESSI
Tdatal
IiOI
IIrOLe_
1d5"
反例
Icodel
100000
"message
ISUCCESS
I0ata"
Iid";
IIFOLe_
T05"
nU11
5.异步策略
RESTfuI 接口的异步策略是指在设计和实现 RESTfuL API 时采用的一种方法。它允许服务器在处理请求时不必立即返
回结果。而是可以在处理完成后通过某种机制将结果通知给客户端。这种策略适用于那些处理时间较长或者需要等待
其他操作完成的请求。如大量数据的处理 _
远程服务的调用等。
5.1 复杂业务逻辑
在业务逻辑比较复杂
不能第
时间获取到结果的接口
建议使用异步的策略。另外设计一个查询结果的接口。或者
利用Nebhooks. 事件源
(Server-Send Event) _
Websocket等技术。
5.2 大文件上传下载
[推荐] 对于大文件的上传下载建议使用异步策略
接口快速返回。文件参与的事务分别迸行处理。在返回结果中携
带可查询迸度的接口地址。
(推荐1 文件上传成功返回文件I0;
避免暴露内部路径。
[推荐1 设计独立的文件上传和下载接口。井独立部署避免和其它服务使用相同的网关。造成其它服务的延迟。
6。说明文档
接口描述
详细解释接口的用途
包括业条场暴
处理逻辑等。例如:
此接口用于获取系统中已注册用户的基本僖息
包括用户名。年龄。性别等。以及它的处理逻辑和可能的业条场
请求头
列出必须包含的请求头信息。如 Content
TyDe:
application/json 用于表示请求体的格式为JSON
对于需要身份验证的接0
说明认证相关的请求头。如 Authorization:
Bearer
[token]
请求体
如果请求方式允许有请求体 (如POST PUT), 详细说明请求体的结构
给出请求体数据类型
并给出示例数据。例如:
Iusername
wtestuseri
Ipassword"
01234561
响应头
[强制] 列出可能包含的响应头信息。如"Content
Type: applicationljson " 表示响应体为JSON格式=
响应体&状态码
根据不同的状态码。详细说朋响应体的结构
给出成功和失败情况下的示例数据。例如。对于获取用户信息成功的响应:
Iid":
WUsername
Wtestuserl
Iagel
25,
genderw
Imale"
对于错误情况。给出错误返回的示例数据:
WeFrori
Invalid
UISername
passwordi
粝堰枚
数据格式
[推荐] 参数或者返回值如果有表示状态的字段
要用枚举类型定义出来。
(推荐1 时间字段以 ISO 8601格式返回
YYYY-MM-DDTHH:MM:55+08:00
[推荐] 如果时间的精度要求到毫秒级别,
使用 UNIX 时间戳。
格式
含义
YYYY
是公历中0000到9999年的十进刮数字
(连宁符〉 在字符串中实际出现两次。
是一年中从01 (1月〉到12 (12月 的月份
足 个月中从01到31的日期
'T"出现在字符串中
表示时间元秦的开始
是自午夜以来经过的完整小时数;
以00到24的两位小敬表示。
{冒号〉在字符串中实际出现两次。
足自小时开始以来的完整分钟数
从00到59的两位小数
是自分钟开始以来的完整秒数
从00到59的两位歆
{总)按字面意恩出觋在字符串中
是自第二个开始以来的完整亳秒数。以三位十进制数字表示。
是指定为乙" {UTC) 或"+"或"-"的时区偏移显,
后跟对间表达式HHmm
正例:
原时间
Updated
Date: 2017-12-04T18:07:57+08
Creation Date: 2017-12
04T18:07: 44-08:00
ReBistry Expiry
Date: 2018-12-04T18:07:44+08:00
换算成北京时间:
Updated
Date: 2017-12-05 02:07:57
Creation Date: 2017-12
05 02:07:44
ReBistry Expiry
Date: 2018-12-05
02:07:44
7.安全
7.1网络环境划分
[推荐1 将网络环境划分为三种
即互联网环境。石油内部网络环境以及系统内部微隔离网络环境。接口设计人员要
依据使用环境来确定接口设计时所采用的安全策略。
互联网环境: 与外部互联的环境。
忑油内部网络环境: 中石油的内部网络。
系统内部微隔离网络环境: 使用微隔离技术为
组微服务隔离出来的独立环境。
7.2认证和授权
应使用安全的身份验证和授权机制来验证客户端的身份
并确定其是否有权访问特定的资源。
7.2.1
API
[推荐] API Key通常用于简单的AP1访问控制。适用于不需要用户授权的场景。服务器根据API Key识别客户端并允
许或拒绝请求。通常没有过期时间
一旦发放
除非手动撤销
在这种需求情况下。使用 API Key 机制较为适宜。建
议在石油内部网络或者微隔离网络中使用。
7.2.2 OAuth token
[推荐] OAuth Token是
-种复杂的认证机制。涉及到授权流程
设置有效期
井且可以提供更细粒度的控制。在需
要更复杂授权流程的场景建议使用OAuth Token。 建议在互联网环境或者石油内部网络环境中使用。
Key