CheckForUpdates

API-интерфейс/osc/checkForUpdates определяет состояние обновлений, сравнивая последнюю доступную контрольную сумму stateFingerprint с текущей контрольной суммой fingerprint на клиенте.

Ввод

Имя Тип Описание
stateFingerprint Строка Контрольная сумма состояния камеры при последнем вызове /osc/state или /osc/checkForUpdates.
waitTimeout Целое число (дополнительно) Количество секунд, в течение которого ожидается изменение состояния камеры до возврата ответа. Если ожидание waitTimeout истекло, камера должна вернуть ответ, даже если контрольная сумма не изменилась. Если изменение состояния обнаружено до истечения ожидания waitTimeout, а также если ожидание waitTimeout пропущено, камера должна немедленно вернуть ответ.Примечание. Камера может вернуть ответ до истечения ожидания waitTimeout, даже если контрольная сумма не изменилась, однакорекомендуется дождаться истечения waitTimeout.

Примечания по реализации для камеры:

  • При получении вызова камера сравнивает текущую контрольную сумму с полученным параметром stateFingerprint. Если контрольная сумма изменена, камера должна немедленно вернуть новую контрольную сумму.

Вывод

Имя Тип Описание
stateFingerprint Строка Новая контрольная сумма состояния камеры (совпадает с /osc/state API).
throttleTimeout Целое число Рекомендуемое количество секунд, в течение которого ожидается следующий вызов checkForUpdates. Клиенты могут отправлять запросы до истечения ожидания throttleTimeout, и камера, по возможности, должна разрешать преждевременные запросы.

Примечания по внедрению для клиента:

  • При получении ответа клиент должен сравнить полученную контрольную сумму stateFingerprint с ее копией. Если они не совпадают, клиент должен запросить текущее состояние камеры с помощью _/osc/state API.
  • Смарт-клиенты будут регулировать подачу запросов независимо от ответа камеры. Например, если камера возвращает нестандартный ответ (если нет изменений то сразу, с нулевым или минимальным ожиданием throttleTimeout), клиент должен установить собственное ожидание throttleTimeout до выполнения повторного запроса checkForUpdates с камеры.

Примечания по реализации для камеры:

  • При ответе на checkForUpdates камера должна определить разумное время ожидания throttleTimeout. Если камера поддерживает долгосрочную логику выполнения запросов (ответ только после ожидания waitTimeout, если состояние не изменилось), то можно возвращать для ожидания throttleTimeout значение 0. В этом случае клиенты могут немедленно запрашивать обновления.
  • Если камера поддерживает только быстрые ответы (не рекомендуется), она должна вернуть разумное время throttleTimeout во избежание непрерывного трафика запросов-ответов от клиента. Например, разумным временем throttleTimeout будет 60 секунд, что позволит выполнять один запрос в минуту.
  • Оптимальным решением будет вернуть throttleTimeout, соответствующий возможностям камеры. Если сервер не может определить соответствующее время throttleTimeout из-за возникающей на нем ошибки, камера должна вернуть код состояния 5XX и тело JSON с кодом ошибки serverError.

Ошибка

Код ошибки Описание
missingParameter stateFingerprint не указано.
invalidParameterName Одно или несколько имен параметров не распознано.
invalidParameterValue Имена параметров распознаны, но одно или несколько значений не являются допустимыми; например, ожидание waitTimeout находится вне разрешенного диапазона или имеет неверный тип.
serverError Серверу не удалось определить соответствующее значение ожидания throttleTimeout для ответа. Ошибка сервера будет указана с помощью значения 5XX в ответе. Производители камеры должны предоставить таблицу кодов 5XX и соответствующих им состояний сервера.

Пример

Запрос
POST /osc/checkForUpdates HTTP/1.1
Host: [camera ip address]:[httpUpdatesPort]
Content-Type: application/json;charset=utf-8
Accept: application/jsonContent-Length: {CONTENT_LENGTH}
X-XSRF-Protected: 1

{
    "stateFingerprint": "12EGA33",
    "waitTimeout": 300
}
Ответ
HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Content-Length: {CONTENT_LENGTH}
X-Content-Type-Options: nosniff

{
    "stateFingerprint": "12EGA86",
    "throttleTimeout": 60
}
Запрос
POST /osc/checkForUpdates HTTP/1.1
Host: [camera ip address]:[httpUpdatesPort]
Content-Type: application/json;charset=utf-8
Accept: application/jsonContent-Length: {CONTENT_LENGTH}
X-XSRF-Protected: 1

{
    "stateFingerprint": "12EGA33",
    "waitTimeout": 300
}
Ответ
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8
Content-Length: {CONTENT_LENGTH}
X-Content-Type-Options: nosniff

{
    "name": "camera.checkForUpdates",
    "state": "error",
    "error": {
        "code": "missingParameter",
        "message": "parameter stateFingerprint is missing."
    }
}