تحدِّد واجهة برمجة التطبيقات /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.
- وستقلل البرامج الذكية الطلبات بغض النظر عن استجابة الكاميرا. على سبيل المثال، إذا عرضت كاميرا استجابة غير عادية (فورًا، وبدون أي تغيير مع عرض منخفض أو 0
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."
}
} |