開(kāi)發(fā)手冊(cè)
開(kāi)發(fā) - 數(shù)據(jù)操作
應(yīng)用之間共享數(shù)據(jù)時(shí),需要向提平臺(tái)操作數(shù)據(jù),或者從平臺(tái)訂閱數(shù)據(jù)。數(shù)據(jù)操作方面,這里主要涉及4個(gè)接口:新增數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)、修改數(shù)據(jù)。詳見(jiàn)后面的API參考。同時(shí),為了便于應(yīng)用開(kāi)發(fā),平臺(tái)提供了SDK,簡(jiǎn)化開(kāi)發(fā)。
SDK介紹
一. Java SDK
1. 依賴
<dependency> <groupId>com.aliyun.api.gateway</groupId> <artifactId>sdk-core-java</artifactId> <version>1.0.4</version></dependency>
2. 示例代碼
SyncApiClientsyncClient=SyncApiClient.newBuilder().appKey("1234567").appSecret("6726732dsfdsdsfdsfds").build();IoTApiRequestrequest=newIoTApiRequest();//設(shè)置api的版本request.setApiVer("0.1.0");// 接口參數(shù)request.putParam("json","{}");request.putParam("productKey","a1ILGykZVhP");request.putParam("deviceName","Dxb3lv1E78mg5dsVLUQW");request.putParam("serviceName","kkp");//請(qǐng)求參數(shù)域名、path、requestApiResponseresponse=syncClient.postBody("test123-cn-shanghai.alicloudapi.com","/invokeThingService",request);System.out.println("response code = "+response.getStatusCode()+" response content = "+newString(response.getBody(),"utf-8"));
二. Python SDK
1. 依賴:無(wú)
2. 示例代碼 Step 1:下載示例工程代碼。示例工程在基于Python 2.7,Python3請(qǐng)自行適配。
Step 2:修改signature_composer.py文件第49行
修改前:string_to_sign.append(_build_resource(uri=uri,body=body))修改后:string_to_sign.append(uri)
Step 3: 修改ClientDemo.py如下,執(zhí)行調(diào)用
#!/usr/bin/env python# -*- coding: utf-8 -*-importosimportsysimportjsonsys_path=sys.path[0]ifnotos.path.isdir(sys_path):sys_path=os.path.dirname(sys_path)os.chdir(sys_path)fromcom.aliyun.api.gateway.sdkimportclientfromcom.aliyun.api.gateway.sdk.httpimportrequestfromcom.aliyun.api.gateway.sdk.commonimportconstanthost="https://api.link.aliyun.com"url="/data/model/data/query"cli=client.DefaultClient(app_key="1234567",app_secret="abcdefghijklmnopq")req_post=request.Request(host=host,protocol=constant.HTTPS,url=url,method="POST",time_out=30000)req_post.set_content_type(constant.CONTENT_TYPE_STREAM)body={ "request": "apiVer":"0.0.2 "params":{ "modelId":"EMPLOYEE", "returnFields":["employee_no","name"], "conditions":[{"fieldName":"id","value":"1","operate":"mt"}], "pageSize":100, "pageNum":1 }, "version":"1.0"}bb=json.dumps(body).encode("utf-8")req_post.set_body(bb)print'==================================================='printstr(cli.execute(req_post)).decode('string_escape')print'==================================================='
三. JS SDK
1. 依賴
$# save into package.json dependencies with -S$ npm install aliyun-api-gateway-S$# you can use cnpm for fast install$ cnpm install aliyun-api-gateway-S
2. 示例代碼
'use strict';constco=require('co');constClient=require('aliyun-api-gateway').Client;constclient=newClient('YOUR_APP_KEY','YOUR_APP_SECRET');co(function*(){ varurl='http://apiqingdaohttps.foundai.com/test1234'; varresult=yield client.post(url,{ data:{ 'testtest':'query1Value' }, headers:{ accept:'application/json' } }); console.log(JSON.stringify(result));});
數(shù)據(jù)操作API
一. API 描述
API名稱 | 描述 | Path | 版本 |
新增數(shù)據(jù) | 基于已經(jīng)創(chuàng)建且被授權(quán)寫入的模型,進(jìn)行數(shù)據(jù)的新增。 | /data/model/data/insert | 0.0.3 |
刪除數(shù)據(jù) | 基于已經(jīng)創(chuàng)建且被授權(quán)刪除的模型,進(jìn)行數(shù)據(jù)的更新。 | /data/model/data/delete | 0.0.2 |
修改數(shù)據(jù) | 基于已經(jīng)創(chuàng)建且被授權(quán)更新的模型,進(jìn)行數(shù)據(jù)的更新。 | /data/model/data/update | 0.0.2 |
查詢數(shù)據(jù) | 基于已經(jīng)創(chuàng)建且被授權(quán)查詢的模型,進(jìn)行數(shù)據(jù)的查詢。 | /data/model/data/query | 0.0.3 |
獲取文件上傳地址 | 對(duì)于模型中指定為“圖片”標(biāo)簽的字段,在該字段需要填寫文件名,并且文件名需要通過(guò)該接口獲取,該接口同時(shí)還會(huì)返回一個(gè)URL供用戶上傳文件。該地址有效期是10秒。 | /data/model/data/upload | 0.0.1 |
獲取文件下載地址 | 對(duì)于模型中指定為“圖片”標(biāo)簽的字段,在該字段的內(nèi)容是一個(gè)系統(tǒng)分配的文件名,用戶可以通過(guò)本接口,傳入這個(gè)文件名,獲取真實(shí)的文件下載地址。該地址有效期是10秒。 | /data/model/data/download | 0.0.1 |
二. API 約定
日期類型的參數(shù)傳入格式:當(dāng)前時(shí)間到格林威治時(shí)間1970年01月01日00時(shí)00分00秒的毫秒數(shù)。
數(shù)量查詢的一些約定:
單次查詢最多返回200條數(shù)據(jù),未指定分頁(yè)參數(shù)情況下,查詢返回滿足條件的前200條,可根據(jù)返回參數(shù)中的hasNext判斷是否有更多數(shù)據(jù)。
若需要按照指定條件返回?cái)?shù)據(jù)總數(shù),則指定返回參數(shù)為COUNT,API返回參數(shù)中會(huì)帶有COUNT以及對(duì)應(yīng)的值。
若需要按照指定條件,及按照字段分組進(jìn)行數(shù)量查詢,則指定返回參數(shù)為COUNT(分組字段1,分組字段2),API返回參數(shù)中會(huì)帶有COUNT以及對(duì)應(yīng)的值。
更新刪除的約定:?jiǎn)未尾僮?,最多支?00條數(shù)據(jù)。
運(yùn)算符定義:
算符 | 含義 | 備注 |
eq | equals | 相等 |
neq | not equals | 不相等 |
lt | less than | 小于 |
lteq | less than or equals | 小于等于 |
mt | more than | 大于 |
mteq | more than or equals | 大于等于 |
bt | between | 在..之間 |
in | in | 在..之內(nèi) |
nin | not in | 不在..之內(nèi) |
nul | is null | 為空 |
nnul | is not null | 不為空 |
數(shù)據(jù)包括系統(tǒng)屬性,API中不允許賦值和更新系統(tǒng)屬性,系統(tǒng)屬性如下:
屬性 | 描述 |
id | 數(shù)據(jù)主鍵 |
creator | 數(shù)據(jù)創(chuàng)建者 |
modifier | 數(shù)據(jù)修改者 |
gmt_create | 數(shù)據(jù)創(chuàng)建時(shí)間 |
gmt_modified | 數(shù)據(jù)修改時(shí)間 |
三. 數(shù)據(jù)新增API
1. 請(qǐng)求參數(shù):
參數(shù) | 類型 | 描述 | 是否必傳 |
modelId | String | 數(shù)據(jù)模型id | 是 |
properties | JSON | 數(shù)據(jù)字段鍵值對(duì),增加的字段的鍵只能是模型包含的字段,否則會(huì)報(bào)錯(cuò),其中 Boolean屬性的property傳入”true”和”false”或者0和1。如:{“name”:”xxx”,”age”:18} | 是 |
scopeId | String | 經(jīng)常是項(xiàng)目的id,該參數(shù)非必填,一般上架應(yīng)用被授權(quán)之后,會(huì)被默認(rèn)綁定到一個(gè)scope中,因此當(dāng)前操作會(huì)被默認(rèn)操作到被綁定到的這一個(gè)scope中。但是,對(duì)于集成應(yīng)用,也有可能被綁定到多個(gè)scope中,此時(shí)該操作需要填入scopeId。 | 否 |
appId | String | 對(duì)于SaaS應(yīng)用,需要填該值 | 否 |
2. 返回參數(shù)
參數(shù) | 類型 | 描述 |
data | Long | 數(shù)據(jù)主鍵id |
3. 請(qǐng)求示例
{ "request":{ "apiVer":"0.0.3"http://api版本號(hào) }, "id":1508212818676,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123",//數(shù)據(jù)模型id "scopeId":"fdbsdj1dfjdubgxxx",//數(shù)據(jù)模型id "properties":{ "BRAND":"BMW", "MODE":"5", "CREATE_DATE":1526969423, "LONG_SIZE":3.3, "LONG_SIZE":2.2 } }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
4. 返回示例
{ "code":200, "message":"success", "localizedMsg":null, "data":12345}
5. 返回碼
狀態(tài)碼 | 描述 | 其他說(shuō)明 |
200 | 成功 | |
460 | 參數(shù)驗(yàn)證異常 | 會(huì)帶有驗(yàn)證異常的詳細(xì)說(shuō)明 |
500 | 服務(wù)異常 | server error |
52002 | 無(wú)訪問(wèn)權(quán)限 | |
52005 | 找不到目標(biāo)存儲(chǔ) | |
52009 | 參數(shù)和模型定義不匹配 | |
52011 | 數(shù)據(jù)類型校驗(yàn)錯(cuò)誤 |
四. 數(shù)據(jù)刪除API
1. 請(qǐng)求參數(shù)
參數(shù) | 類型 | 是否必傳 | 描述 |
modelId | String | 是 | 數(shù)據(jù)模型id |
conditions | JSON | 否 | 數(shù)據(jù)條件,由字段名、運(yùn)算符、比較值組成一個(gè)condition。如:[{“fieldName”: “id”,”operate”: “eq”,”value”: 7}] |
appId | String | 否 | 對(duì)于SaaS應(yīng)用,需要填該值 |
scopeId | String | 否 | 經(jīng)常是項(xiàng)目的id,該參數(shù)非必填,一般上架應(yīng)用被授權(quán)之后,會(huì)被默認(rèn)綁定到一個(gè)scope中,因此當(dāng)前操作會(huì)被默認(rèn)操作到被綁定到的這一個(gè)scope中。但是,對(duì)于集成應(yīng)用,也有可能被綁定到多個(gè)scope中,此時(shí)該操作需要填入scopeId。 |
其中condition針對(duì)不同類型的屬性支持的運(yùn)算符:
屬性 | 支持的運(yùn)算符 |
Integer | eq,neq,lt,lteq,mt,mteq,bt,in,nin,nnull |
String | eq,neq,,nnul,in,nin |
Double | eq,neq,lt,lteq,mt,mteq,bt,in,nin,nnull |
Boolean | eq,nnul |
Date | eq,neq,lt,lteq,mt,mteq,bt,nnul |
2. 返回參數(shù)
參數(shù) | 類型 | 描述 |
data | Integer | 刪除數(shù)據(jù)的條數(shù) |
3. 請(qǐng)求示例
{"request":{"apiVer":"0.1.0"http://api版本號(hào)},"id":1508212818676,//request里的全局唯一id透?jìng)?params":{"modelId":"XXX123","conditions":[{"fieldName":"BRAND","value":"BMW","operate":"eq"},{"fieldName":"MODE","value":"X5","operate":"eq"}]},"version":"1.0"http://請(qǐng)求協(xié)議版本}
4. 返回示例
{"code":200,"message":"success","localizedMsg":null,"data":100}
5. 返回碼
狀態(tài)碼 | 描述 | 說(shuō)明 |
200 | 成功 | |
460 | 參數(shù)驗(yàn)證異常 | 會(huì)帶有驗(yàn)證異常的詳細(xì)說(shuō)明 |
500 | 服務(wù)異常 | server error |
52002 | 無(wú)訪問(wèn)權(quán)限 |
五. 數(shù)據(jù)修改API
1. 請(qǐng)求參數(shù)
參數(shù) | 類型 | 是否必傳 | 描述 |
modelId | String | 是 | 數(shù)據(jù)模型id |
updateDetails | JSON | 是 | 更新的具體字段和值,字段需要是模型中包含的字段,否則會(huì)報(bào)錯(cuò),其中 Boolean屬性的property傳入”true”和”false”或者0和1。如:{“name”:”xxxx”,”age”:20} |
conditions | JSON | 否 | 條件,由字段名、運(yùn)算符、比較值組成一個(gè)condition,格式如下:[{“fieldName”: “id”,”operate”: “eq”,”value”: 7}]fieldName表示 字段的名稱operate表示操作符,操作符見(jiàn)上表value表示值 |
appId | String | 否 | 對(duì)于SaaS應(yīng)用,需要填該值 |
scopeId | String | 否 | 經(jīng)常是項(xiàng)目的id,該參數(shù)非必填,一般上架應(yīng)用被授權(quán)之后,會(huì)被默認(rèn)綁定到一個(gè)scope中,因此當(dāng)前操作會(huì)被默認(rèn)操作到被綁定到的這一個(gè)scope中。但是,對(duì)于集成應(yīng)用,也有可能被綁定到多個(gè)scope中,此時(shí)該操作需要填入scopeId。 |
其中condition針對(duì)不同類型的屬性支持的運(yùn)算符:
屬性 | 支持的運(yùn)算符 | |
Integer | eq,neq,lt,lteq,mt,mteq,bt,in,nin,nnull | |
String | eq,neq,,nnul,in,nin | |
Double | eq,neq,lt,lteq,mt,mteq,bt,in,nin,nnull | |
Boolean | eq,nnul | |
Date | eq,neq,lt,lteq,mt,mteq,bt,nnul |
2. 返回參數(shù)
參數(shù) | 類型 | 描述 |
data | Integer | 更新數(shù)據(jù)的條數(shù) |
3. 請(qǐng)求示例
{ "request":{ "apiVer":"0.0.3"http://api版本號(hào) }, "id":1508212818676,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123", "conditions":[ {"fieldName":"BRAND","value":"BMW","operate":"eq"}, {"fieldName":"MODE","value":"X5","operate":"eq"} ], "updateDetails":{ "LONG_SIZE":4, "WIDTH_SIZE":3 } }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
4. 返回示例
{ "code":200, "message":"success", "localizedMsg":null, "data":100}
5. 返回碼
狀態(tài)碼 | 描述 | |
200 | 成功 | |
460 | 參數(shù)驗(yàn)證異常 | 會(huì)帶有驗(yàn)證異常的詳細(xì)說(shuō)明 |
500 | 服務(wù)異常 | server error |
52002 | 無(wú)訪問(wèn)權(quán)限 | |
52006 | 資源更新錯(cuò)誤 | |
52011 | 數(shù)據(jù)類型校驗(yàn)錯(cuò)誤 |
六. 數(shù)據(jù)查詢API
1. 請(qǐng)求參數(shù)
參數(shù) | 類型 | 是否必傳 | 說(shuō)明 |
modelId | String | 是 | 數(shù)據(jù)模型ID |
returnFields | JSON | 是 | 指定返回的字段1.若期望返回所有字段,則傳入?yún)?shù)為{““}2.若期望返回?cái)?shù)據(jù)總數(shù),則傳入?yún)?shù)為{“COUNT”}2.若期望按照字段分組返回?cái)?shù)據(jù)總數(shù),則傳入?yún)?shù)為{“COUNT(分組字段1,分組字段2)”}。如:[““]或者[“name”,”age”][COUNT][COUNT(name)] |
conditions | JSON | 否 | 條件,由字段名、運(yùn)算符、比較值組成一個(gè)condition。如:[{“fieldName”: “id”,”operate”: “eq”,”value”: 7}] |
orderBy | JSON | 否 | 排序條件,由增序或降序以及排序字段組成。如:{“asc”:”true”,”orderByFields”:[“name”,”age”]} |
pageNum | Integer | 否 | 分頁(yè)頁(yè)數(shù) |
pageSize | Integer | 否 | 分頁(yè)每頁(yè)數(shù)量 |
appId | String | 否 | 對(duì)于SaaS應(yīng)用,需要填該值 |
scopeId | String | 否 | 經(jīng)常是項(xiàng)目的id,該參數(shù)非必填,一般上架應(yīng)用被授權(quán)之后,會(huì)被默認(rèn)綁定到一個(gè)scope中,因此當(dāng)前操作會(huì)被默認(rèn)操作到被綁定到的這一個(gè)scope中。但是,對(duì)于集成應(yīng)用,也有可能被綁定到多個(gè)scope中,此時(shí)該操作需要填入scopeId。 |
其中returnFields支持的函數(shù)類型:
函數(shù)名稱 | 描述 | 實(shí)例 |
COUNT | 函數(shù)返回匹配指定條件的行數(shù) | {“COUNT(分組字段1,分組字段2)”} |
DATE_FORMAT | 函數(shù)按照f(shuō)ormat字符串格式化字段值 | {“DATE_FORMAT(分組字段,format)”} |
SUM | 函數(shù)返回?cái)?shù)值列的總數(shù) | {“SUM(分組字段)”} |
AVG | 函數(shù)返回?cái)?shù)值列的平均值 | {“AVG(分組字段)”} |
MIN | 函數(shù)返回?cái)?shù)值列的最小值 | {“MIN(分組字段)”} |
MAX | 函數(shù)返回?cái)?shù)值列的最大值 | {“MAX(分組字段)”} |
DATE_FORMAT支持的format修飾符
修飾符名稱 | 描述 |
%Y | 年 |
%Y-%m | 年月 |
%Y-%m-%d | 年月日 |
%Y-%m-%d %H | 年月日時(shí) |
%Y-%m-%d %H:%i | 年月日時(shí)分 |
%Y-%m-%d %H:%i:%s | 年月日時(shí)分秒 |
其中condition針對(duì)不同類型的屬性支持的運(yùn)算符:
屬性 | 支持的運(yùn)算符 |
Integer | eq,neq,lt,lteq,mt,mteq,bt,in,nin,nnull |
String | eq,neq,,nnul,in,nin |
Double | eq,neq,lt,lteq,mt,mteq,bt,in,nin,nnull |
Boolean | eq,nnul |
Date | eq,neq,lt,lteq,mt,mteq,bt,nnul |
2. 返回參數(shù)
參數(shù) | 類型 | 描述 |
data | String | 查詢返回?cái)?shù)據(jù)內(nèi)容,其中,Boolean類型的屬性返回值為0或1 |
3. 請(qǐng)求示例-1
{ "request":{ "apiVer":"0.0.2"http://api版本號(hào) }, "id":1508212818676,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123", "returnFields":["MODE","ENGINE"], "conditions":[ {"fieldName":"BRAND","value":"BMW","operate":"eq"}, {"fieldName":"WIDTH_SIZE","value":1,"value2":2,"operate":"bt"}, {"fieldName":"LONG_SIZE","value":"3","operate":"mt"} ], "orderBy":{ "asc":true, "orderByFields":["CREATE_DATA","MODE"] }, "pageNum":1, "pageSize":10 }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
4. 返回示例-1
{ "code":200, "localizedMsg":null, "data":"{\"count\":1, \"hasNext\":false, \"items\":[{\"gmt_create\":1551872701000,\"MODE\":\"33\",\"ENGINE\":\"44\",\"id\":2,\"gmt_modified\":1551872714000}], \"pageNum\":1, \"pageSize\":10}", "message":"success"}
5. 請(qǐng)求示例-2
{ "request":{ "apiVer":"0.1.0"http://api版本號(hào) }, "id":1508212818676,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123", "returnFields":["COUNT", "conditions":[ {"fieldName":"BRAND","value":"BMW","operate":"eq"}, {"fieldName":"WIDTH_SIZE","value":1,"value2":2,"operate":"bt"}, {"fieldName":"LONG_SIZE","value":"3","operate":"mt"} ], "pageNum":1, "pageSize":10 }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
6. 返回示例-2
{ "code":200, "localizedMsg":null, "data":"{ \"hasNext\":false, \"items\":[{ \"COUNT\":100 }] }" "message":"success"}
7. 請(qǐng)求示例-分組數(shù)量查詢
{ "request":{ "apiVer":"0.1.0"http://api版本號(hào) }, "id":1508212818676,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123", "returnFields":["COUNT(BRAND,NAME)"], "conditions":[ {"fieldName":"BRAND","value":"BMW","operate":"eq"}, {"fieldName":"WIDTH_SIZE","value":1,"value2":2,"operate":"bt"}, {"fieldName":"LONG_SIZE","value":"3","operate":"mt"} ], "pageNum":1, "pageSize":10 }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
8. 返回示例分組數(shù)量查詢
{ "code":200, "localizedMsg":null, "message":"success", "data":"{ \"hasNext\":false, \"items\":[ { \"COUNT\":100, \"BRAND\":\"BMW\", \"NAME\":\"X1\" },{ \"COUNT\":200, \"BRAND\":\"JEEP\", \"NAME\":\"M2\" }] }"}
9. 返回碼
狀態(tài)碼 | 描述 | |
200 | 成功 | |
460 | 參數(shù)驗(yàn)證異常 | 會(huì)帶有驗(yàn)證異常的詳細(xì)說(shuō)明 |
500 | 服務(wù)異常 | server error |
52002 | 無(wú)訪問(wèn)權(quán)限 | |
52005 | 目標(biāo)存儲(chǔ)未找到 |
七. 獲取文件上傳地址API
1. 請(qǐng)求參數(shù)
參數(shù) | 類型 | 是否必傳 | 描述 |
modelId | String | 是 | 數(shù)據(jù)模型id |
version | String | 是 | 數(shù)據(jù)模型的版本號(hào) |
fileSize | Integer | 是 | 文件大小,以字節(jié)為單位,目前系統(tǒng)不支持5M以上文件 |
attrName | String | 是 | 屬性名稱,模型中包含的屬性名稱,不包含會(huì)報(bào)錯(cuò)進(jìn)行提示 |
fileType | String | 是 | 文件類型,目前系統(tǒng)只支持bmp、png、gif、jpg |
appId | String | 否 | 對(duì)于SaaS應(yīng)用,需要填該值 |
scopeId | String | 否 | 經(jīng)常是項(xiàng)目的id,該參數(shù)非必填,一般上架應(yīng)用被授權(quán)之后,會(huì)被默認(rèn)綁定到一個(gè)scope中,因此當(dāng)前操作會(huì)被默認(rèn)操作到被綁定到的這一個(gè)scope中。但是,對(duì)于集成應(yīng)用,也有可能被綁定到多個(gè)scope中,此時(shí)該操作需要填入scopeId。 |
2. 返回參數(shù)
參數(shù) | 類型 | 描述 |
url | String | 數(shù)據(jù)上傳的url,url有效時(shí)間10s |
fileName | String | 文件名稱,系統(tǒng)隨機(jī)分配的文件名稱,用戶在得到這個(gè)文件名之后,應(yīng)該將其放在相應(yīng)模型數(shù)據(jù)的文件類型的字段上,例如:xxxxx.jpg |
3. 請(qǐng)求示例
{ "request":{ "apiVer":"0.0.1"http://api版本號(hào) }, "id":1508212818671,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123",//數(shù)據(jù)模型id "fileSize":"3.2",//文件大小 "attrName":"name",//屬性名稱 "fileType":"jpg",//文件類型 "version":"1.0",//模型版本 }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
4. 返回示例
{ "code":200,//返回是否成功,只要不是200說(shuō)明返回不成功 "message":"success",//如果失敗會(huì)返回失敗的信息描述 "localizedMsg":null, "data":{"url":"http://xxx.xxx.xx","fileName":"xxx.jpg"}返回的數(shù)據(jù)}
5. 返回碼
狀態(tài)碼 | 描述 | |
200 | 成功 | |
460 | 參數(shù)驗(yàn)證異常 | 會(huì)帶有驗(yàn)證異常的詳細(xì)說(shuō)明 |
500 | 服務(wù)異常 | server error |
52002 | 無(wú)訪問(wèn)權(quán)限 | |
52005 | 找不到目標(biāo)存儲(chǔ) | |
52009 | 參數(shù)和模型定義不匹配 | |
52011 | 數(shù)據(jù)類型校驗(yàn)錯(cuò)誤 | |
52064 | 屬性字段沒(méi)有相應(yīng)的圖片標(biāo)簽 | |
52063 | 文件大小不能大于5M |
八. 獲取文件下載地址API
1. 請(qǐng)求參數(shù)
參數(shù) | 類型 | 是否必傳 | 描述 |
modelId | String | 是 | 數(shù)據(jù)模型id |
version | String | 是 | 數(shù)據(jù)模型的版本號(hào) |
attrName | String | 是 | 屬性名稱,模型中包含的屬性名稱,不包含會(huì)報(bào)錯(cuò)進(jìn)行提示 |
fileType | String | 是 | 文件類型,目前系統(tǒng)只支持bmp、png、gif、jpg |
appId | String | 否 | 對(duì)于SaaS應(yīng)用,需要填該值 |
scopeId | String | 否 | 經(jīng)常是項(xiàng)目的id,該參數(shù)非必填,一般上架應(yīng)用被授權(quán)之后,會(huì)被默認(rèn)綁定到一個(gè)scope中,因此當(dāng)前操作會(huì)被默認(rèn)操作到被綁定到的這一個(gè)scope中。但是,對(duì)于集成應(yīng)用,也有可能被綁定到多個(gè)scope中,此時(shí)該操作需要填入scopeId。 |
2. 返回參數(shù)
參數(shù) | 類型 | 描述 |
url | String | 數(shù)據(jù)上傳的url,url有效時(shí)間10s |
3. 請(qǐng)求示例
{ "request":{ "apiVer":"0.0.1"http://api版本號(hào) }, "id":1508212818671,//request里的全局唯一id透?jìng)? "params":{ "modelId":"XXX123",//數(shù)據(jù)模型id "scopeId":"fdbsdj1dfjdubgxxx",//業(yè)務(wù)隔離id "attrName":"name",//屬性名稱 "fileName":"xdsfxv.jpg",//文件類型 "version":"1.0",//模型版本 }, "version":"1.0"http://請(qǐng)求協(xié)議版本}
4. 返回示例
{ "code":200,//返回是否成功,只要不是200說(shuō)明返回不成功 "message":"success",//如果失敗會(huì)返回失敗的信息描述 "localizedMsg":null, "data":{"url":"http://xxx.xxx.xx"}返回的數(shù)據(jù)下載查看的url}
5. 返回碼
狀態(tài)碼 | 描述 | |
200 | 成功 | |
460 | 參數(shù)驗(yàn)證異常 | 會(huì)帶有驗(yàn)證異常的詳細(xì)說(shuō)明 |
500 | 服務(wù)異常 | server error |
52002 | 無(wú)訪問(wèn)權(quán)限 | |
52005 | 找不到目標(biāo)存儲(chǔ) | |
52009 | 參數(shù)和模型定義不匹配 | |
52011 | 數(shù)據(jù)類型校驗(yàn)錯(cuò)誤 | |
52064 | 屬性字段沒(méi)有相應(yīng)的圖片標(biāo)簽 |
開(kāi)發(fā) - 數(shù)據(jù)訂閱
應(yīng)用可以通過(guò)HTTP2方式,訂閱數(shù)據(jù)的變更消息(新增、刪除、修改)。應(yīng)用自身不需要發(fā)布數(shù)據(jù)的變更消息到通道中,這些消息的產(chǎn)生是由應(yīng)用通過(guò)上面的數(shù)據(jù)操作API,對(duì)數(shù)據(jù)進(jìn)行操作之后,由平臺(tái)產(chǎn)生。平臺(tái)產(chǎn)生時(shí)間之后,會(huì)將消息通過(guò)訂閱關(guān)系發(fā)送到訂閱方。
在這個(gè)消息通信中,每一個(gè)應(yīng)用實(shí)例,由AppKey標(biāo)識(shí)身份。對(duì)于單租戶型的應(yīng)用,每一個(gè)AppKey代表了一次應(yīng)用分發(fā)的實(shí)例;但是,對(duì)于SaaS應(yīng)用,他的一個(gè)AppKey代表了該應(yīng)用對(duì)應(yīng)的所有租戶的身份,因此,在SaaS應(yīng)用按照AppKey得到消息之后,需要自行根據(jù)訂閱到的數(shù)據(jù)內(nèi)容中的AppID字段,將數(shù)據(jù)對(duì)應(yīng)到不用的用戶中。
SDK 介紹
1. 依賴引用
在工程中添加 maven 依賴接入 SDK。
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>iot-client-message</artifactId> <version>1.1.3</version></dependency><dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.7.1</version></dependency>
2. 身份認(rèn)證
使用服務(wù)端訂閱功能,需要基于AppKey進(jìn)行身份認(rèn)證并建立連接。該AppKey根據(jù)應(yīng)用類型不同,有兩種來(lái)源:
對(duì)于獨(dú)立單租戶托管并分發(fā)的應(yīng)用,該AppKey是由托管平臺(tái)在應(yīng)用實(shí)例化分發(fā)部署應(yīng)用時(shí),自動(dòng)產(chǎn)生,并注入在主機(jī)的環(huán)境變量中,應(yīng)用事先并不知道該值,需要?jiǎng)討B(tài)從環(huán)境變量中獲取。
對(duì)于共享型應(yīng)用,該AppKey是該SaaS應(yīng)用在注冊(cè)多租戶接口時(shí),從平臺(tái)創(chuàng)建,并硬編碼在應(yīng)用中。
StringappKey="XXXXXX";StringappSecret="XXXXXXXXXXXXXXXXXXXXXXX";Stringendpoint=String.format("https://%s.iot-as-http2.cn-shanghai.aliyuncs.com:443",appKey);// 連接配置Profileprofile=Profile.getAppKeyProfile(endpoint,appKey,appSecret);// 構(gòu)造客戶端MessageClientclient=MessageClientFactory.messageClient(profile);// 數(shù)據(jù)接收client.connect(messageToken->{ System.out.println(messageToken.getMessage()); returnMessageCallback.Action.CommitSuccess;});Thread.sleep(1000000);
*注意:關(guān)于上述代碼中的“connect”方法,需要額外說(shuō)明的是該方法在未經(jīng)過(guò)授權(quán)的情況下,會(huì)調(diào)用失敗。所以請(qǐng)務(wù)必做好重試邏輯,以便應(yīng)用一旦被授權(quán)之后,可以及時(shí)得到訂閱消息。
3. 設(shè)置消息接受接口
連接建立后,服務(wù)端會(huì)立即向 SDK 推送已訂閱的消息。因此,建立鏈接時(shí),需要提供消息接收接口,用于處理未設(shè)置回調(diào)的消息。建議在connect
之前,調(diào)用 setMessageListener 設(shè)置消息回調(diào)。
您需要通過(guò) MessageCallback 接口的consume
方法,和調(diào)用 messageClient
的setMessageListener()
方法來(lái)設(shè)置消息接收接口。consume
方法的返回值決定 SDK 是否發(fā)送 ACK。設(shè)置消息接收接口的方法如下:
MessageCallbackmessageCallback=newMessageCallback(){ @Override publicActionconsume(MessageTokenmessageToken){ Messagem=messageToken.getMessage(); log.info("receive : "+newString(messageToken.getMessage().getPayload())); // TODO: 處理消息邏輯 returnMessageCallback.Action.CommitSuccess; }};Stringtopic=String.format("/sys/appkey/%s/dop/model/data/change",appkey);messageClient.setMessageListener(topic,messageCallback);
其中,Message消息字段如下:
// 消息體byte[]payload;// TopicStringtopic;// 消息IDStringmessageId;// QoSintqos;
payload內(nèi)容是一個(gè)JSON對(duì)象字符串,字段信息如下:
// 模型ID
StringmodelId;
// 變更數(shù)據(jù)的ID
List<Long>dataIds;
// 操作類型:insert/update/delete
StringoperateType;
// 訂閱的appId, 以appKey授權(quán)時(shí)為空
StringappId;