עבודה עם רשומות — REST API
ה‑API בנוי מעל Parse Server. מי שמכיר Parse ירגיש בבית; מי שלא, העמוד הזה הוא נקודת הפתיחה, ומכאן מתפצלים העמודים הייעודיים.
מפת הנקודות
Section titled “מפת הנקודות”| מה | הכתובת | העמוד |
|---|---|---|
| בסיס ה‑API | https://api.mbapps.co.il/parse |
|
| רשומות בטבלה | /parse/classes/<Table> |
העמוד הזה |
| שאילתות וסינון | /parse/classes/<Table>?where=… |
שאילתות |
| כמה פעולות בבקשה | /parse/batch |
batch |
| אגרגציה | /parse/classes-aggregate/<Table> — לא /parse/aggregate/ |
אגרגציות |
| סכימות | /parse/schemas[/<Table>] |
סכימות |
| משתמשים והתחברות | /parse/users · /parse/login |
משתמשים |
| קבצים | /parse/files/<fileName> |
קבצים |
| פונקציות צד שרת | https://api.mbapps.co.il/functions/{appId}/{fn} — מחוץ ל‑/parse |
פונקציות צד שרת |
כל בקשה נושאת X-Parse-Application-Id, ובנוסף אחת מכותרות ההרשאה שבאימות. גופי POST/PUT הם JSON עם Content-Type: application/json.
CORS פתוח כברירת מחדל, כך ש‑fetch מהדפדפן עובד, כל עוד לא תשלחו סוד מהדפדפן.
POST יצירה
Section titled “POST יצירה”curl -sS -X POST "https://api.mbapps.co.il/parse/classes/Accounts" \ -H "X-Parse-Application-Id: $APP_ID" \ -H "X-Parse-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "Name": "ישראל ישראלי", "PhoneNumber": "0501234567", "Email": "israel@example.co.il", "IsAccount": false }'const res = await fetch('https://api.mbapps.co.il/parse/classes/Accounts', { method: 'POST', headers: { 'X-Parse-Application-Id': APP_ID, 'X-Parse-API-Key': API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ Name: 'ישראל ישראלי', PhoneNumber: '0501234567', Email: 'israel@example.co.il', IsAccount: false, }),});import requests
res = requests.post( "https://api.mbapps.co.il/parse/classes/Accounts", headers={ "X-Parse-Application-Id": APP_ID, "X-Parse-API-Key": API_KEY, }, json={ "Name": "ישראל ישראלי", "PhoneNumber": "0501234567", "Email": "israel@example.co.il", "IsAccount": False, }, timeout=30,)<?php$ch = curl_init('https://api.mbapps.co.il/parse/classes/Accounts');curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'X-Parse-Application-Id: ' . $appId, 'X-Parse-API-Key: ' . $apiKey, 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'Name' => 'ישראל ישראלי', 'PhoneNumber' => '0501234567', 'Email' => 'israel@example.co.il', 'IsAccount' => false, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);curl_close($ch);201 Created →
{ "objectId": "xK9mP2qRsT", "createdAt": "2026-01-10T08:30:00.000Z" }השרת מייצר objectId — מחרוזת באורך 10 תווים. אל תשלחו אותו ביצירה — שמרו אותו, הוא המפתח לכל עדכון, מחיקה או קישור עתידי.
GET שליפת רשומה בודדת
Section titled “GET שליפת רשומה בודדת”מחזיר את האובייקט המלא. include=<שדה Pointer> מרחיב את הרשומה המקושרת בתוך התשובה, וחוסך קריאה שנייה:
GET /parse/classes/Tasks/Cpl9lrueY5?include=AccountIdלשליפה של כמה רשומות לפי תנאי — שאילתות.
PUT עדכון
Section titled “PUT עדכון”שולחים רק את השדות שמשתנים; שדות שלא נשלחו לא נוגעים.
{ "LastAction": "ביקש שיחה חוזרת", "LastActionDate": { "__type": "Date", "iso": "2026-03-24T10:00:00.000Z" }}תשובה: { "updatedAt": "…", "objectId": "…" }.
פעולות אטומיות
Section titled “פעולות אטומיות”במקום לקרוא־לשנות־לכתוב — שלחו אופרטור. גם בטוח יותר מול מרוץ בין תהליכים:
{ "StockCount": { "__op": "Increment", "amount": -5 } }{ "Tags": { "__op": "AddUnique", "objects": ["דחוף"] } }{ "Tags": { "__op": "Remove", "objects": ["דחוף"] } }{ "FieldName": { "__op": "Delete" } }Increment מחזיר בתשובה גם את הערך החדש ({"StockCount":5,"updatedAt":"…","objectId":"…"}); AddUnique על ערך שכבר קיים אינו מכפיל אותו.
DELETE מחיקה
Section titled “DELETE מחיקה”בלתי הפיך. מחזיר {}; שליפה של הרשומה אחר כך מחזירה 404 עם {"code":101,"error":"Object not found."}.
הזרימה הקנונית: איש קשר ואז רשומה מקושרת
Section titled “הזרימה הקנונית: איש קשר ואז רשומה מקושרת”זו התבנית שכמעט כל אינטגרציה מיישמת: חיפוש‑או‑יצירה של Accounts, ואז יצירת רשומה שמקושרת אליו.
import json, requests
API = "https://api.mbapps.co.il/parse"H = {"X-Parse-Application-Id": APP_ID, "X-Parse-API-Key": API_KEY, "Content-Type": "application/json"}
def find_or_create_account(phone: str, name: str) -> str: # 1) חיפוש לפי הטלפון — הפלטפורמה לא אוכפת ייחודיות, זה באחריותנו r = requests.get(f"{API}/classes/Accounts", headers=H, params={"where": json.dumps({"PhoneNumber": phone}), "limit": 5}, timeout=30) r.raise_for_status() hits = r.json()["results"] if len(hits) > 1: print(f"אזהרה: {len(hits)} רשומות עם אותו טלפון — נבחרה הראשונה") if hits: return hits[0]["objectId"]
# 2) יצירה r = requests.post(f"{API}/classes/Accounts", headers=H, json={"Name": name, "PhoneNumber": phone, "IsAccount": False}, timeout=30) r.raise_for_status() return r.json()["objectId"]
def create_task(account_id: str, title: str, due_iso: str) -> str: body = { "Name": title, "Date": {"__type": "Date", "iso": due_iso}, "AccountId": {"__type": "Pointer", "className": "Accounts", "objectId": account_id}, } r = requests.post(f"{API}/classes/Tasks", headers=H, json=body, timeout=30) r.raise_for_status() return r.json()["objectId"]
acc = find_or_create_account("0501234567", "ישראל ישראלי")create_task(acc, "התקשר ללקוח", "2026-01-15T10:30:00.000Z")אותה תבנית בדיוק יוצרת Activities (פגישות: Name, StartTime, EndTime, AccountId)
ו‑Sales (Name, SaleStatusId, Total, ClosingDate, AccountId). שמות השדות משתנים בין מערכות — שלפו סכימה.
מזהה זר — הדרך לוותר על ניחוש טלפונים
Section titled “מזהה זר — הדרך לוותר על ניחוש טלפונים”אם אתם מסנכרנים ממערכת חיצונית, כתבו את המזהה שלה ל‑ExternalId ביצירה. מאותו רגע, הזיהוי הופך לשאילתה חד‑משמעית:
params = {"where": json.dumps({"ExternalId": "CRM-84213"}), "limit": 1}אם זה טופס באתר — אל תשתמשו בעמוד הזה
Section titled “אם זה טופס באתר — אל תשתמשו בעמוד הזה”הקריאות כאן דורשות מפתח. מפתח בדפדפן = דלף. לטפסים ציבוריים יש שכבה נפרדת, בלי סודות בכלל — פונקציות web2* תחת /functions/{appId}/:
await fetch(`https://api.mbapps.co.il/functions/${APP_ID}/web2table`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Parse-Application-Id': APP_ID }, body: JSON.stringify({ table: 'Tasks', Name: 'התקשר ללקוח', phone: '0501234567' }),});// -> 200 {"success":true,"accountId":"…","Id":"…"}מה עוד כדאי לדעת
Section titled “מה עוד כדאי לדעת”- אין הגבלת קצב מתועדת ל‑
api.mbapps.co.il. בסבב אימות של אלפי קריאות רצופות — כוללbatchשל 1,000 פעולות — לא הוחזר ולו429אחד, ואין כותרות מגבלה בתשובות. “לא מתועד” עדיין אינו “לא קיים”: חלקו לקבוצות והוסיפו השהיה בטעינות גדולות. מגבלות ומכסות. - פעולות ברמת החשבון (חבילות, מושבים, הקמת מערכת חדשה) אינן חלק מ‑API זה.
- שינוי סכימה —
PUT /parse/schemas/<Table>עם Master Key אמנם עובד (אומת: הוסיף שדה), אבל מדלג על שכבות המוצר (תווית עברית, הרשאות). אל תעשו זאת ב‑REST גולמי — סכימות. - CORS — ה‑preflight מחזיר את ה‑
Originששלחתם ב‑Access-Control-Allow-Origin(לא*), עםGET,PUT,POST,DELETE,OPTIONSוכל כותרות ה‑X-Parse-*.
המשך מכאן
Section titled “המשך מכאן”- שאילתות — סינון, מיון, עימוד
- batch — כמה פעולות בבקשה אחת
- אגרגציות — סכומים במקום שורות
- סכימות · משתמשים · קבצים · פונקציות צד שרת
- שגיאות ופתרון תקלות · יומנים וראיות · מגבלות
- דוגמאות קוד בשפות נוספות