コンテンツへスキップ

非同期操作

一部の MoreLogin 操作は、基盤となるブラウザー、クラウドフォン、ファイル、アプリ、または RPA の実行が最終状態に達する前に処理を受け付けます。送信成功のレスポンスはリクエストが受理されたことを意味し、要求した状態にすでに到達したことを常に意味するわけではありません。

クライアントの状態モデル

状態意味クライアントの対応
送信済みAPI がコマンドを受理、またはタスクを作成した返された ID と requestId を保存する。同じ書き込みをすぐに再送しない
待機中または実行中下流の処理がまだ進行している文書化された状態/結果エンドポイントを間隔を広げながらポーリングする
成功対象のリソースまたはタスクが成功の終了状態に達したポーリングを止めて次の処理に進む
失敗状態/結果エンドポイントが失敗または終了状態のビジネスエラーを報告した自動リトライを停止し、ID、失敗内容、requestId を保持する
結果不明書き込みがタイムアウトした、または使用可能なレスポンスなしに接続が閉じた再試行するかを判断する前に、リソース/タスクの現在状態を照会する

ポーリングの原則

  • 約 1 秒から始め、2、4、8 秒と間隔を広げ、上限は 15〜30 秒とします。
  • ジッターを加え、複数のクライアントが同時にポーリングしないようにします。
  • 文書化された終了状態に達したら停止し、無期限にポーリングしないでください。
  • data: null を待機中と解釈するのは、そのエンドポイントが明示的にそう記載している場合のみです。
  • 書き込みの通信タイムアウトは失敗の証拠にはなりません。

文書化されたワークフロー

ワークフロー送信する操作観測する操作終了状態
クラウドブラウザーの開始/停止POST /cloudbrowser/start または /cloudbrowser/stopPOST /cloudbrowser/pageランタイムが目的の状態になる、または停止後に消える
クラウドフォンの電源POST /cloudphone/powerOn または /cloudphone/powerOffPOST /cloudphone/pageenvStatus=4 は起動済み、envStatus=2 は停止済み。1 は作成失敗
クラウドフォンのファイルアップロード署名付き URL にアップロードし、その後 POST /cloudphone/uploadFilePOST /cloudphone/uploadFileResultstatus=1 は成功、status=2 は失敗。data: nullstatus=0 は待機中
クラウドフォンのダウンロードPOST /cloudphone/downloadPOST /cloudphone/download/resultstatus=20 成功、30 失敗、40 キャンセル。10 は実行中
アプリのインストールPOST /cloudphone/app/installPOST /cloudphone/app/installedList対象パッケージがインストール済みアプリ一覧に現れる
RPA のスケジュール/実行POST /cloudphone/rpa/task/save または /onceTask/savePOST /cloudphone/rpa/task/page/subTask/page/subTask/detail/{id}taskState=2 完了または 3 キャンセル。handleResult を確認(0 失敗、1 成功)
ライブ配信POST /cloudphone/live/start または /live/endPOST /cloudphone/live/status配信の開始または停止が状態で確認できる
クラウドストレージのアップロードPOST /cloudstorage/upload/init の後にオブジェクトストアへ PUT必要な PUT がすべて成功した後に POST /cloudstorage/upload/complete完了リクエストが成功する。オブジェクトのアップロード成功前に complete を呼ばないこと

Local API の対応する操作は、文書化されている箇所で /api プレフィックスを使います。操作ごとの指針はエンドポイントの再試行と完了マトリクスを参照してください。

タイムアウト復旧の例

try:
    submit_operation()
except TimeoutError:
    # The write may already have succeeded.
    current = query_current_state()
    if current.is_terminal_success:
        pass
    elif current.is_pending:
        poll_until_terminal()
    else:
        decide_whether_retry_is_safe(current)

公開 API には現在、汎用の冪等キーヘッダーは定義されていません。したがってリソース ID、タスク ID、状態照会、requestId が安全な復旧に不可欠です。