新建微服务接口定义规范

-
2025-06-24

1. 概述

1.1. 编写目的

本规范旨在规范集团项目微服务接口定义的一致性,确保集团项目研发风格统一,为项目微服务接口设计提供参考指导,同时也为集团数字化设计中心全方位、全流程、全要素开展集团项目精益化技术管控提供依据。

1.2. 适用范围

本规范作为微服务接口设计的参考规范,各项目可根据场景需要在本参考规范基础上进行调整及扩展,形成各项目私有接口定义规范。

本规范不适用于应用系统对外暴露的集成服务接口。

1.3. 设计约束

微服务接口采用RESTful形式。

微服务接口采用Unicode字符集,UTF-8编码方式。

微服务接口请求、响应消息体数据均为JSON格式,文件上传/下载接口为二进制格式。

微服务接口推荐使用Swagger进行展示和说明。

微服务接口方法推荐采用GET或POST请求方式。

微服务接口设计需要考虑网络超时、重复调用等情况下的业务一致性,接口设计须考虑幂等。

同一应用内相同业务对应的参数定义应保持一致。

2. 接口设计规范

2.1. 接口访问场景

如上图所示,微服务架构下的接口访问场景主要分A(前端接入网关接口)、B(微服务接口)两类,由微服务网关负责两类报文之间的协议转换。

接口访问场景分类描述
A类:微服务网关接口微服务网关暴露给前端微应用的接口
B类:微服务接口各微服务模块提供的服务能力接口

2.2. 访问地址约定

https://<IP>:<port>/<domain>/[route_prefix]/<module>/<method>

接口名称

域标识:可选,构建项目子域的英文名称或简称, 原则上不超过10个字母。

路由前缀:根据项目规范自行约定,通过路由前缀路由到具体微服务,可定义多级,例:采用项目缩写标识+英文名词命名,如人资系统:hr-system/,hr-audit/oper

模块名称:

模块名称使用“名词”命名,名称采用小写英文,多个单词间用中横线“-”分隔,禁止使用汉语拼音。

模块命名支持最多两级目录,均采用名词命名方式,例如:dept/user。

命名参考:机构管理(org)、部门管理(dept)、用户管理(user)、审计日志(audit-log)、业务日志(biz-log)。

接口名称:接口名称使用具有业务含义的“英文动词”方式,全部字母小写,多个单词采用中横线“-”方式分隔,禁止使用汉语拼音。

常用命名参考:

中文名英文命名中文名英文命名
新增add    获取详细view
更新update获取主从view-with-xxxx
删除  delete 获取全貌view-whole
撤销 invalid分页查询query
恢复recover全部查询query-all
冻结freeze支付pay
解冻unfreeze稽核audit
提交commit冲销reverse
复核check回复reply
审核audit  

版本号:URL路径中版本号v1版本默认省略,后续版本针对实际场景可在微服务、模块、接口层级分别定义。如下为在微服务、模块、接口层级定义的版本号示例(针对大版本变更):

服务级:

https://[IP:port]/{domain}/xxxx-xxxx/v2/module/method

模块级:

https://[IP:port]/{domain}/xxxx-xxxx/module/v2/method

接口级:

https://[IP:port]/{domain}/xxxx-xxxx/module/method/v2

2.3. 微服务网关接口规范(A类接口)

微服务网关接口(A类接口),即前端应用层访问微服务网关的接口,推荐采用上图所示的消息结构。

请求报文头:在请求的消息头中定义Client-Header、 token、User-Agent、sign属性,其中Client-Header中定义timestamp、version属性;

响应报文头:在响应的消息头中定义Client-Header、sign属性,Client-Header中定义requestID属性。

防篡改:建议微服务网关通过对sign摘要规则进行验证,确认请求报文是否被篡改。

防重放:建议微服务网关通过共享缓存(超时自动清理),对请求报文中的sign作为请求报文唯一标识进行防重放控制,建议检查服务器时间与请求报文时间戳的时间间隔是否在有效期内,以有效保护后台微服务不被恶意拦截重放。

安全加密:等保三级及以上业务领域,请求及响应报文的消息体建议采用国密加密传输,通信协议建议采用HTTPS加密通道。等保二级应针对敏感数据进行报文加密,根据项目安全要求选择HTTP或HTTPS通讯协议。

2.3.1. 请求报文规范

请求报文消息头信息:

属性 属性名称类型格式及说明必填示例
Client-Header用户信息请求头JSON用户信息请求头信息,为JSON字符串,由调用方填写{"timestamp":"1626768677928","version":"1.3"}
tokentokenString用户token,由用户登录成功后取得f05bf9a2-41fd-4331-bbfc-6b8363503305
User-Agent用户代理String移动应用请求时需确保将此属性添加到请求头中Mozilla/5.0(Windows NT 10.0; Win64;x64)AppleWebKit/537.36(KHTML,like Gecko) Chrome/90.0.4430.212Safari/537.36
sign签名信息String(token+timestamp+消息体)SM3摘要,用于防篡改及防重放7d3ebd79ea3fbcfbe9efe58919d4d0bb

其中Client-Header中消息结构如下表所示:

属性 属性名称类型格式及说明必填示例
timestamp请求时间戳Long 由调用方生成的时间戳,用于服务器的时间差异检查1626768677928
version接口版本号String采用两级结构“xx.yy”方式,大版本应同时体现在URL中,作为两个独立的借口接口服务,小版本则为微服务同一接口服务内部对差异化处理的标识版本1.3

请求报文示例:

