邊緣應用服務總線對接
更新時間:
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();
}
}
文檔內容是否對您有幫助?