ה-API של /osc/checkForUpdates
מזהה עדכוני מצב על ידי השוואה בין stateFingerprint
הידוע האחרון של הלקוח לבין fingerprint
הנוכחי של המצלמה.
שם |
סוג |
תיאור |
stateFingerprint |
מחרוזת |
טביעת אצבע של מצב המצלמה מהפעם האחרונה שהלקוח התקשר אל /osc/state או /osc/checkForUpdates . |
waitTimeout |
מספר שלם (אופציונלי) |
מספר השניות להמתנה לשינוי המצב במצלמה לפני החזרת התגובה. כשהתוקף של waitTimeout יפוג, המצלמה אמורה להחזיר תגובה גם אם טביעת האצבע לא השתנתה. אם מזוהה שינוי במצב לפני שהתוקף של waitTimeout פג, או אם waitTimeout לא מופיע, המצלמה יכולה להחזיר תגובה באופן מיידי.הערה: המצלמה יכולה להחזיר תגובה לפני שפג התוקף של waitTimeout , גם אם טביעת האצבע לא השתנתה, אבל השיטה המומלצת היא לחכות עד שתוקף waitTimeout יפוג. |
הערות להטמעת המצלמה:
- לאחר קבלת השיחה, המצלמה משווה בין טביעת האצבע של המצב הנוכחי שלה לבין הפרמטר
stateFingerprint
שהתקבל. אם טביעת האצבע השתנתה, המצלמה חייבת להחזיר באופן מיידי את טביעת האצבע החדשה.
פלט
שם |
סוג |
תיאור |
stateFingerprint |
מחרוזת |
טביעת אצבע חדשה למצב המצלמה (כמו ב-API של /osc/state ). |
throttleTimeout |
מספר שלם |
מספר השניות המומלץ ללקוח להמתנה לפני שיחת checkForUpdates הבאה. הלקוחות יכולים לשלוח בקשות לפני שהתוקף של throttleTimeout פג, והמצלמות צריכות לאפשר את הבקשות המוקדמות האלה אם אפשר. |
הערות להטמעת לקוח:
- עם קבלת תשובה, הלקוח צריך להשוות את
stateFingerprint
שהתקבל לעותק שלו. אם הם לא תואמים, הלקוח צריך לבקש את המצב הנוכחי של המצלמה באמצעות ה-API של _/osc/state
.
- לקוחות חכמים יבצעו ויסות נתונים (throttle) לבקשות ללא קשר לתגובת המצלמה. לדוגמה, אם מצלמה מחזירה תגובה לא רגילה באופן מיידי, עם ללא שינוי ועם ערך
throttleTimeout)
נמוך או 0, הלקוח צריך להגדיר 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."
}
} |