這篇文章主要講解了“物聯(lián)網(wǎng)接口規(guī)范的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“物聯(lián)網(wǎng)接口規(guī)范的方法是什么”吧!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、永善網(wǎng)絡(luò)推廣、微信小程序開(kāi)發(fā)、永善網(wǎng)絡(luò)營(yíng)銷、永善企業(yè)策劃、永善品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供永善建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
一、開(kāi)發(fā)流程
注冊(cè)開(kāi)發(fā)者賬號(hào)。
云開(kāi)發(fā)創(chuàng)建云應(yīng)用項(xiàng)目,獲取 client_id & secret。
說(shuō)明:開(kāi)發(fā)者平臺(tái) key 的名稱為 accessId & accessKey。
創(chuàng)建 SDK:在涂鴉 IoT 平臺(tái),選擇 App工作臺(tái) > App SDK > 獲取SDK > 按要求填寫參數(shù) > 獲取schema(渠道標(biāo)識(shí))。
基于 OpenAPI 進(jìn)行業(yè)務(wù)開(kāi)發(fā)。
測(cè)試無(wú)誤后,開(kāi)發(fā)者自行發(fā)布。
二、授權(quán)流程
每個(gè)業(yè)務(wù) OpenAPI 都需要進(jìn)行 token 校驗(yàn)。
說(shuō)明:涂鴉 OpenAPI 遵循 OAuth 2.0 協(xié)議標(biāo)準(zhǔn)。
三、簡(jiǎn)單模式
針對(duì)云云對(duì)接場(chǎng)景,涂鴉提供了隱式授權(quán)的方式獲取:
按照涂鴉云 OpenAPI 接口規(guī)范對(duì)開(kāi)發(fā)者 client_id 和 secret 進(jìn)行簽名認(rèn)證。
涂鴉云校驗(yàn)并頒發(fā)令牌給第三方云。
說(shuō)明:隱式授權(quán)方式獲取的 token,權(quán)限維度為開(kāi)發(fā)者維度,token 的操作權(quán)限范圍為該開(kāi)發(fā)者有權(quán)限操作的范圍,例如操作(增、刪、改、查)開(kāi)發(fā)者的應(yīng)用用戶數(shù)據(jù),產(chǎn)品下的設(shè)備數(shù)據(jù)和應(yīng)用下用戶綁定的設(shè)備數(shù)據(jù)。
四、接口規(guī)范
環(huán)境說(shuō)明
各接口使用方請(qǐng)根據(jù)自身所在區(qū)域調(diào)用相應(yīng)接口。
中國(guó)區(qū)
https://openapi.tuyacn.com
美洲區(qū)
https://openapi.tuyaus.com
歐洲區(qū)
https://openapi.tuyaeu.com
印度區(qū)
https://openapi.tuyain.com
請(qǐng)求方式
支持的請(qǐng)求方式如下:
GET
PUT
POST
DELETE
說(shuō)明:當(dāng)請(qǐng)求方式為POST
時(shí),Content-Type
需使用application/json
。
請(qǐng)求頭設(shè)置
任意接口都需要在 header 中加入如下參數(shù):
說(shuō)明:業(yè)務(wù)接口(非 token 接口)請(qǐng)求時(shí)需要參數(shù)access_token
。
五、簽名規(guī)范
涂鴉云采用 HMAC-SHA256 創(chuàng)建摘要,根據(jù)不同應(yīng)用場(chǎng)景,當(dāng)前提供兩套簽名算法:
令牌管理接口(獲取令牌、刷新令牌)
sign = HMAC-SHA256(client_id + t, secret).toUpperCase()
使用申請(qǐng)到的 client_id 與當(dāng)前請(qǐng)求的 13 位標(biāo)準(zhǔn)時(shí)間戳拼接成待簽名的字符串,采用申請(qǐng)到的云應(yīng)用 secret 作為密鑰參與哈希摘要,得到的字符串,最后轉(zhuǎn)大寫;
業(yè)務(wù)接口
sign = HMAC-SHA256(client_id + access_token + t, secret).toUpperCase()
使用申請(qǐng)到的云應(yīng)用 client_id + 當(dāng)前有效的請(qǐng)求令牌 + 當(dāng)前請(qǐng)求的 13 位標(biāo)準(zhǔn)時(shí)間戳拼接成待簽名的字符串,采用申請(qǐng)到的云應(yīng)用 secret 作為密鑰參與哈希摘要,得到的字符串,最后轉(zhuǎn)大寫。
簽名示例
準(zhǔn)備參數(shù):
client_id:1KAD46OrT9HafiKdsXeg
secret:4OHBOnWOqaEC1mWXOpVL3yV50s0qGSRC
t:1588925778000
access_token:3f4eda2bdec17232f67c0b188af3eec1
令牌管理接口簽名:
待簽名字符串:1KAD46OrT9HafiKdsXeg1588925778000
簽名結(jié)果:HMAC-SHA256(1KAD46OrT9HafiKdsXeg1588925778000,4OHBOnWOqaEC1mWXOpVL3yV50s0qGSRC)
ceaafb5ccdc2f723a9fd3e91d3d2238ee0dd9a6d7c3c365deb50fc2af277aa83
轉(zhuǎn)大寫為:CEAAFB5CCDC2F723A9FD3E91D3D2238EE0DD9A6D7C3C365DEB50FC2AF277AA83
業(yè)務(wù)接口:
待簽名字符串:1KAD46OrT9HafiKdsXeg3f4eda2bdec17232f67c0b188af3eec11588925778000
簽名結(jié)果:HMAC-SHA256(1KAD46OrT9HafiKdsXeg3f4eda2bdec17232f67c0b188af3eec11588925778000,4OHBOnWOqaEC1mWXOpVL3yV50s0qGSRC)
36c30e300f226b68add014dd1ef56a81edb7b7a817840485769b9d6c96d0faa1
轉(zhuǎn)大寫為:36C30E300F226B68ADD014DD1EF56A81EDB7B7A817840485769B9D6C96D0FAA1
各類語(yǔ)言 HMAC SHA256 的實(shí)現(xiàn):
Javascript HMAC SHA256
/** Run the code online with this jsfiddle. Dependent upon an open source js library calledhttp://code.google.com/p/crypto-js/. **/
PHP HMAC SHA256
/** PHP has built in methods for hash_hmac (PHP 5) and base64_encode (PHP 4, PHP 5) resulting in no outside dependencies. Say what you want about PHP but they have the cleanest code for this example. **/ $s = hash_hmac('sha256', 'Message', 'secret', true); echo strtoupper(var_dump($s));
Java HMAC SHA256
/** Dependent on Apache Commons Codec to encode in base64. **/ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class ApiSecurityExample { public static void main(String[] args) { try { String secret = "secret"; String message = "Message"; Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); sha256_HMAC.init(secret_key); byte[] bytes = sha256_HMAC.doFinal(message.getBytes()); String hash = new HexBinaryAdapter().marshal(bytes).toUpperCase(); System.out.println(hash); } catch (Exception e){ System.out.println("Error"); } } }
C# HMAC SHA256
using System; using System.Security.Cryptography; namespace Test { public class MyHmac { public static string Encrypt(string message, string secret) { secret = secret ?? ""; var encoding = new System.Text.UTF8Encoding(); byte[] keyByte = encoding.GetBytes(secret); byte[] messageBytes = encoding.GetBytes(message); using (var hmacsha256 = new HMACSHA256(keyByte)) { byte[] hashmessage = hmacsha256.ComputeHash(messageBytes); StringBuilder builder = new StringBuilder(); for (int i = 0; i < hashmessage.Length; i++) { builder.Append(hashmessage[i].ToString("x2")); } return builder.ToString().ToUpper(); } } } }
返回結(jié)果 統(tǒng)一返回 JSON,一般格式如下:
請(qǐng)求成功
{ "success": true, "result": { //object } }
請(qǐng)求異常
{ "success": false, "code": 1010, "msg": "token非法" }
六、集成 SDKJava概述
目前提供的基于Java 的 Tuya Cloud SDK 封裝了 token 相關(guān)、用戶相關(guān)以及設(shè)備相關(guān)的接口,以便加速云云對(duì)接的開(kāi)發(fā)。
開(kāi)發(fā)者只需要關(guān)注所使用的業(yè)務(wù)功能方法的調(diào)用,構(gòu)建對(duì)應(yīng)的 TuyaClient 實(shí)例,實(shí)例會(huì)自動(dòng)更新 token 以及完成對(duì)應(yīng) API 的調(diào)用。SDK 主要包括了以下功能, 詳細(xì)接口信息請(qǐng)參考后文對(duì)應(yīng)模塊:
token 相關(guān)(無(wú)需用戶調(diào)用)
用戶相關(guān)(獲取用戶列表、注冊(cè)用戶、獲取用戶下的設(shè)備列表)
設(shè)備相關(guān)(獲取設(shè)備配網(wǎng) token、獲取配網(wǎng) token 下所有設(shè)備列表等接口)
集成 SDK
IDEA 導(dǎo)入 jar 包
Eclipse 導(dǎo)入 jar 包
通用模塊
由于部分新增接口無(wú)法及時(shí)同步集成至 SDK,開(kāi)發(fā)者可通過(guò) SDK 通用接口進(jìn)行水平擴(kuò)展?jié)M足開(kāi)發(fā)。
獲取 Header 列表:
/** * 獲取Header列表 * @param isToken 是否是token相關(guān)請(qǐng)求,一般是false * @return */ public ListgetHeaders(Boolean isToken)
萬(wàn)能涂鴉接口:
/** * 萬(wàn)能涂鴉接口 * @param url * @param method 請(qǐng)求類型(例如:GET) * @param headers 請(qǐng)求頭內(nèi)容(額外新增的header) * @param body * @return */ public String commonHttpRequest(String url, HttpMethod method, Mapheaders, Object body)
調(diào)用示例
以下為注冊(cè)用戶的示例:
TuyaClient client = new TuyaClient(clientId, secret, RegionEnum.CN); String uid = client.registerUser("testApp","86","18212345678", MD5Util.getMD5("123456")"nickName",UserTypeEnum.MOBLIE); System.out.println("成功同步用戶: "+ uid);
感謝各位的閱讀,以上就是“物聯(lián)網(wǎng)接口規(guī)范的方法是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)物聯(lián)網(wǎng)接口規(guī)范的方法是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!