עבודה עם רשומות — REST API
ה‑API הוא Parse Server.
מפת הנקודות
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 פתוח: ה‑preflight מחזיר את ה‑Origin ששלחתם (לא *), GET,PUT,POST,DELETE,OPTIONS, וכל כותרות ה‑X-Parse-*. אל תשלחו סוד מהדפדפן.
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 “פעולות אטומיות”אופרטור במקום read‑modify‑write; בטוח גם מול מרוץ בין תהליכים:
{ "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 “דגלים להשתקת טריגרים ויומן השינויים”שני דגלים משתיקים אוטומציות ו‑_Timeline על כתיבה בודדת. הם חלים על כל כתיבה: POST, PUT, וכל פעולה בתוך batch. את שניהם שולחים בתוך אובייקט הגוף, לצד השדות:
| הדגל | מה נחסם |
|---|---|
dontRunSimblaTriggers |
טריגרי data change על הכתיבה הזו: אפס הרצות במקום שרשרת האוטומציה המלאה |
dontUpdateSimblaTimeline |
שורות _Timeline על הכתיבה הזו |
dontRunSimblaTriggersCreate |
רק פעולות (actions) מסוג יצירת אובייקט בתוך הטריגרים שרצים. הטריגר עצמו רץ; פעולת היצירה שבו מדולגת |
dontRunSimblaTriggersUpdate |
רק פעולות מסוג עדכון אובייקט בתוך הטריגרים שרצים |
{ "Name": "new account name", "dontRunSimblaTriggers": true, "dontUpdateSimblaTimeline": true}רק באימות Master Key או API Key. הדגלים אינם שדות: השרת צורך אותם, הרשומה נשמרת בלעדיהם, ולא נוצרת עמודה בסכימה.
שימו לב להבדל בין שתי הרמות: dontRunSimblaTriggers משתיק את הטריגרים כולם, ואילו …Create / …Update מדלגים רק על פעולת יצירה/עדכון של אובייקט בתוך טריגר שרץ. על טריגר שכל הפעולות שלו הן מייל או התראה, שני הדגלים הממוקדים לא משנים דבר.
הזרימה הקנונית: איש קשר ואז רשומה מקושרת
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":"…"}- אין הגבלת קצב מתועדת: אלפי קריאות רצופות, כולל
batchשל 1,000 פעולות, לא החזירו ולו429אחד, ואין כותרות מגבלה. “לא מתועד” אינו “לא קיים”: חלקו לקבוצות והוסיפו השהיה בטעינות גדולות. מגבלות. - פעולות ברמת החשבון (חבילות, מושבים, הקמת מערכת חדשה) אינן ב‑API הזה.
- שינוי סכימה:
PUT /parse/schemas/<Table>עם Master Key עובד ומוסיף שדה, אבל מדלג על שכבות המוצר (תווית עברית, הרשאות). לא ב‑REST גולמי: סכימות.
עמודים שלא במפה: שגיאות · יומנים וראיות · דוגמאות קוד בשפות נוספות