功能总体介绍
什么是接口平台的服务?
服务不一定指一个微服务,它是一个逻辑划分。
此处服务的概念,可以理解为一个服务由一组具备业务关联的接口组成。
例如:
注册一个华为OCR图像识别服务,该服务下可含有通用表格识别、通用文字识别、身份证识别等一系列接口。
服务注册
服务注册类别分为四类:内部接口服务、外部接口服务、组合接口服务、数据源接口服务注册。
服务类型分为:REST类型、SOAP类型。
- 菜单路径:
接口平台
>接口配置
>服务注册
列表字段:
- 所属租户:服务所属租户。
- 服务代码:服务代码,自行定义,同一租户下唯一,用于标识该服务。
- 服务名称:服务名称,自行定义。
- 服务地址:所有接口地址的公共部分。(服务地址 + 接口地址 = 注册接口访问地址)
- 服务类型:目前仅支持REST风格与SOAP风格两种服务。
- 状态:有启用禁用两种状态。
查询字段:
- 服务名称:服务的名称,支持模糊查询。
- 服务类型:服务的类型,可选REST与SOAP。
- 状态:服务启用与否。
- 所属租户:该服务所属租户。
- 服务代码:服务的代码,支持模糊查询。
点击按钮可根据已有条件筛选出对应信息。
点击按钮可重置查询条件。
操作列
删除:点击按钮,可删除服务。
编辑:点击按钮,可跳转到编辑页面对服务相关属性进行编辑。
接口新建
- 页面入口:
接口平台
>接口配置
>服务注册
>点击编辑
>点击新建
字段介绍:
- 接口编码,自行定义同一服务下唯一。
- 接口地址:访问服务下接口的地址。(服务地址+接口地址 = 完整地址)
- 请求方式:若为REST风格必填,否则执行会提示报错。SOAP风格不填。
- 发布类型:REST、SOAP风格二选一,REST风格接口可发布成SOAP接口,反之亦可。
- 映射类: 对于基于接口平台开发扩展类,它提供了对请求体与响应体装饰的能力。 该类需要继承自BaseTransferDataConverter
- 状态:正常,可使用。失效,接口无法使用。
- 发布地址: 系统自动生成,外部系统通过发布地址调用注册的接口才可以使用接口平台相关功能
接口文档
- 页面入口:
接口平台
>接口配置
>服务注册
>点击编辑接口文档
参数信息:
- 请求头部:请求头部等价于HTTP协议头部,在这里可以指定当前请求使用头部信息。例如:参数Content-Type,默认值 application/json
- GET/URL参数:指GET方式或POST方式URL中,问号后面的参数部分。例如:/{organizationId}/employees?parameter=xxx中的parameter
- 路径参数:接口路径中的参数,例如:/{organizationId}/employees?parameter=xxx中的organizationId。
- BODY参数: 只有使用POST方式的时候,此参数才有效。Body分为application/x-www-form-urlencoded、text/xml、application/json、raw类型。暂时不支持multipart/form-data
- 响应头部: 用户自行定义
- 返回头部: 用户自行定义
注意: 非基本类型可编辑参数候选值,一旦候选值确定。用例便只能从候选值里面取数据。
示例:
- 请求示例:由已填写的参数信息自动带出,不可编辑。
- 成功示例:用户自行定义,可编辑。
- 失败示例:用户自行定义,可编辑。
详细说明:
- 详细说明:用户自行定义,可编辑。
- 请求说明:用户自行定义,可编辑。
- 响应说明:用户自行定义,可编辑。
以上信息可点击预览按钮进行预览。
测试用例
测试用例提供一键生成、一键执行、代码预览等功能。
- 页面入口:
接口平台
>接口配置
>服务注册
>点击编辑接口文档
>点击测试用例
测试用例点击新建会自动生成一个测试用例,其命名根据时间信息组合生成,自动带出接口文档中维护好的参数信息。
注意:测试用例中的body参数信息无法新建,由接口文档中维护的body参数自动带出。
列表字段:
- 用例名称: 系统自动生成,可编辑。
- 用例类型: 测试、健康检查等。
- 说明: 可自行编辑
操作列:
- 编辑: 可编辑上述列表字段,也可编辑相关参数值。
- 执行: 每次执行都会去调用一次注册的接口。
- 查看历史: 可查看执行的情况。
- 代码预览: 可生成调用发布地址的方式。包括java的SDK方式、HTTP方式、CURL方式
- 删除: 点击可删除测试用例
注册新服务示例
首先,假设一个场景,在组织管理
>员工定义
>新建
>保存
时,有一个内部“创建员工”接口,URL : http://hzeronb.saas.hand-china.com/hpfm/v1/{organizationId}/employees?flexModelCode=HPFM.EMPLOYEE&tenantId={organizationId}
该内部接口,
接口地址为:/v1/{organizationId}/employees
服务编码为:hzero-platform.employee.createOrUpdateEmployee
请求头部为:
Content-Type:application/json
请求参数为:
[{“tenantId”:0,“cid”:"",“employeeNum”:“test04151733”,“name”:“test04151733”,“email”:“test04151733@qq.com”,“mobile”:“xxxx”,“gender”:0,“enabledFlag”:1,"_status":“create”}]
Token为:e19b5064-84f4-44cc-ac84-66fc1abd68f9,TOKEN可页面抓取,不定时过期。
post调用示例:
如何注册上述内部接口对应的服务?
1、接口平台
>接口配置
>服务注册
>点击新建
2、填写必输字段,例如:
服务代码:TEST04071550,可自定义,此处命名为示例。
服务名称:demo服务TEST04071550,可自定义,此处命名为示例。
服务类型:REST
服务类别:内部接口
服务地址:hzero-platform,先点击LOV,搜索服务编码:hzero-platform,服务路径对应/hpfm/**
3、点击注册
4、接口配置
>点击新建
,搜索服务编码:hzero-platform.employee.createOrUpdateEmployee,对应接口地址/v1/{organizationId}/employees,即可选择确定
5、到此步,服务注册已经完成。
如何调用平台接口?
可在服务注册详情页,查看到上述服务接口发布地址为:/v1/rest/invoke?namespace=HZERO&serverCode=TEST04071550&interfaceCode=hzero-platform.employee.createOrUpdateEmployee
namespace对应命名空间。
serverCode对应服务代码。
interfaceCode对应接口编码。
通过接口平台生成的平台接口URL为:http://hzeronb.saas.hand-china.com/hitf + 接口发布地址。
调用下面接口:
即可创建员工。
其请求方式必须为:POST。
请求头部为:
Content-Type:application/json
此接口由于是内部接口,TOKEN为HZERO用户对应TOKEN,可在HZERO中通过浏览器抓取。
请求参数为:
{
"pathVariableMap":{
"organizationId": 0
},
"requestParamMap":{
"flexModelCode": "HPFM.EMPLOYEE",
"tenantId":0
},
"payload":"[{\"tenantId\":0,\"cid\":\"\",\"employeeNum\":\"此处自行填写employeeNum\",\"name\":\"此处自行填写name\",\"email\":\"此处自行填写email\",\"mobile\":\"此处自行填写mobile\",\"gender\":0,\"enabledFlag\":1,\"_status\":\"create\"}]"
}
注意,在postman中调用,此处payload中需为String类型,转义字符“\”不可去掉。
此时,我们就通过调用平台接口A:
实际上调用了接口B:
http://hzeronb.saas.hand-china.com/hpfm/v1/0/employees?flexModelCode=HPFM.EMPLOYEE&tenantId=0
实现了接口A和B之间的映射关系。
平台接口调用说明
示例:
原接口:
映射后的平台接口:
在此有人会疑惑,经过接口平台映射出的新接口,原接口中参数organizationId,flexModelCode,tenantId哪去了呢?
实际上,我们在调用新接口时这些参数都会传入。看看下面便会明白。
平台接口请求参数说明:
参数名 | 说明 |
---|---|
headerParamMap | Reqeust Header参数列表 |
pathVariableMap | 对应接口UrlPath变量列表,例如:上述原接口中参数organizationId可放入其中 |
requestParamMap | 对应接口请求查询参数列表,例如:上述原接口中参数flexModelCode,tenantId可放入其中 |
bodyParamMap | 请求body参数列表,针对form_data,url_encoded |
multipartFileMap | Form-Data请求时文件参数 |
payload | 指定payload实体内容,例如 json字符串。可对应上述原接口中请求body |
mediaType | 指定payload解析格式,默认为:application/json;charset=UTF-8 |
平台接口响应参数说明:
参数名 | 说明 |
---|---|
headers | 响应头参数 |
status | 状态 |
message | 响应消息 |
mediaType | 指定payload解析格式,默认为:application/json;charset=UTF-8 |
payload | 业务数据实体内容 |
apiInfo | API信息 |
invokeKey | 调用令牌 |
statusCode | 状态码描述 |
statusCodeValue | 状态码 |
注意,平台接口统一为post请求方式。
请求报文示例:
POST /hitf/v1/rest/invoke?namespace=HZERO&serverCode=TEST04151433&interfaceCode=hzero-platform.employee.createOrUpdateEmployee HTTP/1.1
Host: hzeronb.saas.hand-china.com
Authorization: Bearer be7b7686-2667-445c-81f9-98b815687b2b
Content-Type: application/json
Body:
{
"pathVariableMap":{
"organizationId": 0
},
"requestParamMap":{
"flexModelCode": "HPFM.EMPLOYEE",
"tenantId":0
},
"payload": "[{\"tenantId\":0,\"cid\":\"\",\"employeeNum\":\"test04151659\",\"name\":\"test04151659\",\"email\":\"test04151659@qq.com\",\"mobile\":\"15207101111\",\"gender\":0,\"enabledFlag\":1,\"_status\":\"create\"}]"
}
响应报文示例:
{
"headers": {},
"body": null,
"status": "200",
"message": "OK",
"mediaType": null,
"payload": "{\"failed\":true,\"code\":\"error.code_repeat\",\"message\":\"编码重复\",\"type\":\"error\",\"exception\":\"error.code_repeat\"}",
"apiInfo": null,
"targetResponseHeaders": {
"date": "Tue, 28 Apr 2020 09:56:01 GMT",
"expires": "0",
"transfer-encoding": "chunked",
"x-content-type-options": "nosniff",
"x-xss-protection": "1; mode=block",
"x-frame-options": "DENY",
"connection": "keep-alive",
"content-type": "application/json;charset=UTF-8",
"cache-control": "no-cache, no-store, max-age=0, must-revalidate",
"pragma": "no-cache"
},
"invokeKey": "c57a3b7b-ea44-4adf-a735-0738db593fb7",
"statusCode": "OK",
"statusCodeValue": 200
}