Перейти до вмісту

Асинхронні операції

Деякі операції 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: null і status=0 — очікування
Завантаження з хмарного телефонаPOST /cloudphone/downloadPOST /cloudphone/download/resultstatus=20 успіх, 30 невдача або 40 скасовано; 10 — виконується
Установлення застосункуPOST /cloudphone/app/installPOST /cloudphone/app/installedListЗапитаний пакет з'являється у списку встановлених застосунків
Розклад/виконання RPAPOST /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 до об'єктного сховищаPOST /cloudstorage/upload/complete після успіху кожного потрібного PUTЗапит завершення успішний; ніколи не викликайте 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 критичні для безпечного відновлення.