请求消息原始报文示例:

2.3.2. 响应报文规范

响应报文消息头信息:

属性 属性名称类型格式及说明必填示例
Client-Header用户信息响应头JSON用户信息响应头信息,为JSON字符串,由微服务网关填写 {"requestID":"2638416938574123698"}
sign签名信息JSON按需实现,(返回消息体)SM3摘要,用于前端对响应报文完整性校验

a3cc94d496a543d9f6c318019df9df1fb141

a732f9c7d7122f79bc46757e6699

其中Client-Header中消息结构如下表所示:

属性 属性名称类型格式及说明必填示例
requestID 请求流水号Long返回由网关补充的请求流水号,用于前端对返回结果进行追踪2638416938574123698

响应报文消息体:

属性 属性名称类型格式及说明必填示例
success成功标志Boolean请求成功失败标志true
code响应状态码Integer业务服务响应状态码200
message描述信息String业务服务响应状态描述信息成功
data业务数据JSON接口返回的业务数据 

   响应报文示例:

2.3.3. 微服务网关接口加解密

如需加密场景,各项目请自行按照国网加密要求进行报文加密处理。

2.4. 微服务接口规范(B类接口)

2.4.1. 请求响应数据规范

微服务接口(B类接口),即微服务暴露在微服务网关上的接口,推荐采用上图所示的消息结构,项目组也可根据需要自行扩展。

网关路由:微服务接口在生产环境中,微应用须通过微服务网关访问后台微服务,外部系统须通过接口接入网关访问后台微服务,严禁微服务接口对微应用或外部第三方系统直接暴露。

请求报文头:微服务接口访问场景,即各微服务业务模块提供给的接口,设计时建议采用上图中所示报文结构,在HTTP请求头信息带有来自网关的Client-Header属性,微服务网关在对token鉴权后,会将获取的机构ID[orgID]及用户ID[userID]等信息加入Client-Header,然后转发请求至后续业务服务,以便业务服务快速获取当前服务调用方的用户基础信息,机构名称和用户名称则建议通过共享缓存另行获取。在B类接口访问场景下,请求/响应数据均为明文传输。

异步场景:高并发场景,在满足业务需求的前提下,推荐采用异步请求方式提供接口服务。

2.4.2. 请求报文规范

微服务请求报文消息头信息:

属性名称类型格式及说明必填示例
用户信息请求头JSON用户信息请求头信息,为JSON字符串,由网关填写"requestID":"2638416938574123698",
"requestTime":"1626768677928",
"terminalType":"10",
"clientIP":"11.12.3.45",
"orgID":"111000",
"userID":"5bb6e538ce76",
"version":"1.3"

其中Client-Header中数据结构如下表所示:

属性 属性名称类型格式及说明必填示例
requestID请求流水号Long由网关生成并自动填补是 2638416938574123698
requestTime请求时间戳Long由网关生成并自动填补1626768677928
terminalType终端类型String由网关根据前端应用传递的User-Agent字段生成是 10
clientIP客户端IPString客户端IP地址,由网关获取并填写11.12.3.45
orgID机构IDString当前用户机构编码,采用人资机构编码111000
userID 用户IDString当前用户在系统内的唯一标识ID5bb6e538ce76
version接口版本号String采用两级结构“xx.yy”方式,用于在接口代码中根据不同的接口小版本号做不同的业务处理 1.3

微服务请求报文示例:

请求报文消息示例:

2.4.3. 响应报文规范

微服务响应报文消息体(响应报文未定义报文头):

属性 属性名称类型格式及说明必填示例
success成功标志Boolean请求成功失败标志true
code响应状态码Integer业务服务响应状态码200
message描述信息String业务服务响应状态描述信息成功
data业务数据JSON接口返回的业务数据 

微服务响应报文示例:

2.4.4. 微服务接口定义建议

单一职责:微服务接口尽量站在业务角度规划,不同的业务采用不同的接口进行定义,例如冻结、解冻为两个业务操作,不要定义为一个更新状态的服务,应该按照业务需求定义为两个独立的业务服务能力。

接口通用:应考虑多渠道接口调用场景,尽量提供全面数据信息,查询接口应尽量支持不同查询条件与排序条件,以减少不必要的接口数量。

支持分页:原则上查询接口在返回列表数据时,应支持分页能力,查询全部数据时应提供最大数据保护。

附录:编码定义参考

附录1:状态码(code)

状态码编码参考如下,项目可根据需要自行扩展。

HTTP状态码    body状态码    状态码类型    描述

200    200    通用状态码    操作成功

400    1004    微服务异常    空参数异常

500    500    微服务异常    微服务系统异常

400    2001    网关权限异常    Token为空

400    2002    网关权限异常    Token验证异常

401    401    网关权限异常    暂未登录或token已经过期

403    403    网关权限异常    非法访问

401    4002    网关权限异常    登录失败

500    2005    网关权限异常    注销失败

400    2201    网关安全异常    签名为空

400    2202    网关安全异常    签名校验失败

500    2203    网关安全异常    加密异常

500    2204    网关安全异常    解密异常

400    2205    网关安全异常    包含非法字符

400    2206    网关安全异常    重放攻击

400    2207    网关安全异常    跨站请求伪造攻击

附录2:终端类型(terminalType)

终端类型    终端名称    描述

11    Web端    来自Web端的调用请求

12    移动端    来自移动端的调用请求

13    第三方接口    来自外部应用的调用请求

14    批处理调用    来自日终批量处理的调用请求
 


目录