本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
實作 C2C 連接器界面操作
的受管整合 AWS IoT Device Management 定義了 AWS Lambda 您必須處理的四個操作,才能符合連接器的資格。您的 C2C 連接器必須實作下列每個操作:
-
AWS.ActivateUser- AWS IoT Device Management 服務的受管整合會呼叫此 API,以擷取全域唯一使用者識別符。對於 OAuth 2.0,這與提供的 OAuth 2.0 字符相關聯。此操作可以選擇性地用於執行帳戶連結程序的任何其他需求。 -
AWS.DiscoverDevices- AWS IoT Device Management 服務的受管整合會將此 API 呼叫您的連接器,以探索使用者的裝置 -
AWS.SendCommand- AWS IoT Device Management 服務的受管整合會將此 API 呼叫您的連接器,以傳送使用者裝置的命令 -
AWS.DeactivateUser- AWS IoT Device Management 服務的受管整合會將此 API 呼叫您的連接器,以停用使用者的存取權杖,以在授權伺服器中取消連結。
調用詳細資訊
的受管整合 AWS IoT Device Management 一律會透過 AWS Lambda invokeFunction動作,使用 JSON 字串承載叫用 Lambda 函數。請求操作必須在每個請求承載中包含 operationName 欄位。
調用設定:
-
逾時:每次調用 2 秒
-
重試:失敗時嘗試 5 次重試
實作範例
您為連接器實作的 Lambda 會從operationName請求承載剖析 ,並實作對應至第三方雲端的對應功能:
public ConnectorResponse handleRequest(final ConnectorRequest request) throws OperationFailedException { Operation operation; try { operation = Operation.valueOf(request.payload().operationName()); } catch (IllegalArgumentException ex) { throw new ValidationException( "Unknown operation '%s'".formatted(request.payload().operationName()), ex ); } return switch (operation) { case ActivateUser -> activateUserManager.activateUser(request); case DiscoverDevices -> deviceDiscoveryManager.listDevices(request); case SendCommand -> sendCommandManager.sendCommand(request); case DeactivateUser -> deactivateUser.deactivateUser(request); }; }
注意
連接器的開發人員必須實作上述範例中列出的 activateUserManager.activateUser(request)、sendCommandManager.sendCommand(request)、 deviceDiscoveryManager.listDevices(request)和 deactivateUser.deactivateUser操作。
請求格式範例
下列範例詳細說明來自 受管整合的一般連接器請求,其中每個必要界面的常見欄位都存在。從範例中,您可以看到同時有一個請求標頭和請求承載。請求標頭在每個操作界面中都是常見的。
OAuth 2.0 範例:
{ "header": { "auth": { "token": "ashriu32yr97feqy7afsaf", "type": "OAuth2.0" } }, "payload":{ "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "exampleId", … } }
一般授權範例:
{ "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } }, "payload":{ "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "exampleId", … } }
預設請求標頭
預設標頭欄位會根據授權類型而有所不同。連接器必須同時處理 OAuth 2.0 和一般授權請求標頭。
OAuth 2.0 預設標頭:
{ "header": { "auth": { "token": string, // End user's Access Token "type": "OAuth2.0" } } }
一般授權預設標頭:
{ "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } } }
| 欄位 | 必要/選用 | Description |
|
|
是 |
C2C 連接器建置器在連接器註冊期間提供的授權資訊。 |
|
|
有條件 |
第三方雲端提供者產生並連結至 之使用者的授權字符 |
|
|
有條件 |
AWS Secrets Manager 包含授權登入資料的 ARN 和版本 ID。一般授權需要,OAuth 2.0 不存在。 |
|
|
是 |
授權的類型: |
注意
對連接器的所有請求都會包含授權資訊。對於 OAuth 2.0,這包含最終使用者的存取字符。對於一般授權,這包括 AWS Secrets Manager ARN 和版本 ID。您可以假設已建立適當的授權。
請求承載
除了常見的標頭,每個請求都會有承載。雖然此承載的每個操作類型都有唯一的欄位,但每個承載都有一組永遠存在的預設欄位。
請求承載欄位:
-
operationName:指定請求的操作,等於下列其中一個值:AWS.ActivateUser、AWS.SendCommand、AWS.DiscoverDevices、AWS.DeactivateUser。 -
operationVersion:每個操作都會進行版本化,以允許其隨著時間演進,並為第三方連接器提供穩定的界面定義。受管整合會傳遞所有請求承載中的版本欄位。 -
connectorId:已傳送請求的連接器 ID。
預設回應標頭
每個操作都會使用 回應 AWS IoT Device Management 的ACK受管整合,以確認您的 C2C 連接器已收到請求並開始處理。
範例一般回應範例
{ "header":{ "responseCode": 200 }, "payload":{ "responseMessage": “Example response!” } }
範例回應標頭格式
{ "header": { "responseCode": Integer } }
回應標頭欄位
| 欄位 | 必要/選用 | 註解 |
|
|
是 |
表示請求執行狀態的值 ENUM。 |
在本文件所述的各種連接器界面和 API 結構描述中,都有 responseMessage或 Message 欄位。這是選用欄位,用於 C2C 連接器 Lambda 回應有關請求及其執行的任何內容。最好是,導致 狀態碼 以外的任何錯誤200都應該包含描述錯誤的訊息值。
使用 SendConnectorEvent API 回應 C2C 連接器操作請求
的受管整合 AWS IoT Device Management 預期您的連接器會針對每個 AWS.SendCommand和 AWS.DiscoverDevices操作以非同步方式運作。這表示對這些操作的初始回應只是「認可」您的 C2C 連接器已收到請求。
使用 SendConnectorEvent API,預期您的連接器會從以下清單中傳送 AWS.DiscoverDevices和 AWS.SendCommand操作的事件類型,以及主動裝置事件 (例如手動開啟和關閉的光源)。
範例工作流程
如果您的 C2C 連接器收到DiscoverDevices請求, 的受管整合 AWS IoT Device Management 預期會:
-
以上述定義的回應格式同步回應
-
使用 DEVICE_DISCOVERY 事件叫用
SendConnectorEventAPI
您可以在可存取 C2C 連接器 Lambda AWS 帳戶 登入資料的任何位置進行 SendConnectorEvent API 呼叫。在 AWS IoT Device Management 的受管整合收到此事件之前,裝置探索流程不會成功。
注意
或者,如有必要,SendConnectorEventAPI 呼叫可以在 C2C 連接器 Lambda 調用回應之前進行。不過,此流程與軟體開發的非同步模型相衝突。
SendConnectorEvent API
連接器會呼叫 AWS IoT Device Management API 的受管整合來傳送裝置事件。只接受 3 種類型的事件:
-
"DEVICE_DISCOVERY" - 用於為特定存取字符在第三方雲端內傳送探索的裝置清單
-
"DEVICE_COMMAND_RESPONSE" - 用來傳送特定裝置事件作為命令執行的結果
-
"DEVICE_EVENT" - 用於來自裝置的任何事件,這不是使用者型命令的直接結果。這可以做為一般事件類型,主動報告裝置狀態變更或通知