IoT Studio 公開API 攻略-阿里云開發者社區

開發者社區> 阿里云物聯網> 正文

IoT Studio 公開API 攻略

簡介: IoT Studio提供了制作公開API的功能。通過公開API,無需AppKey與AppSecret的鑒權即可獲得平臺的數據。本文記錄了創建公開API的開發過程。

IoT Studio創建公開API

開發內容

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

開發過程

STEP1 使用模板創建

在IoT Studio的項目管理頁面中,選擇從模板新建業務服務,如圖下圖所示。
image.png

如下圖所示,右上角單擊展開更多模板,找到最后一個模板:公開API。
image.png


業務邏輯名稱隨意,模板信息中可以看到,使用該模板創建的業務服務包含三個節點:HTTP請求、腳本節點和HTTP返回。單擊使用該模板新建
image.png

STEP2 配置節點

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

  • HTTP請求節點:

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

  • Node.js腳本節點:

節點配置如下圖所示,將返回的payload內容修改為:"hello Saxon"
image.png


HTTP返回節點不需要進行修改,保持默認配置即可。
單擊右上角的保存后部署并發布業務服務。

STEP3 獲取API域名

在服務列表中右鍵單擊新建的服務,選擇服務調用幫助
image.png

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


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

注意

發布->域名管理頁面下也可以找到一個域名地址,如下圖所示。
image.png


顯示為默認API訪問域名,但這個域名并不是調用API的域名!
image.png
筆者就是誤認為這個域名是調用API的域名,測試的請求結果為400,浪費了很久的時間。

STEP4 獲取參數

STEP2 配置節點中,我們沒有對HTTP請求節點進行添加入參的操作,但這并不意味著對這個API的請求不需要參數。
向下滾動服務詳情頁面,找到請求示例,這里提供了調用的API的示例代碼。切換比較直觀的Python版本,如下圖所示:
image.png
代碼中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'。

另一種參數

根據幫助文檔:,與貔閣同學提供的參考截圖:
截圖.png


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

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

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

STEP5 使用POSTMAN測試請求

一切準備就緒,下面可以使用POSTMAN來實際測試API了。
啟動POSTMAN,新建HTTP請求如下圖所示:
image.png
請求方式為POST,域名使用STEP3中獲取的域名。由于貔閣提供的請求參數有成功的前車之鑒,先來測試他的方法:

貔閣的請求參數

在Header中添加body內容格式的信息,如下圖所示:
image.png


由于application/json不屬于POSTMAN預設的主體信息格式。body選項卡中,選擇信息的格式為raw,并粘貼STEP4中獲取的參數到主體信息中。如下圖所示。
image.png

一切準備就緒,單擊Send,返回結果如下圖:
image.png
返回的數據為"hello Saxon",與我們在服務開發中節點配置的內容一致。請求成功。

請求示例的參數

同樣的步驟,新建一條請求如圖:
image.png
這次Header中鍵名輸入accept可以领救济金的游戏,鍵值不變。


填寫body內容如圖所示:
image.png


單擊Send可以领救济金的游戏,返回成功信息如下圖所示:
image.png


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

非公開API

前面的內容,我們基于公開API模板進行的服務創建。下面來探討,如果是不使用模板,搭建完全相同的節點。會有什么不同。
項目下直接新建業務服務如圖:
image.png


參考公開API模板,添加節點:HTTP請求、Node.js腳本、HTTP返回。將三者連接并配置HTTP請求如下圖所示:
image.png
Action參數為:api_test


同理,復制模板中Node.js腳本的代碼,配置節點如圖:
image.png


HTTP返回節點不需要修改,保持默認。
保存,部署并發布服務。打開服務調用幫助,這里的頁面出現了區別:
image.png
相比公開API模板創建的服務,這里多出了項目AppKey與AppSecret。


向下滾動頁面,查看Python的示例代碼:
image.png
這里也出現了不同,需要在客戶端初始化時進行鑒權過程。
所以這里創建的并不是公開API,公網可以訪問,但是要經過鑒權。

猜想

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


Saxon
2020-3-8 15:25

版權聲明:本文中所有內容均屬于阿里云開發者社區所有,任何媒體、網站或個人未經阿里云開發者社區協議授權不得轉載、鏈接、轉貼或以其他方式復制發布/發表。申請授權請郵件developerteam@list.alibaba-inc.com,已獲得阿里云開發者社區協議授權的媒體、網站,在轉載使用時必須注明"稿件來源:阿里云開發者社區,原文作者姓名",違者本社區將依法追究責任。 如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至:developer2020@service.aliyun.com 進行舉報,并提供相關證據,一經查實,本社區將立刻刪除涉嫌侵權內容。

分享:
阿里云物聯網
使用釘釘掃一掃加入圈子
+ 訂閱

致力于實現萬物互聯的美好世界,為生態合作伙伴提供基于云計算、大數據、人工智能、云端一體化、安全的物聯網基礎平臺和內容服務平臺。

官方博客
開發者交流群
  • QQ群(836867015):
  • 釘釘群: