边缘应用服务总线对接
更新时间:
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.请求示例
    /**
     * 系统环境变量中获取的
     */
    public static final String appKey = System.getenv("iot.hosting.appKey");
    public static final String AppSecret = System.getenv("iot.hosting.appSecret");
    //服务模型请求的路由
    private static final String SERVICE_EDGE__PATH = System.getenv("iot.hosting.mesh.domain");
public static void main(String[] args) throws UnsupportedEncodingException {
    IoTApiClientBuilderParams ioTApiClientBuilderParams =
      new IoTApiClientBuilderParams();
    ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
    ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
    SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
    IoTApiRequest request = new IoTApiRequest();
    //设置api的版本
        request.setApiVer("1.0");
        request.putParam("requestId", "213123");
        request.putParam("meterNo", "213123");
        request.putParam("amount", "213123");
        request.putParam("sourceAppId", "213123");
        request.putParam("targetAppId", "213123");
        //请求参数版本,域名、path、request
        request.setVersion("1.0");
    //请求参数域名、path、request
    ApiResponse response = syncClient.postBody(SERVICE_EDGE__PATH,
      "/服务名称/接口名称", request, true);
    System.out.println( "response code = " + response.getCode()
      + " response = " + new String(response.getBody(), "UTF-8"));
}5.返回结果示例 JSON
{   
    "id": "3826f64d-6c7b-4d21-8214-8b23771b763a"
    "code": 200,
    "localizedMsg": null,
    "message": null,
    "data": 791
}6.失败返回结果示例 JSON
{
    "id": "f561d973-9094-479f-81fd-95ec3e7271f5",
    "code": 52009,
    "localizedMsg": "传入的参数和模型字段不匹配:name1",
    "message": "传入的参数和模型字段不匹配:name1",
    "data": null
}3.服务提供方
1.接口描述
正常编码方式,提供对应服务模型接口的调用的响应结果。
2.请求示例
/**
 * 服务模型测试,服务提供方开发参考
 */
@RestController
@PostMapping(value = "/queryBodyService", method = {RequestMethod.POST, RequestMethod.GET})//一般第一层为服务名称
public class ServiceProvideController {
    @RequestMapping("/queryBloodPressure")
    public DTO test(HttpServletRequest request) throws Exception {
        Map<String, String> map = new HashMap<String, String>();
        Enumeration headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String key = (String) headerNames.nextElement();
            String value = request.getHeader(key);
            map.put(key, value);
            String sign = map.get("x-ca-signature");
            System.out.println(sign);
        }
        String json = "";
        String signHeaders = request.getHeader("HEADER_SM_ROUTER_DESTINATION");
        System.out.println(signHeaders);
        //iot传递请求参数需要用流的方式读取,@request的方式是获取不到参数的
        json = new String(readInputStream(request.getInputStream()), "UTF-8");
        System.out.println(json);
        System.out.println("++++调用成功+++");
        DTO dto = new DTO();
        dto.setCode(200);
        dto.setMessage("success");
        dto.setLocalizedMsg("OK");
        JSONObject object = new JSONObject();
        object.put("abc", "123123");
        dto.setData(object);
        return dto;
    }
    public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        boolean var3 = false;
        int len;
        while ((len = inStream.read(buffer)) != -1) {
            outSteam.write(buffer, 0, len);
        }
        outSteam.close();
        inStream.close();
        return outSteam.toByteArray();
    }
}该文章对您有帮助吗?