רשומות למידה
RODMENA LRS
בקרובמאגר הראיות של הלמידה: מה שקרה, נרשם פעם אחת ונשמר בדיוק כפי שהוא.
RODMENA LRS הוא מאגר רשומות למידה (Learning Record Store): הוא מקבל רשומות של פעילות למידה בפורמט xAPI, מאחסן אותן ללא שינוי, ומחזיר אותן דרך ממשק השאילתות הסטנדרטי של xAPI. הוא עובר כל בדיקה ב-ADL LRS Conformance Test Suite עבור xAPI 1.0.3 ו-xAPI 2.0. הרשומות של כל לקוח מבודדות מאלה של כל לקוח אחר בתוך מסד הנתונים עצמו. תוכן הרשומות מוצפן במנוחה, ומזהי לומדים נשמרים רק בצורה פסאודונימית עם מפתח. לא ניתן לשנות רשומות מאוחסנות; ניתן למחוק את הנתונים האישיים של לומד לפי בקשה, וכל מחיקה נרשמת ביומן שבו ניתן לזהות שיבוש.
למי זה מיועד. פלטפורמות למידה וספקי הדרכה שזקוקים למאגר תואם תקן לשמירת רשומות פעילות של לומדים. זהו שירות צד שרת (back-end): מוצרים נבנים עליו ופונים אליו מהשרתים שלהם. לומדים ודפדפנים אינם מתקשרים איתו ישירות. REES הוא הצרכן הראשון שלו.
- סטטוס
- בקרוב
- חלק מ
- היצע
- רישיון
- קנייני. זכויות יוצרים RODMENA LIMITED, כל הזכויות שמורות.
- תאימות
- 1,365 בדיקות תאימות xAPI 1.0.3, כולן עברו
- 1,435 בדיקות תאימות xAPI 2.0, כולן עברו
- אומת ב-23 בספטמבר 2026
- תגיות
- xAPIרשומות למידהתאימותמרובה לקוחות (multi-tenant)הגנת נתוניםיומן ביקורת
מפרט טכני
נמסר עבור מעריך טכני. שורה ללא ערך מדוד מושמטת.
תקנים
- xAPI 1.0.3
- ADL Experience API Specification, גרסה 1.0.3
- xAPI 2.0
- IEEE 9274.1.1-2023
- בחירת גרסה
- לפי בקשה, באמצעות הכותרת X-Experience-API-Version. 1.0.x ו-2.0.x מתקבלות; גרסה חסרה או לא מוכרת נדחית עם 400.
- חבילת בדיקות תאימות
- ADL LRS Conformance Test Suite, הרצה אחרונה 23 בספטמבר 2026
- תוצאת תאימות
- xAPI 1.0.3: 1,365 מתוך 1,365. xAPI 2.0: 1,435 מתוך 1,435.
- מעבר לחבילת הבדיקות
- דרישות שחבילת הבדיקות מצהירה שאינה בודקת מכוסות כל אחת בבדיקה ייעודית. שש בדיקות בחבילה שאינן מאמתות דבר זוהו וכוסו בנפרד.
- מעצם התכנון
- OAuth 1.0 אינו מתקבל, משום שהוא הוצא משימוש (deprecated). המוצרים הבנויים על השירות פונים אליו בתקשורת שרת-לשרת, והוא אינו מקבל קריאות חוצות מקור (cross-origin) מדפדפן.
ממשק
- משאבים
- Statements, State, Activity Profile, Agent Profile, Activities, Agents ו-About, עם HEAD בכל נתיב GET.
- אימות
- HTTP Basic עם אישורי גישה שהשירות מנפיק. סודות של 256 סיביות, הנשמרים רק כמאמת עם מפתח. אישורי גישה לא מוכרים, מושבתים או שפג תוקפם מקבלים תגובות 401 זהות לחלוטין ברמת הבתים.
- Alternate Request Syntax
- נתמך תחת 1.0.3 ונדחה תחת 2.0, כפי שמחייב מפרט זה.
- רשומות statement חתומות
- JWS עם RS256, RS384 ו-RS512, מאומת כאשר תעודה כלולה.
- קבצים מצורפים
- multipart/mixed, מותאם לפי גיבוב SHA-2. 5 MiB לכל קובץ מצורף ו-1 MiB לכל גוף של רשומת statement, ושניהם ניתנים להגדרה.
- עימוד
- סמנים (cursors) חסרי מצב וחתומים שנשארים תקפים גם לאחר הפעלה מחדש, עם כותרת העקביות של xAPI בכל תגובת statements.
- אידמפוטנטיות
- שליחה חוזרת של רשומה עם מזהה statement זהה מתקבלת ללא כפילות. רשומה סותרת נדחית עם 409.
- הגבלת קצב
- לכל אישור גישה, עם תקציב נפרד לניסיונות אימות כושלים לכל כתובת IP של לקוח.
בידוד ואבטחה
- בידוד לקוחות (tenants)
- אבטחה ברמת השורה של PostgreSQL, מופעלת ונאכפת בכפייה על כל טבלה המחזיקה נתוני לקוחות (tenants). תפקיד מסד הנתונים של היישום אינו הבעלים של אף אובייקט ואינו יכול לעקוף אותה. כל טרנזקציה מזהה את הלקוח שלה מתוך אישור הגישה המאומת בלבד.
- בידוד, נאכף
- בדיקת קטלוג מכשילה את הבנייה אם טבלת לקוחות כלשהי, או מחיצה כלשהי שנוצרה בזמן ריצה, חסרה את המדיניות.
- הצפנה במנוחה
- AES-256-GCM על גופי רשומות ה-statement, מסמכים, קבצים מצורפים, הגדרות פעילות וזהויות אישורי גישה, תחת מפתח לכל רשומה הנגזר באמצעות HKDF-SHA256.
- קישור טקסט מוצפן
- כל טקסט מוצפן נקשר לזהות השורה שלו, כך שלא ניתן להעבירו לשורה אחרת ולפענח אותו.
- משמורת מפתחות
- שלושה מפתחות המוחזקים מחוץ למסד הנתונים, בקבצי מפתח בהרשאות 0600 או בסביבה. אין מפתח ברירת מחדל, והשירות מסרב לעלות בלעדיהם.
- החלפת מפתחות (rotation)
- מפתח האינדקס מוחלף באמצעות הצפנה מחדש לא מקוונת הניתנת לחידוש, והחלפת המפתח של אישורי הגישה מנפיקה אותם מחדש. כל רשומה שומרת את המזהה של המפתח שכתב אותה, כך שהחלפה אינה מחייבת העברת נתונים.
- מזהי לומדים
- נשמרים רק כאסימוני HMAC-SHA256 תחת מפתח נפרד לכל לקוח (tenant), כך שאותו לומד אצל שני לקוחות מפיק אסימונים שאינם קשורים זה לזה. אין עמודה שמחזיקה זהות לומד בטקסט גלוי.
- היקפי אישורי גישה
- מערך ההיקפים של xAPI: statements/write, statements/read, statements/read/mine, state, profile, all/read ו-all. ההיקף הצר ביותר קורא רק את רשומות ה-statement שאישור הגישה עצמו כתב.
- אי-ניתנות לשינוי
- רשומות statement וקבצים מצורפים ניתנים להוספה בלבד (append-only), והדבר נאכף על ידי טריגרים במסד הנתונים שדוחים UPDATE, DELETE ו-TRUNCATE. השינויים המותרים היחידים הם סימון הביטול (voiding) ומחיקה.
- תעבורת מסד נתונים
- חובה להשתמש ב-TLS עם אימות מלא של התעודה ושל שם המארח; אחרת השירות מסרב לעלות.
- אירועי ביקורת לכל בקשה
- אירוע מובנה אחד לכל בקשה, הכולל מזהה בקשה, מזהה המפתח של אישור הגישה, לקוח (tenant), מתודת HTTP, משאב, סטטוס, מספר רשומות, משך ושמות מסננים. ערכי לומדים במסננים עוברים טוקניזציה לפני שהם נרשמים ביומן.
- זיהוי שיבוש (tamper evidence)
- יומן המחיקה משורשר בגיבוב, ופקודה אחת מאמתת את כל השרשרת מקצה לקצה.
הגנת נתונים
- מחיקה
- השחרה באמצעות פסאודונימיזציה. הלומד מוחלף בפסאודונים אקראי בכל מקום שבו רשומת statement יכולה לציין אותו, תגובות בטקסט חופשי וקבצים מצורפים מוסרים, ומסמכי ה-State וה-Agent Profile שלו נמחקים. לא מתבצעת מחיקה פיזית.
- מחיקה, מתועדת
- כל מחיקה נכתבת ליומן המשורשר בגיבוב. הפקודה מסרבת למחיקה שאינה תואמת דבר, כך שלומד שהוקלד בטעות אינו יכול להיראות כמחיקה שהושלמה.
- גיבויים
- מחיקה נחשבת שלמה רק לאחר שפג תוקפם של הגיבויים שנוצרו לפניה. לאחר שחזור, יומן המחיקות מורץ מחדש.
- שימור
- לפי חודש קלנדרי, לכל מופע. החודש מנותק, מיוצא כקובץ אחד לכל לקוח (tenant), ומוסר. ההסרה נדחית אלא אם מספר השורות שיוצאו תואם.
- שימור, לפי לקוח
- לקוח שזקוק לתקופת שימור משלו זקוק למופע משלו.
- ייצוא בעת יציאה
- ממשק ה-xAPI התקני. לקוח יכול לדפדף בכל רשומה כ-xAPI JSON, עם הקבצים המצורפים שלה, ולקחת את הכול.
- מיקום נתונים
- מופע פועל באזור שחוזה מחייב. השירות זקוק רק למסד נתונים PostgreSQL.
תפעול ואימות
- מודל פריסה
- מופע משותף מרובה לקוחות (multi-tenant), או מופע ייעודי לכל לקוח.
- בדיקות מוכיחות שהן יכולות להיכשל
- כל אחת מ-47 בדיקות ההתנהגות חייבת להיכשל באופן מוכח (FAIL) מול בנייה שנשברה במכוון לפני שהצלחתה נספרת, ומערך הבדיקות (harness) אוכף זאת. חבילת בדיקות התאימות מורצת מול בנייות שבורות מאותה סיבה.
מה זה עושה
-
נבדק לתאימות
עובר את כל 1,365 הבדיקות של ADL LRS Conformance Test Suite עבור xAPI 1.0.3, ואת כל 1,435 עבור xAPI 2.0.
-
רשומות אינן משתנות
לאחר שנשמרה, לא ניתן לערוך או לדרוס רשומת statement, אלא רק לבטל אותה (void), כפי שהתקן מגדיר.
-
מבודד מעצם התכנון
הרשומות של כל לקוח מופרדות על ידי כללים הנאכפים במסד הנתונים, ולא רק על ידי קוד היישום.
-
מוצפן ופסאודונימי
תוכן הרשומות מוצפן במנוחה, ומזהי הלומדים נכללים באינדקס רק כאסימונים עם מפתח.
-
מחיקה עם יומן ביקורת
הנתונים האישיים של לומד מוסרים מהרשומות שלו לפי בקשה, וכל מחיקה נרשמת ביומן משורשר בגיבוב שבו ניתן לזהות שיבוש.
-
אישורי גישה מוגבלי היקף
כל אישור גישה מוגבל לפעולות שהוא זקוק להן, עד כדי קריאה של הרשומות שהוא עצמו כתב בלבד.
לתיעוד, לפיילוט או לאינטגרציה, צרו קשר.