דלגו לתוכן

או התחילו מנקודה בטוחה: אינדקס הכלים המלא · מפת הטבלאות המרכזיות

מערכת חדשה — 14 יום חינם

עבודה עם רשומות — REST API

עודכן 30.08.2026

ה‑API בנוי מעל Parse Server. מי שמכיר Parse ירגיש בבית; מי שלא, העמוד הזה הוא נקודת הפתיחה, ומכאן מתפצלים העמודים הייעודיים.

מה הכתובת העמוד
בסיס ה‑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 /parse/classes/{Table}
Bash
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 }'
JavaScript
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,
}),
});
Python
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
<?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

JSON
{ "objectId": "xK9mP2qRsT", "createdAt": "2026-01-10T08:30:00.000Z" }

השרת מייצר objectId — מחרוזת באורך 10 תווים. אל תשלחו אותו ביצירה — שמרו אותו, הוא המפתח לכל עדכון, מחיקה או קישור עתידי.

GET /parse/classes/{Table}/{objectId}

מחזיר את האובייקט המלא. include=<שדה Pointer> מרחיב את הרשומה המקושרת בתוך התשובה, וחוסך קריאה שנייה:

HTTP
GET /parse/classes/Tasks/Cpl9lrueY5?include=AccountId

לשליפה של כמה רשומות לפי תנאי — שאילתות.

PUT /parse/classes/{Table}/{objectId}

שולחים רק את השדות שמשתנים; שדות שלא נשלחו לא נוגעים.

JSON
{
"LastAction": "ביקש שיחה חוזרת",
"LastActionDate": { "__type": "Date", "iso": "2026-03-24T10:00:00.000Z" }
}

תשובה: { "updatedAt": "…", "objectId": "…" }.

במקום לקרוא־לשנות־לכתוב — שלחו אופרטור. גם בטוח יותר מול מרוץ בין תהליכים:

JSON
{ "StockCount": { "__op": "Increment", "amount": -5 } }
{ "Tags": { "__op": "AddUnique", "objects": ["דחוף"] } }
{ "Tags": { "__op": "Remove", "objects": ["דחוף"] } }
{ "FieldName": { "__op": "Delete" } }

Increment מחזיר בתשובה גם את הערך החדש ({"StockCount":5,"updatedAt":"…","objectId":"…"}); AddUnique על ערך שכבר קיים אינו מכפיל אותו.

DELETE /parse/classes/{Table}/{objectId}

בלתי הפיך. מחזיר {}; שליפה של הרשומה אחר כך מחזירה 404 עם {"code":101,"error":"Object not found."}.

הזרימה הקנונית: איש קשר ואז רשומה מקושרת

Section titled “הזרימה הקנונית: איש קשר ואז רשומה מקושרת”

זו התבנית שכמעט כל אינטגרציה מיישמת: חיפוש‑או‑יצירה של Accounts, ואז יצירת רשומה שמקושרת אליו.

Python
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 ביצירה. מאותו רגע, הזיהוי הופך לשאילתה חד‑משמעית:

Python
params = {"where": json.dumps({"ExternalId": "CRM-84213"}), "limit": 1}

אם זה טופס באתר — אל תשתמשו בעמוד הזה

Section titled “אם זה טופס באתר — אל תשתמשו בעמוד הזה”

הקריאות כאן דורשות מפתח. מפתח בדפדפן = דלף. לטפסים ציבוריים יש שכבה נפרדת, בלי סודות בכלל — פונקציות web2* תחת /functions/{appId}/:

JavaScript
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":"…"}
  • אין הגבלת קצב מתועדת ל‑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-*.