IoT Platform は、Go 向けの SDK を提供しています。このトピックでは、Go 向け IoT Platform SDK をインストールおよび設定する方法について説明します。また、SDK を使用して IoT Platform の API 操作を呼び出す方法のサンプルコードも提供します。
Go 向け IoT Platform SDK のインストール
Go をインストールします。
Go 向け SDK には、Go 1.13.0 以降が必要です。Go 公式 Web サイトから Go インストールパッケージをダウンロードし、Go をインストールします。
Go をインストールした後、GOPATH という名前のシステム変数を作成し、値をコードディレクトリに設定します。
GOPATH 変数の詳細については、
go help gopathコマンドを実行します。次のコマンドを実行して、Go 向け Alibaba Cloud SDK をインストールします。依存関係を管理するには、go mod コマンドを使用します。
説明デフォルトでは、次のコマンドを実行して最新の SDK をインストールします。特定のバージョンの SDK をインストールする場合は、コマンドの末尾にバージョン番号(
@v3.0.0など)を追加します。Go 向け SDK の過去のバージョンの詳細については、「SDK コード」をご参照ください。Go 向け IoT Platform SDK の詳細については、「alibabacloud-go-sdk」をご参照ください。
デフォルトでは、Go 向け IoT Platform SDK は $GOPATH/src/github.com/alibabacloud-go/iot-20180120 ディレクトリにインストールされます。
go env GOPATHコマンドを実行して、$GOPATH の値を取得できます。Go 向け IoT Platform SDK に依存関係が存在しない場合は、
go mod tidyコマンドを実行して依存関係をプルします。
go get github.com/alibabacloud-go/iot-20180120/v6
Go 向け IoT Platform SDK の初期化
config オブジェクトを作成して、SDK 初期化情報(AccessKey ID、AccessKey シークレット、リージョン ID など)を格納します。
iot.NewClient(config)メソッドを呼び出して、SDK 情報を読み込み、クライアントインスタンスを作成します。その後、SDK が初期化されます。
たとえば、中国 (上海) リージョンで SDK を使用する場合は、次のコードを使用して SDK を初期化できます。本番環境では、IoT Platform がアクティブ化されているリージョンを選択する必要があります。
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"
)
// アカウントの AccessKey を使用してクライアントを初期化します
// @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 シークレット。
AccessKeySecret: accessKeySecret,
}
// https://api.alibabacloud.com/product/Iot を参照してください。
config.Endpoint = tea.String("iot.cn-beijing.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 クレデンシャルを使用することをお勧めします。その他のクレデンシャルについては、https://www.alibabacloud.com/help/en/alibaba-cloud-sdk-262060/latest/configure-credentials-378661 を参照してください。
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 | Alibaba Cloud アカウントの AccessKey ID。 Alibaba Cloud 管理コンソールの AccessKey ペア ページにアクセスして、AccessKey ペアを作成または表示できます。 |
accessKeySecret | Alibaba Cloud アカウントの AccessKey シークレット。 |
RegionId | IoT Platform インスタンスが存在するリージョンの ID。リージョン ID は、サービスアクセス用のエンドポイントで使用されます。エンドポイントは iot.${RegionId}.aliyuncs.com 形式です。 IoT Platform コンソールの左上隅にリージョンが表示されます。 リージョン ID の形式の詳細については、「サポートされているリージョン」をご参照ください。 |
リクエストの開始
SDK は、各 API 操作に対して 2 つのクラスをカプセル化します。${API名}+"Request" 形式の名前を持つクラスはリクエストを示し、${API名}+"Response" 形式の名前を持つクラスはレスポンスを示します。
手順
SDK を初期化します。詳細については、「SDK の初期化」をご参照ください。
リクエスト インスタンスを生成することで API リクエストを作成します。インスタンスのクラス名は
${API 名}+"Request"形式です。request.${Request parameter}メソッドを request インスタンスで呼び出して、リクエストパラメーターを指定します。クラス名が レスポンス
${API名}+"Response"形式の${API名}(リクエスト)response インスタンスを作成して、レスポンスを取得します。client インスタンスの ${API名}(request) メソッドを呼び出して、API リクエストに対するレスポンスを取得します。レスポンスには、サーバーから返される と が含まれます。
IoT Platform の API 操作の詳細については、「関数別の操作リスト」をご参照ください。各 API 操作のリクエストパラメーターとレスポンスパラメーターの詳細については、API リファレンスをご参照ください。
次の例は、Pub 操作を呼び出してトピックにメッセージをパブリッシュする方法を示しています。リクエストパラメーターの詳細については、「Pub」をご参照ください。
次のサンプルコードでは、${iotInstanceId} はインスタンスの ID を指定します。IoT Platform コンソールの [概要] ページでインスタンスの ID を表示できます。
インスタンスに ID がある場合は、このパラメーターに ID を指定する必要があります。指定しないと、呼び出しは失敗します。
インスタンスに [概要] ページまたは ID が生成されていない場合は、このパラメーターを設定する必要はありません。IotInstanceId パラメーターに関連するリクエストコードを削除するか、パラメーターに空の文字列(
"")を指定する必要があります。指定しないと、呼び出しは失敗します。
IoT Platform インスタンスの詳細については、「概要」をご参照ください。インスタンスの購入方法の詳細については、「Enterprise Edition インスタンスの購入」をご参照ください。詳細については、「IoT Platform インスタンスに関するよくある質問」をご参照ください。
pubRequest := &iot20180120.PubRequest{
ProductKey: tea.String("${productKey}"),
IotInstanceId: tea.String("${iotInstanceId}"),
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
}
}()
// 実行するコードをコピーします。API の戻り値は自分で出力してください。
_, _err = client.PubWithOptions(pubRequest, runtime)
if _err != nil {
return _err
}
return nil
}()
完全なサンプルコード
ビジネスシナリオに基づいて、上記のパラメーターの値を実際の値に置き換えることができます。
// このファイルは自動生成されています。編集しないでください。ありがとうございます。
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"
)
// アカウントの AccessKey を使用してクライアントを初期化します
// @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 シークレット。
AccessKeySecret: accessKeySecret,
}
// https://api.alibabacloud.com/product/Iot を参照してください。
config.Endpoint = tea.String("iot.cn-beijing.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 クレデンシャルを使用することをお勧めします。その他のクレデンシャルについては、https://www.alibabacloud.com/help/en/alibaba-cloud-sdk-262060/latest/configure-credentials-378661 を参照してください。
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: tea.String("${productKey}"),
IotInstanceId: tea.String("${iotInstanceId}"),
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
}
}()
// 実行するコードをコピーします。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())
}
// 出力例のみです。例外処理に注意し、エンジニアリングプロジェクトで例外を直接無視しないでください。
// エラーメッセージを出力します
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)
}
}
付録:サンプルコード
IoT Platform SDK サンプルセンターで、API 操作のサンプルコードを表示またはダウンロードできます。Java、Python、PHP、Node.js、Go、C++、.NET 向けの SDK のサンプルコードが提供されています。
Alibaba Cloud OpenAPI Explorer は、API 操作のオンラインデバッグツールを提供します。[API デバッグ] ページで、API 操作を検索し、API 操作を呼び出し、さまざまな SDK の API 操作のサンプルコードを生成できます。ページの右側にある [サンプルコード] タブで、SDK のサンプルコードを表示できます。[デバッグ結果] タブで、実際の URL リクエストと JSON 形式のレスポンスを表示できます。API デバッグサンプルコードデバッグ結果