全部产品
云市场
云游戏

边缘应用服务总线对接

更新时间:2020-03-19 14:46:25

1. 整体介绍

服务依赖方:(即使用该服务的应用)能够清晰而简洁的表达他所依赖的接口有哪些,分别期望这些接口完成什么样的具体功能,并且任何为其提供服务的应用,只要遵循相同的服务模型,即可实现服务提供方的替换。
服务提供方:通过服务标准化,能够清晰而简洁的表达本服务提供了哪些接口、定义、以及他们所应实现的具体功能,并且任何对该服务所提供的能力有依赖的应用,都必须按照这套接口来实现服务供应;

2.服务依赖方

1.接口描述

API版本 服务模型版本号(一般为1.0)
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) System.getenv(“iot.hosting.mesh.domain”)
路径 /模型名称/接口名称
/MeterService/ChargeMete

2.入参说明

入参名称 数据类型 是否必须 入参示例 入参描述
ApiVer 字符串 1.0 服务模型api版本
Version 字符串 1.0 服务模型接口版本
body 复杂对象 request.putParam(key, value); 接口请求字段

3.出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

4.请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appKey = System.getenv("iot.hosting.appKey");
  5. public static final String AppSecret = System.getenv("iot.hosting.appSecret");
  6. //服务模型请求的路由
  7. private static final String SERVICE_EDGE__PATH = System.getenv("iot.hosting.mesh.domain");
  8. public static void main(String[] args) throws UnsupportedEncodingException {
  9. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  10. new IoTApiClientBuilderParams();
  11. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  12. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  13. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  14. IoTApiRequest request = new IoTApiRequest();
  15. //设置api的版本
  16. request.setApiVer("1.0");
  17. request.putParam("requestId", "213123");
  18. request.putParam("meterNo", "213123");
  19. request.putParam("amount", "213123");
  20. request.putParam("sourceAppId", "213123");
  21. request.putParam("targetAppId", "213123");
  22. //请求参数版本,域名、path、request
  23. request.setVersion("1.0");
  24. //请求参数域名、path、request
  25. ApiResponse response = syncClient.postBody(SERVICE_EDGE__PATH,
  26. "/服务名称/接口名称", request, true);
  27. System.out.println( "response code = " + response.getCode()
  28. + " response = " + new String(response.getBody(), "UTF-8"));
  29. }

5.返回结果示例 JSON

  1. {
  2. "id": "3826f64d-6c7b-4d21-8214-8b23771b763a"
  3. "code": 200,
  4. "localizedMsg": null,
  5. "message": null,
  6. "data": 791
  7. }

6.失败返回结果示例 JSON

  1. {
  2. "id": "f561d973-9094-479f-81fd-95ec3e7271f5",
  3. "code": 52009,
  4. "localizedMsg": "传入的参数和模型字段不匹配:name1",
  5. "message": "传入的参数和模型字段不匹配:name1",
  6. "data": null
  7. }

3.服务提供方

1.接口描述

正常编码方式,提供对应服务模型接口的调用的响应结果。

2.请求示例

  1. /**
  2. * 服务模型测试,服务提供方开发参考
  3. */
  4. @RestController
  5. @PostMapping(value = "/queryBodyService", method = {RequestMethod.POST, RequestMethod.GET})//一般第一层为服务名称
  6. public class ServiceProvideController {
  7. @RequestMapping("/queryBloodPressure")
  8. public DTO test(HttpServletRequest request) throws Exception {
  9. Map<String, String> map = new HashMap<String, String>();
  10. Enumeration headerNames = request.getHeaderNames();
  11. while (headerNames.hasMoreElements()) {
  12. String key = (String) headerNames.nextElement();
  13. String value = request.getHeader(key);
  14. map.put(key, value);
  15. String sign = map.get("x-ca-signature");
  16. System.out.println(sign);
  17. }
  18. String json = "";
  19. String signHeaders = request.getHeader("HEADER_SM_ROUTER_DESTINATION");
  20. System.out.println(signHeaders);
  21. //iot传递请求参数需要用流的方式读取,@request的方式是获取不到参数的
  22. json = new String(readInputStream(request.getInputStream()), "UTF-8");
  23. System.out.println(json);
  24. System.out.println("++++调用成功+++");
  25. DTO dto = new DTO();
  26. dto.setCode(200);
  27. dto.setMessage("success");
  28. dto.setLocalizedMsg("OK");
  29. JSONObject object = new JSONObject();
  30. object.put("abc", "123123");
  31. dto.setData(object);
  32. return dto;
  33. }
  34. public static byte[] readInputStream(InputStream inStream) throws Exception {
  35. ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
  36. byte[] buffer = new byte[1024];
  37. boolean var3 = false;
  38. int len;
  39. while ((len = inStream.read(buffer)) != -1) {
  40. outSteam.write(buffer, 0, len);
  41. }
  42. outSteam.close();
  43. inStream.close();
  44. return outSteam.toByteArray();
  45. }
  46. }