天天看點

IoT Studio 公開API 攻略IoT Studio建立公開API

IoT Studio建立公開API

開發内容

公開API由IoT Studio的服務編排建立,以HTTP請求與HTTP傳回的方式提供調用端口。與直接建立的“HTTP請求/傳回”對相比,公開API不需要鑒權的AppKey與AppSecret,支援公網通路。

開發過程

STEP1 使用模闆建立

在IoT Studio的項目管理頁面中,選擇從模闆建立業務服務,如圖下圖所示。

IoT Studio 公開API 攻略IoT Studio建立公開API

如下圖所示,右上角單擊展開更多模闆,找到最後一個模闆:公開API。

IoT Studio 公開API 攻略IoT Studio建立公開API

業務邏輯名稱随意,模闆資訊中可以看到,使用該模闆建立的業務服務包含三個節點:HTTP請求、腳本節點和HTTP傳回。單擊使用該模闆建立。

IoT Studio 公開API 攻略IoT Studio建立公開API

STEP2 配置節點

建立完成後會自動跳轉到服務編輯器頁面。依次對節點進行配置。

  • HTTP請求節點:

節點配置如下圖所示,配置Action參數為:public_api

IoT Studio 公開API 攻略IoT Studio建立公開API
  • Node.js腳本節點:

節點配置如下圖所示,将傳回的payload内容修改為:"hello Saxon"

IoT Studio 公開API 攻略IoT Studio建立公開API

HTTP傳回節點不需要進行修改,保持預設配置即可。

單擊右上角的儲存後部署并釋出業務服務。

STEP3 擷取API域名

在服務清單中右鍵單擊建立的服務,選擇服務調用幫助。

IoT Studio 公開API 攻略IoT Studio建立公開API

彈出服務詳情頁面如下圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

API Path即調用API的域名,單擊行末的複制。

注意

在釋出->域名管理頁面下也可以找到一個域名位址,如下圖所示。

IoT Studio 公開API 攻略IoT Studio建立公開API

顯示為預設API通路域名,但這個域名并不是調用API的域名!

IoT Studio 公開API 攻略IoT Studio建立公開API

筆者就是誤認為這個域名是調用API的域名,測試的請求結果為400,浪費了很久的時間。

STEP4 擷取參數

在STEP2 配置節點中,我們沒有對HTTP請求節點進行添加入參的操作,但這并不意味着對這個API的請求不需要參數。

向下滾動服務詳情頁面,找到請求示例,這裡提供了調用的API的示例代碼。切換比較直覺的Python版本,如下圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

代碼中bodyMap和Headers的聲明,分别代表了請求主體資訊和請求頭資訊。

  • bodyMap的内容如下:
{
    'id': str(uuid.uuid4()),
    'version': "1.0",
    'request': {
        'iotToken': "xxxx",
        'apiVer': "1.0.0"
    },
    'params': {
        # 接口參數
        
        'action':"public_api",
    }
}           

其中uuid子產品用于根據使用的網卡和時間資訊生成一個随機的字元串。此處我們要根據樣例代碼獲知需要提供的參數資訊,是以可以以随機字元串代替。去除換行符與注釋,整理如下:

{'id':'random_id','version': "1.0",'request': {'iotToken': "xxxx",'apiVer': "1.0.0"},'params': {'action':"public_api"}}

  • header的内容如下:
{
    'accept': 'application/json'
}           

也就是說,我們要在頭資訊中添加一條這樣的鍵值: 'accept': 'application/json'。

另一種參數

根據幫助文檔:

公開API

,與貔閣同學提供的參考截圖:

IoT Studio 公開API 攻略IoT Studio建立公開API

我們需要在HTTP請求的Body中加入參數如下:

{'params':{'action':'public_api'},'request':{'apiVer':'1.0.0'},'version':'1.0','id': 12}           

并且要在請求頭資訊中注明主體資訊的編碼方式為application/json

STEP5 使用POSTMAN測試請求

一切準備就緒,下面可以使用POSTMAN來實際測試API了。

啟動POSTMAN,建立HTTP請求如下圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

請求方式為POST,域名使用STEP3中擷取的域名。由于貔閣提供的請求參數有成功的前車之鑒,先來測試他的方法:

貔閣的請求參數

在Header中添加body内容格式的資訊,如下圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

由于application/json不屬于POSTMAN預設的主體資訊格式。body頁籤中,選擇資訊的格式為raw,并粘貼STEP4中擷取的參數到主體資訊中。如下圖所示。

IoT Studio 公開API 攻略IoT Studio建立公開API

一切準備就緒,單擊Send,傳回結果如下圖:

IoT Studio 公開API 攻略IoT Studio建立公開API

傳回的資料為"hello Saxon",與我們在服務開發中節點配置的内容一緻。請求成功。

請求示例的參數

同樣的步驟,建立一條請求如圖:

IoT Studio 公開API 攻略IoT Studio建立公開API

這次Header中鍵名輸入accept,鍵值不變。

填寫body内容如圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

單擊Send,傳回成功資訊如下圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

以上,兩種參數填寫方法都是可行的。

非公開API

前面的内容,我們基于公開API模闆進行的服務建立。下面來探讨,如果是不使用模闆,搭建完全相同的節點。會有什麼不同。

項目下直接建立業務服務如圖:

IoT Studio 公開API 攻略IoT Studio建立公開API

參考公開API模闆,添加節點:HTTP請求、Node.js腳本、HTTP傳回。将三者連接配接并配置HTTP請求如下圖所示:

IoT Studio 公開API 攻略IoT Studio建立公開API

Action參數為:api_test

同理,複制模闆中Node.js腳本的代碼,配置節點如圖:

IoT Studio 公開API 攻略IoT Studio建立公開API

HTTP傳回節點不需要修改,保持預設。

儲存,部署并釋出服務。打開服務調用幫助,這裡的頁面出現了差別:

IoT Studio 公開API 攻略IoT Studio建立公開API

相比公開API模闆建立的服務,這裡多出了項目AppKey與AppSecret。

向下滾動頁面,檢視Python的示例代碼:

IoT Studio 公開API 攻略IoT Studio建立公開API

這裡也出現了不同,需要在用戶端初始化時進行鑒權過程。

是以這裡建立的并不是公開API,公網可以通路,但是要經過鑒權。

猜想

注意到bodyMap中包含了iotToken項,鍵值為無意義的xxxx。而iotToken常用于物聯網裝置HTTP連接配接的鑒權。猜想在非公開API的調用過程中,sdk根據appKey與appSecret建立連接配接得到iotToken。接着替換bodyMap中的對應項,在實際API調用過程中,起到鑒權作用的隻是iotToken。換言之,如果得到了正确的iotToken,僅使用POSTMAN也可以完成非公開API的調用。

測試内容待補充。

Saxon

2020-3-8 15:25