trustgraph/docs/tech-specs/graphql-query.he.md
Alex Jenkins f95fd4f052
Feat: TrustGraph i18n & Documentation Translation Updates (#781)
Native CLI i18n: The TrustGraph CLI has built-in translation support
that dynamically loads language strings. You can test and use
different languages by simply passing the --lang flag (e.g., --lang
es for Spanish, --lang ru for Russian) or by configuring your
environment's LANG variable.

Automated Docs Translations: This PR introduces autonomously
translated Markdown documentation into several target languages,
including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew,
Arabic, Simplified Chinese, and Russian.
2026-04-14 12:07:58 +01:00

465 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: default
title: "GraphQL Query Technical Specification"
parent: "Hebrew (Beta)"
---
# GraphQL Query Technical Specification
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
## Overview
<<<<<<< HEAD
מפרט זה מתאר את יישום ממשק שאילתות GraphQL עבור אחסון נתונים מובנים של TrustGraph ב-Apache Cassandra. בהתבסס על יכולות הנתונים המובנים המתוארות במפרט structured-data.md, מסמך זה מפרט כיצד שאילתות GraphQL יבוצעו כנגד טבלאות Cassandra המכילות אובייקטים מובנים שחולצו והועברו.
=======
מפרט זה מתאר את יישום ממשק שאילתות GraphQL עבור אחסון נתונים מובנים של TrustGraph ב-Apache Cassandra. בהתבסס על יכולות הנתונים המובנים המתוארות במפרט structured-data.md, מסמך זה מפרט כיצד שאילתות GraphQL יבוצעו כנגד טבלאות Cassandra המכילות אובייקטים מובנים שחולצו ויועברו.
>>>>>>> 82edf2d (New md files from RunPod)
שירות שאילתות GraphQL יספק ממשק גמיש ובטוח טיפוסית לשאילתות נתונים מובנים המאוחסנים ב-Cassandra. הוא יסתגל באופן דינמי לשינויים בסכימה, יתמוך בשאילתות מורכבות כולל קשרים בין אובייקטים, וישתלב בצורה חלקה עם ארכיטקטורת העברת הודעות הקיימת של TrustGraph.
## Goals
**תמיכה דינמית בסכימה**: הסתגלות אוטומטית לשינויים בסכימה בתצורה ללא אתחולים מחדש של השירות
<<<<<<< HEAD
**עמידה בתקני GraphQL**: מתן ממשק GraphQL סטנדרטי התואם לכלי לקוחות GraphQL קיימים
**שאילתות Cassandra יעילות**: המרת שאילתות GraphQL לשאילתות CQL יעילות של Cassandra תוך כיבוד מפתחות מחיצה ואינדקסים
**פתרון קשרים**: תמיכה במאפייני פותרים עבור קשרים בין סוגי אובייקטים שונים
**בטיחות טיפוסים**: הבטחת ביצוע שאילתות ובניית תגובות בצורה בטוחה טיפוסית בהתבסס על הגדרות סכימה
**ביצועים ניתנים להרחבה**: טיפול יעיל בשאילתות מקבילות עם ניהול חיבורים מתאים ואופטימיזציה של שאילתות
=======
**עמידה בתקני GraphQL**: מתן ממשק GraphQL סטנדרטי התואם לכלי ולקוחות GraphQL קיימים
**שאילתות Cassandra יעילות**: המרת שאילתות GraphQL לשאילתות CQL יעילות של Cassandra תוך כיבוד מפתחות מחיצה ואינדקסים
**פתרון קשרים**: תמיכה בפתרוני שדות עבור קשרים בין סוגי אובייקטים שונים
**בטיחות טיפוסים**: הבטחת ביצוע שאילתות ובניית תגובות בצורה בטוחה טיפוסית בהתבסס על הגדרות סכימה
**ביצועים ניתנים להרחבה**: טיפול יעיל בשאילתות מקבילות עם ניהול בריכת חיבורים ואופטימיזציה של שאילתות
>>>>>>> 82edf2d (New md files from RunPod)
**אינטגרציה של בקשות/תגובות**: שמירה על תאימות לדפוס בקשות/תגובות המבוסס על Pulsar של TrustGraph
**טיפול בשגיאות**: מתן דיווח מקיף על שגיאות עבור חוסר התאמה בסכימה, שגיאות שאילתות ובעיות אימות נתונים
## Background
<<<<<<< HEAD
יישום אחסון הנתונים המובנים (trustgraph-flow/trustgraph/storage/objects/cassandra/) כותב אובייקטים לטבלאות Cassandra בהתבסס על הגדרות סכימה המאוחסנות במערכת התצורה של TrustGraph. טבלאות אלה משתמשות במבנה מפתח מחיצה מורכב עם אוספים ומפתחות ראשיים המוגדרים בסכימה, המאפשרות שאילתות יעילות בתוך אוספים.
מגבלות קיימות שספציפיקציה זו מתייחסת אליהן:
=======
יישום אחסון הנתונים המובנים (trustgraph-flow/trustgraph/storage/objects/cassandra/) כותב אובייקטים לטבלאות Cassandra בהתבסס על הגדרות סכימה המאוחסנות במערכת התצורה של TrustGraph. טבלאות אלה משתמשות במבנה מפתח מחיצה מורכב עם אוספים ומפתחות ראשיים המוגדרים בסכימה, המאפשרים שאילתות יעילות בתוך אוספים.
מגבלות נוכחיות שמתפרט זה מטפל בהן:
>>>>>>> 82edf2d (New md files from RunPod)
אין ממשק שאילתות עבור הנתונים המובנים המאוחסנים ב-Cassandra
חוסר יכולת לנצל את יכולות השאילתות החזקות של GraphQL עבור נתונים מובנים
חוסר תמיכה במעבר על קשרים בין אובייקטים קשורים
היעדר שפה סטנדרטית לגישה לנתונים מובנים
שירות שאילתות GraphQL יסגור את הפערים הללו על ידי:
מתן ממשק GraphQL סטנדרטי לשאילתות של טבלאות Cassandra
יצירת סכימות GraphQL באופן דינמי מתצורה של TrustGraph
המרת יעילה של שאילתות GraphQL לשאילתות CQL של Cassandra
<<<<<<< HEAD
תמיכה בפתרון קשרים באמצעות פותרים של שדות
=======
תמיכה בפתרון קשרים באמצעות פתרוני שדות
>>>>>>> 82edf2d (New md files from RunPod)
## Technical Design
### Architecture
שירות שאילתות GraphQL ייושם כמעבד זרימה חדש של TrustGraph תוך שימוש בדפוסים מבוססים:
**מיקום מודול**: `trustgraph-flow/trustgraph/query/objects/cassandra/`
**רכיבים מרכזיים**:
1. **מעבד שירות שאילתות GraphQL**
מרחיב את מחלקת FlowProcessor הבסיסית
מיישם דפוס בקשה/תגובה הדומה לשירותי שאילתות קיימים
מנטר את התצורה עבור עדכוני סכימה
שומר על סכימת GraphQL מסונכרנת עם התצורה
<<<<<<< HEAD
2. **מחולל סכימה דינמי**
ממיר הגדרות RowSchema של TrustGraph לטיפוסי GraphQL
יוצר טיפוסי אובייקטים של GraphQL עם הגדרות שדות מתאימות
מייצר טיפוס שורש Query עם פותרים מבוססי אוספים
=======
2. **מחולל סכימה דינמית**
ממיר הגדרות RowSchema של TrustGraph לסוגי GraphQL
יוצר סוגי אובייקטים של GraphQL עם הגדרות שדות מתאימות
מייצר סוג שאילתא ראשי עם פותרים מבוססי אוספים
>>>>>>> 82edf2d (New md files from RunPod)
מעדכן את סכימת GraphQL כאשר התצורה משתנה
3. **מבצע שאילתות**
מנתח שאילתות GraphQL נכנס באמצעות ספריית Strawberry
מאמת שאילתות כנגד הסכימה הנוכחית
מבצע שאילתות ומחזיר תגובות מובנות
מטפל בשגיאות בצורה אלגנטית עם הודעות שגיאה מפורטות
4. **מתרגם שאילתות Cassandra**
ממיר בחירות GraphQL לשאילתות CQL
מייעל שאילתות בהתבסס על אינדקסים ומפתחות מחיצה זמינים
מטפל בסינון, דפוס ומיון
<<<<<<< HEAD
מנהל ניהול חיבורים ומחזור חיים של סשן
5. **פותר קשרים**
מיישם פותרים של שדות עבור קשרים בין אובייקטים
=======
מנהל ניהול בריכת חיבורים ומחזור חיים של סשן
5. **פתרון קשרים**
מיישם פתרוני שדות עבור קשרים בין אובייקטים
>>>>>>> 82edf2d (New md files from RunPod)
מבצע טעינה באצווה יעילה כדי למנוע שאילתות N+1
שומר על קשרים פתורים בהקשר הבקשה
תומך במעבר קשרים קדימה ואחורה
### ניטור סכימת תצורה
השירות יירשם למטפל תצורה כדי לקבל עדכוני סכימה:
```python
self.register_config_handler(self.on_schema_config)
```
כאשר סכימות משתנות:
1. ניתוח הגדרות סכימה חדשות מקובץ התצורה
2. יצירת סוגי GraphQL ופתרונות (resolvers) מחדש
3. עדכון הסכימה הביצועית
4. ניקוי מטמון כלשהו התלוי בסכימה
### יצירת סכימת GraphQL
עבור כל RowSchema בתצורה, יוצרים:
1. **סוג אובייקט GraphQL**:
מיפוי סוגי שדות (string → String, integer → Int, float → Float, boolean → Boolean)
סימון שדות חובה כלא-nullable ב-GraphQL
הוספת תיאורי שדות מהסכימה
2. **שדות שאילתה ראשיים**:
שאילתת אוסף (לדוגמה, `customers`, `transactions`)
ארגומנטים לסינון המבוססים על שדות עם אינדקס
תמיכה בדפוס של "paginate" (limit, offset)
אפשרויות מיון עבור שדות הניתנים למיון
3. **שדות יחסים**:
זיהוי יחסי מפתח זר מהסכימה
יצירת פתרונות (resolvers) עבור אובייקטים קשורים
תמיכה הן ביחסי אובייקט בודד והן ביחסי רשימה
### זרימת ביצוע שאילתות
1. **קבלת בקשה**:
קבלת ObjectsQueryRequest מ-Pulsar
חילוץ מחרוזת שאילתת GraphQL ומשתנים
זיהוי משתמש והקשר של אוסף
2. **אימות שאילתה**:
ניתוח שאילתת GraphQL באמצעות Strawberry
אימות מול הסכימה הנוכחית
בדיקת בחירות שדות וסוגי ארגומנטים
3. **יצירת CQL**:
ניתוח בחירות GraphQL
בניית שאילתת CQL עם סעיפי WHERE מתאימים
הכללת האוסף במפתח מחיצה
החלת פילטרים המבוססים על ארגומנטים של GraphQL
4. **ביצוע שאילתה**:
ביצוע שאילתת CQL נגד Cassandra
מיפוי תוצאות למבנה תגובת GraphQL
פתרון כל שדות היחסים
עיצוב התגובה בהתאם למפרט של GraphQL
5. **העברת תגובה**:
יצירת ObjectsQueryResponse עם תוצאות
הכללת כל שגיאות הביצוע
שליחת תגובה דרך Pulsar עם מזהה מתאם
### מודלים של נתונים
<<<<<<< HEAD
> **הערה**: קיימת סכימת StructuredQueryRequest/Response קיימת ב-`trustgraph-base/trustgraph/schema/services/structured_query.py`. עם זאת, היא חסרה שדות קריטיים (משתמש, אוסף) ומשתמשת בסוגים לא אופטימליים. הסכימות שלהלן מייצגות את ההתפתחות המומלצת, שעליה להחליף את הסכימות הקיימות או ליצור סוגי ObjectsQueryRequest/Response חדשים.
=======
> **הערה**: קיימת סכימת StructuredQueryRequest/Response קיימת ב-`trustgraph-base/trustgraph/schema/services/structured_query.py`. עם זאת, היא חסרה שדות קריטיים (משתמש, אוסף) ומשתמשת בסוגים לא אופטימליים. הסכימות שלהלן מייצגות את ההתפתחות המומלצת, שעשויה להחליף את הסכימות הקיימות או ליצור סוגי ObjectsQueryRequest/Response חדשים.
>>>>>>> 82edf2d (New md files from RunPod)
#### סכימת בקשה (ObjectsQueryRequest)
```python
from pulsar.schema import Record, String, Map, Array
class ObjectsQueryRequest(Record):
user = String() # Cassandra keyspace (follows pattern from TriplesQueryRequest)
collection = String() # Data collection identifier (required for partition key)
query = String() # GraphQL query string
variables = Map(String()) # GraphQL variables (consider enhancing to support all JSON types)
operation_name = String() # Operation to execute for multi-operation documents
```
<<<<<<< HEAD
**ההצדקה לשינויים מתוך בקשת StructuredQueryRequest קיימת:**
הוספת השדות `user` ו-`collection` כדי להתאים לדפוס של שירותי שאילתות אחרים.
שדות אלה חיוניים לזיהוי ה-keyspace והקולקציה של Cassandra.
המשתנים נשארים מסוג Map(String()) כרגע, אך באופן אידיאלי צריכים לתמוך בכל סוגי ה-JSON.
#### סכימת תגובה (ObjectsQueryResponse)
=======
**ההצדקה לשינויים מהבקשה המובנית הקיימת (StructuredQueryRequest):**
הוספת השדות `user` ו-`collection` כדי להתאים לדפוס של שירותי שאילתות אחרים.
שדות אלה חיוניים לזיהוי מרחב המפתחות (keyspace) והאוסף (collection) של Cassandra.
המשתנים נשארים מסוג Map(String()) כרגע, אך באופן אידיאלי צריכים לתמוך בכל סוגי ה-JSON.
#### סכימת התגובה (ObjectsQueryResponse)
>>>>>>> 82edf2d (New md files from RunPod)
```python
from pulsar.schema import Record, String, Array
from ..core.primitives import Error
class GraphQLError(Record):
message = String()
path = Array(String()) # Path to the field that caused the error
extensions = Map(String()) # Additional error metadata
class ObjectsQueryResponse(Record):
error = Error() # System-level error (connection, timeout, etc.)
data = String() # JSON-encoded GraphQL response data
errors = Array(GraphQLError) # GraphQL field-level errors
extensions = Map(String()) # Query metadata (execution time, etc.)
```
**ההצדקה לשינויים מ-StructuredQueryResponse הקיים:**
מבחינה בין שגיאות מערכת (`error`) ושגיאות GraphQL (`errors`)
משתמשת באובייקטי GraphQLError מובנים במקום מערך מחרוזות
מוסיפה שדה `extensions` לצורך עמידה במפרט GraphQL
שומרת על הנתונים כמחרוזת JSON לצורך תאימות, למרות שטיפוסים מקוריים היו עדיפים
### אופטימיזציה של שאילתות Cassandra
השירות יבצע אופטימיזציה של שאילתות Cassandra על ידי:
1. **כבוד למפתחות מחיצה:**
תמיד לכלול אוסף בשאילתות
להשתמש ביעילות במפתחות ראשיים המוגדרים בסכימה
להימנע מסריקות טבלה מלאות
2. **ניצול אינדקסים:**
להשתמש באינדקסים משניים לסינון
לשלב מספר פילטרים במידת האפשר
להזהיר כאשר שאילתות עשויות להיות לא יעילות
3. **טעינה באצווה:**
לאסוף שאילתות קשר
<<<<<<< HEAD
לבצע אותן באצווה כדי להפחית את מספר הפעמים
=======
לבצע אותן באצווה כדי להפחית מעברים
>>>>>>> 82edf2d (New md files from RunPod)
לשמור תוצאות בהקשר הבקשה
4. **ניהול חיבורים:**
לשמור על סשנים קבועים של Cassandra
להשתמש בבריכת חיבורים
לטפל בחיבור מחדש במקרה של כשלים
### דוגמאות לשאילתות GraphQL
#### שאילתת אוסף פשוטה
```graphql
{
customers(status: "active") {
customer_id
name
email
registration_date
}
}
```
#### שאילתה עם קשרים
```graphql
{
orders(order_date_gt: "2024-01-01") {
order_id
total_amount
customer {
name
email
}
items {
product_name
quantity
price
}
}
}
```
#### שאילתה מדורגת
```graphql
{
products(limit: 20, offset: 40) {
product_id
name
price
category
}
}
```
### תלותות יישום
**Strawberry GraphQL**: להגדרת סכימת GraphQL ולביצוע שאילתות
**Cassandra Driver**: לחיבור למסד הנתונים (בשימוש כבר במודול האחסון)
**TrustGraph Base**: עבור FlowProcessor והגדרות סכימה
<<<<<<< HEAD
**Configuration System**: לניטור ועדכון סכימות
=======
**Configuration System**: עבור ניטור ועדכון סכימות
>>>>>>> 82edf2d (New md files from RunPod)
### ממשק שורת הפקודה
השירות יספק פקודת CLI: `kg-query-objects-graphql-cassandra`
ארגומנטים:
`--cassandra-host`: נקודת מגע של אשכול Cassandra
`--cassandra-username`: שם משתמש לאימות
`--cassandra-password`: סיסמה לאימות
`--config-type`: סוג תצורה עבור סכימות (ברירת מחדל: "schema")
ארגומנטים סטנדרטיים של FlowProcessor (תצורת Pulsar, וכו')
## אינטגרציה של API
### נושאים של Pulsar
**נושא קלט**: `objects-graphql-query-request`
סכימה: ObjectsQueryRequest
מקבל שאילתות GraphQL משירותי שער
**נושא פלט**: `objects-graphql-query-response`
סכימה: ObjectsQueryResponse
מחזיר תוצאות שאילתות ושגיאות
### אינטגרציה של שער
השער ושער הפוך יצטרכו נקודות קצה כדי:
1. לקבל שאילתות GraphQL מלקוחות
2. להעביר לשירות השאילתות דרך Pulsar
3. להחזיר תגובות ללקוחות
4. לתמוך בשאילתות אינטרוספקציה של GraphQL
### אינטגרציה של כלי סוכן
מחלקה חדשה של כלי סוכן תאפשר:
יצירת שאילתות GraphQL משפה טבעית
ביצוע ישיר של שאילתות GraphQL
פרשנות ועיצוב תוצאות
שילוב עם זרימות החלטה של סוכן
## שיקולי אבטחה
**הגבלת עומק שאילתה**: למנוע שאילתות מקוננות עמוקות שעלולות לגרום לבעיות ביצועים
**ניתוח מורכבות שאילתה**: להגביל את מורכבות השאילתה כדי למנוע מיצוי משאבים
**הרשאות ברמת השדה**: תמיכה עתידית בשליטה על גישה ברמת השדה בהתבסס על תפקידי משתמש
**ניקוי קלט**: לאמת ולנקות את כל קלט השאילתה כדי למנוע התקפות הזרקה
**הגבלת קצב**: ליישם הגבלת קצב שאילתות למשתמש/אוסף
## שיקולי ביצועים
**תכנון שאילתות**: לנתח שאילתות לפני ביצוע כדי לייעל יצירת CQL
**מטמון תוצאות**: לשקול שמירת נתונים שנגישים אליהם לעתים קרובות ברמת פותר השדה
**בריכת חיבורים**: לשמור על בריכות חיבורים יעילות ל-Cassandra
**פעולות אצווה**: לשלב מספר שאילתות כאשר אפשר כדי להפחית השהיה
**ניטור**: לעקוב אחר מדדי ביצועי שאילתות לצורך אופטימיזציה
## אסטרטגיית בדיקה
### בדיקות יחידה
יצירת סכימה מתוך הגדרות RowSchema
ניתוח ותיקוף שאילתות GraphQL
לוגיקת יצירת שאילתות CQL
יישומים של פותרים (resolvers) של שדות
### בדיקות חוזה
עמידה בחוזה הודעות Pulsar
תקינות סכימת GraphQL
אימות פורמט תגובה
אימות מבנה שגיאות
### בדיקות אינטגרציה
ביצוע שאילתות מקצה לקצה מול מופע בדיקת Cassandra
טיפול בעדכוני סכימה
פתרון קשרים
דפוסים של דף אחרי דף וסינון
<<<<<<< HEAD
תרחישי שגיאות
=======
תרחישי שגיאה
>>>>>>> 82edf2d (New md files from RunPod)
### בדיקות ביצועים
תפוקת שאילתות תחת עומס
זמן תגובה עבור מורכבויות שאילתות שונות
שימוש בזיכרון עם קבוצות תוצאות גדולות
יעילות של מאגר חיבורים
## תוכנית מעבר
<<<<<<< HEAD
אין צורך במעבר מכיוון שזו יכולת חדשה. השירות י:
1. יקרא סכימות קיימות מהתצורה
=======
אין צורך במעבר מכיוון שזו יכולת חדשה. השירות יעשה את הפעולות הבאות:
1. יקרא סכימות קיימות מהגדרות
>>>>>>> 82edf2d (New md files from RunPod)
2. יתחבר לטבלאות Cassandra קיימות שנוצרו על ידי מודול האחסון
3. יתחיל לקבל שאילתות מיד עם הפריסה
## ציר זמן
שבוע 1-2: יישום ליבת השירות ויצירת סכימה
שבוע 3: ביצוע שאילתות ותרגום CQL
שבוע 4: פתרון קשרים ואופטימיזציה
<<<<<<< HEAD
שבוע 5: בדיקות וכוונון ביצועים
=======
שבוע 5: בדיקות וכיוונון ביצועים
>>>>>>> 82edf2d (New md files from RunPod)
שבוע 6: שילוב עם שער ותיעוד
## שאלות פתוחות
1. **אבולוציה של סכימה**: כיצד השירות צריך להתמודד עם שאילתות במהלך מעברי סכימה?
אפשרות: תזמון שאילתות במהלך עדכוני סכימה
אפשרות: תמיכה במספר גרסאות סכימה בו זמנית
2. **אסטרטגיית אחסון במטמון**: האם יש לאחסן תוצאות שאילתות במטמון?
לשקול: תפוגה מבוססת זמן
לשקול: ביטול תוקף מבוסס אירועים
3. **תמיכה בפדרציה**: האם השירות צריך לתמוך בפדרציה של GraphQL לשילוב עם מקורות נתונים אחרים?
יאפשר שאילתות מאוחדות על נתונים מובנים וגרפיים
4. **תמיכה במנויים**: האם השירות צריך לתמוך במנויים של GraphQL לעדכונים בזמן אמת?
ידרוש תמיכה ב-WebSocket בשער
5. **סקלרים מותאמים אישית**: האם יש לתמוך בסקלרים מותאמים אישית עבור סוגי נתונים ספציפיים לתחום?
דוגמאות: DateTime, UUID, שדות JSON
## הפניות
מפרט טכני של נתונים מובנים: `docs/tech-specs/structured-data.md`
תיעוד Strawberry GraphQL: https://strawberry.rocks/
מפרט GraphQL: https://spec.graphql.org/
הפניה ל-Apache Cassandra CQL: https://cassandra.apache.org/doc/stable/cassandra/cql/
<<<<<<< HEAD
תיעוד מעבד זרימת נתונים TrustGraph: תיעוד פנימי
=======
תיעוד מעבד זרימה של TrustGraph: תיעוד פנימי
>>>>>>> 82edf2d (New md files from RunPod)