阿里云首页 AIoT数字园区引擎

服务模型开发

本章重点介绍服务模型的开发手册。

1.服务依赖方

服务依赖方:即使用该服务的应用。

下面讲述服务依赖方,调用服务的接口。

1.1 接口描述

API版本

服务模型版本号(一般为1.0)

授权类型

APPSIGN

协议

HTTPS

请求方法

Post

域名(环境变量中获取)

System.getenv(“iot.hosting.mesh.domain”)

路径

/模型名称/接口名称/MeterService/ChargeMete

1.2入参说明

入参名称

数据类型

是否必须

入参示例

入参描述

ApiVer

字符串

1.0

服务模型api版本

Version

字符串

1.0

服务模型接口版本

body

复杂对象

request.putParam(key, value);

接口请求字段

1.3 出参列表

出参名称

数据类型

出参描述

code

整形

响应码, 200: 成功

message

字符串

错误消息

localizedMsg

字符串

本地语言错误消息

data

长整型

响应结果 返回的长整型数据是增加的数据的id

1.4 请求示例

 /**
    * 系统环境变量中获取的
    */
   
public
static
final
StringappKey=System.getenv("iot.hosting.appKey");
   
public
static
final
StringAppSecret=System.getenv("iot.hosting.appSecret");
   //服务模型请求的路由
   
private
static
final
StringSERVICE_EDGE__PATH=System.getenv("iot.hosting.mesh.domain");
public
static
void
main(String[]args)
throws
UnsupportedEncodingException{
   IoTApiClientBuilderParamsioTApiClientBuilderParams=
     
new
IoTApiClientBuilderParams();
 ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
   ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
   SyncApiClientsyncClient=
new
SyncApiClient(ioTApiClientBuilderParams);


   IoTApiRequestrequest=
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

ApiResponseresponse=syncClient.postBody(SERVICE_EDGE__PATH,
     "/服务名称/接口名称",request,
true
);
   System.
out
.println("response code = "+response.getCode()
     +" response = "+
new
String(response.getBody(),"UTF-8"));
}

1.5 返回结果示例 JSON

{ 
   "id":"3826f64d-6c7b-4d21-8214-8b23771b763a"
   "code":200,
   "localizedMsg":
null
,
   "message":
null
,
   "data":791
}

1.6 失败返回结果示例 JSON

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

2.服务提供方

服务提供方:提供服务的应用

下面讲述如何提供服务的接口。

2.1 接口描述

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

2.2 请求示例

/**
* 服务模型测试,服务提供方开发参考
*/
@RestController
@PostMapping(value="/queryBodyService",method={RequestMethod.POST,RequestMethod.GET})//一般第一层为服务名称
public
class
ServiceProvideController{
   @RequestMapping("/queryBloodPressure")
   
public
DTO test(HttpServletRequestrequest)
throws
Exception{


       Map<String,String>map=
new
HashMap<String,String>();
       EnumerationheaderNames=request.getHeaderNames();
       
while
(headerNames.hasMoreElements()){
           Stringkey=(String)headerNames.nextElement();
           Stringvalue=request.getHeader(key);
           map.put(key,value);
           Stringsign=map.
get
("x-ca-signature");
           System.
out
.println(sign);


       }
       Stringjson="";
       StringsignHeaders=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(InputStreaminStream)
throws
Exception{
       ByteArrayOutputStreamoutSteam=
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();
   }
}