物聯網平台提供Go語言的雲端SDK供開發人員使用。本文介紹雲端Go SDK的安裝和配置,以及使用Go SDK調用雲端API的樣本。
安裝SDK
安裝Go開發環境。
目前支援Go 1.13.0及以上版本。請訪問Go官網擷取。
Go安裝完畢後,建立系統變數GOPATH,並將其指向您的代碼目錄。
瞭解更多GOPATH相關資訊,請執行命令
go help gopath
。執行以下命令安裝阿里雲Go SDK,通過Go mod來管理專案依賴。
重要以下命令安裝的SDK版本為樣本值,最新版本資訊,請參見OpenAPI門戶物聯網平台的SDK安裝方式。Go SDK的歷史版本資訊,請參見SDK的Code。
瞭解Go SDK詳細資料,請訪問alibabacloud-go-sdk。
Go SDK安裝路徑預設為 $GOPATH/src/github.com/alibabacloud-go/iot-20180120,$GOPATH可以通過命令
go env GOPATH
查看。若Go SDK依賴包缺少,可執行命令
go mod tidy
拉取。
go get github.com/alibabacloud-go/iot-20180120/v6
初始化SDK
建立對象config,存放SDK初始化資訊(AccessKey ID、AccessKey Secret、地區ID等)。
通過
iot.NewClient(config)
方法載入SDK資訊,建立用戶端執行個體,完成SDK用戶端初始化。
以華東2(上海)地區及其服務接入地址為例,初始代碼如下。實際情境設定中,需使用您的物聯網平台服務所在地區。
import (
"encoding/json"
"strings"
"fmt"
"os"
iot20180120 "github.com/alibabacloud-go/iot-20180120/v6/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
/**
* 使用AK&SK初始化帳號Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
func CreateClient (accessKeyId *string, accessKeySecret *string) (_result *iot20180120.Client, _err error) {
config := &openapi.Config{
// 必填,您的 AccessKey ID
AccessKeyId: accessKeyId,
// 必填,您的 AccessKey Secret
AccessKeySecret: accessKeySecret,
}
// Endpoint 請參考 https://api.aliyun.com/product/Iot
config.Endpoint = tea.String("iot.cn-shanghai.aliyuncs.com")
_result = &iot20180120.Client{}
_result, _err = iot20180120.NewClient(config)
return _result, _err
}
func _main (args []*string) (_err error) {
// 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式
client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")))
if _err != nil {
return _err
}
......
}
參數 | 說明 |
accessKeyId | 您阿里雲帳號的AccessKey ID。 您可在阿里雲官網控制台AccessKey管理中建立或查看您的AccessKey。 |
accessKeySecret | 您阿里雲帳號的AccessKey Secret。 |
RegionId | 您的物聯網平台服務的地區ID,用於拼接服務接入地址,格式為:iot.${RegionId}.aliyuncs.com。 您可在物聯網平台控制台左上方,查看當前服務所在地區。 地區ID的表達方法,請參見地區和可用性區域。 |
為避免將AccessKey寫入程式碼到業務代碼中帶來的安全風險,可採用配置環境變數的方法管理AccessKey。
您需在本地作業系統中添加環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET,並分別寫入已準備好的AccessKey ID和AccessKey Secret。
在範例程式碼中可以通過以下方法擷取:
os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
更多鑒權訪問方式,請參見管理訪問憑證。
發起調用
物聯網平台雲端SDK為每個API封裝兩個類,分別命名為${API名稱}+"Request"
和${API名稱}+"Response"
,分別用於承載API的調用請求和調用結果。
調用步驟
已完成SDK用戶端初始化。具體內容,請參見初始化SDK。
建立對應API的調用請求,產生
${API名稱}+"Request"
類對象執行個體request。通過對象執行個體request,使用
request.${請求參數的名稱}
方法,設定API所需的請求參數值。建立
${API名稱}+"Response"
類的對象執行個體response承載響應結果:使用Client對象執行個體client的${API名稱}(request)
方法,擷取API對應request的響應結果,包含服務端響應的body和headers。
物聯網平台雲端API,請參見API列表。有關request中請求參數說明,及response中返回參數說明,請參見對應API文檔。
本文以調用Pub介面發布訊息到Topic為例。請求參數資訊,請參見Pub。
pubRequest := &iot20180120.PubRequest{
ProductKey: tea.String("${productKey}"),
IotInstanceId: tea.String("${iotInstanceId}"),
DeviceName: tea.String("${deviceName}"),
TopicFullName: tea.String("/${productKey}/${deviceName}/user/get"),
MessageContent: tea.String("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0="),
}
runtime := &util.RuntimeOptions{}
tryErr := func() (_e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
resp, _err := client.PubWithOptions(pubRequest, runtime)
if _err != nil {
return _err
}
console.Log(util.ToJSONString(resp))
return nil
}()
完整程式碼範例
實際情境中,請參照上文的參數說明,替換對應參數值。
// This file is auto-generated, don't edit it. Thanks.
package main
import (
"encoding/json"
"strings"
"fmt"
"os"
iot20180120 "github.com/alibabacloud-go/iot-20180120/v6/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
/**
* 使用AK&SK初始化帳號Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
func CreateClient (accessKeyId *string, accessKeySecret *string) (_result *iot20180120.Client, _err error) {
config := &openapi.Config{
// 必填,您的 AccessKey ID
AccessKeyId: accessKeyId,
// 必填,您的 AccessKey Secret
AccessKeySecret: accessKeySecret,
}
// Endpoint 請參考 https://api.aliyun.com/product/Iot
config.Endpoint = tea.String("iot.cn-shanghai.aliyuncs.com")
_result = &iot20180120.Client{}
_result, _err = iot20180120.NewClient(config)
return _result, _err
}
func _main (args []*string) (_err error) {
// 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式
client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")))
if _err != nil {
return _err
}
pubRequest := &iot20180120.PubRequest{
// 產品ProductKey。
ProductKey: tea.String("${productKey}"),
// 物聯網平台執行個體ID。
IotInstanceId: tea.String("${iotInstanceId}"),
DeviceName: tea.String("${deviceName}"),
// 要接收訊息的裝置的自訂Topic。
TopicFullName: tea.String("/${productKey}/${deviceName}/user/get"),
// 要發送的訊息主體:{"test":"task pub broadcast"}
MessageContent: tea.String("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0="),
}
runtime := &util.RuntimeOptions{}
tryErr := func()(_e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
// 複製代碼運行請自行列印 API 的傳回值
_, _err = client.PubWithOptions(pubRequest, runtime)
if _err != nil {
return _err
}
return nil
}()
if tryErr != nil {
var error = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
error = _t
} else {
error.Message = tea.String(tryErr.Error())
}
// 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
// 錯誤 message
fmt.Println(tea.StringValue(error.Message))
// 診斷地址
var data interface{}
d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
d.Decode(&data)
if m, ok := data.(map[string]interface{}); ok {
recommend, _ := m["Recommend"]
fmt.Println(recommend)
}
_, _err = util.AssertAsString(error.Message)
if _err != nil {
return _err
}
}
return _err
}
func main() {
err := _main(tea.StringSlice(os.Args[1:]))
if err != nil {
panic(err)
}
}
附錄:範例程式碼
前往物聯網平台雲端SDK樣本中心查看或下載API調用的範例程式碼。範例程式碼中包含Java、Python、PHP、Node.js、Go、C++和.NET等版本SDK樣本。
阿里雲OpenAPI開發人員門戶提供API線上調試工具。在API調試頁面,您可以快速檢索和體驗調用API。系統會根據您輸入的參數同步產生各語言SDK的程式碼範例。各語言SDK程式碼範例顯示在頁面右側SDK樣本頁簽下供您參考。在調用結果頁簽下,可查看API調用的真實請求URL和JSON格式的返回結果。