logologo
התחלה
מדריך
פיתוח
תוסף
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
התחלה
מדריך
פיתוח
תוסף
API
logologo

התחלה מהירה

סקירת פיתוח Plugin
כתיבת Plugin ראשון
מבנה תיקיות הפרויקט

פיתוח Server-side

סקירה כללית
Plugin
Collections טבלאות נתונים
Database: פעולות
DataSourceManager - ניהול מקורות נתונים
ResourceManager
ACL בקרת הרשאות
Middleware
Cache
Event
Context - הקשר בקשה
Migration סקריפט שדרוג
Logger יומן
Telemetry
I18n בינאום
Command
CronJobManager ניהול משימות מתוזמנות
Test

פיתוח Client-side

סקירה כללית
Plugin
Context
Router ניתוב
ACL בקרת הרשאות
DataSourceManager - ניהול מקורות נתונים
Resource
Request
Styles & Themes
Logger יומן
I18n בינאום
Test

אחר

מדריך שדרוג Plugin
רשימת שפות
ניהול תלויות
בנייה
Previous PageResource
Next PageStyles & Themes
TIP

מסמך זה תורגם על ידי בינה מלאכותית. לכל אי דיוק, אנא עיין בגרסה האנגלית

#בקשות

NocoBase מספקת APIClient המבוסס על Axios, שבו תוכלו להשתמש כדי לשלוח בקשות HTTP מכל מקום שבו ניתן לגשת ל-Context.

מיקומים נפוצים שבהם ניתן לגשת ל-Context כוללים:

  • app.context
  • engine.context
  • plugin.context
  • model.context

#ctx.api.request()

ctx.api.request() היא השיטה הנפוצה ביותר לשליחת בקשות. הפרמטרים וערכי ההחזרה שלה זהים לחלוטין לאלו של axios.request().

request<T = any, R = AxiosResponse<T>, D = any>(
  config: AxiosRequestConfig<D>,
): Promise<R>;

שימוש בסיסי

await ctx.api.request({
  url: 'users:list',
  method: 'get',
});

תוכלו להשתמש ישירות בתצורות בקשה סטנדרטיות של Axios:

await ctx.api.request({
  url: 'users:create',
  method: 'post',
  data: {
    name: 'Tao Tao',
  },
});

#ctx.api.axios

ctx.api.axios הוא מופע (instance) של AxiosInstance, שבאמצעותו תוכלו לשנות הגדרות ברירת מחדל גלובליות או להוסיף מיירטי בקשות (request interceptors).

שינוי הגדרות ברירת מחדל

axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

למידע נוסף על הגדרות זמינות, עיינו ב-הגדרות ברירת המחדל של Axios.

#מיירטי בקשות ותגובות

באמצעות מיירטים, תוכלו לעבד בקשות לפני שליחתן או תגובות לאחר קבלתן. לדוגמה, הוספה אחידה של כותרות בקשה, סידור פרמטרים (serialization), או הצגת הודעות שגיאה מאוחדות.

#דוגמה למיירט בקשות

// השתמשו ב-qs כדי לסדר את הפרמטרים (serialize params)
axios.interceptors.request.use((config) => {
  config.paramsSerializer = (params) =>
    qs.stringify(params, {
      strictNullHandling: true,
      arrayFormat: 'brackets',
    });
  return config;
});

// כותרות בקשה מותאמות אישית
axios.interceptors.request.use((config) => {
  config.headers['Authorization'] = `Bearer token123`;
  config.headers['X-Hostname'] = 'localhost';
  config.headers['X-Timezone'] = '+08:00';
  config.headers['X-Locale'] = 'zh-CN';
  config.headers['X-Role'] = 'admin';
  config.headers['X-Authenticator'] = 'basic';
  config.headers['X-App'] = 'sub1';
  return config;
});

#דוגמה למיירט תגובות

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    // במקרה של כשל בבקשה, הציגו הודעת התראה אחידה
    ctx.notification.error({
      message: 'שגיאת תגובת בקשה',
    });
    return Promise.reject(error);
  },
);

#כותרות בקשה מותאמות אישית בשרת NocoBase

להלן כותרות הבקשה המותאמות אישית הנתמכות על ידי שרת NocoBase, וניתן להשתמש בהן בתרחישים של ריבוי יישומים, בינאום, ריבוי תפקידים או ריבוי שיטות אימות.

Headerתיאור
X-Appמציין את היישום הנוכחי שאליו ניגשים בתרחישי ריבוי יישומים
X-Localeהשפה הנוכחית (לדוגמה: zh-CN, en-US)
X-Hostnameשם המארח של הלקוח
X-Timezoneאזור הזמן של הלקוח (לדוגמה: +08:00)
X-Roleהתפקיד הנוכחי
X-Authenticatorשיטת אימות המשתמש הנוכחית

💡 טיפ
כותרות בקשה אלו מוזרקות בדרך כלל באופן אוטומטי על ידי מיירטים ואין צורך להגדיר אותן ידנית. רק בתרחישים מיוחדים (כמו סביבות בדיקה או תרחישי ריבוי מופעים) תצטרכו להוסיף אותן באופן ידני.

#שימוש ברכיבים

ברכיבי React, תוכלו לקבל את אובייקט ה-context באמצעות useFlowContext() ולאחר מכן לקרוא ל-ctx.api כדי לשלוח בקשות.

import { useFlowContext } from '@nocobase/client';

const MyComponent = () => {
  const ctx = useFlowContext();

  const fetchData = async () => {
    const response = await ctx.api.request({
      url: '/api/posts',
      method: 'get',
    });
    console.log(response.data);
  };

  useEffect(() => {
    fetchData();
  }, []);

  return <div>טוען...</div>;
};

#שימוש עם useRequest של ahooks

בפיתוח בפועל, תוכלו לשלב את Hook ה-useRequest שמסופק על ידי ahooks, כדי לטפל בצורה נוחה יותר במחזור החיים ובמצב של הבקשות.

import { useFlowContext } from '@nocobase/client';
import { useRequest } from 'ahooks';

const MyComponent = () => {
  const ctx = useFlowContext();

  const { data, loading, error, refresh } = useRequest(() =>
    ctx.api.request({
      url: 'posts:list',
      method: 'get',
    }),
  );

  if (loading) return <div>טוען...</div>;
  if (error) return <div>שגיאת בקשה: {error.message}</div>;

  return (
    <div>
      <button onClick={refresh}>רענן</button>
      <pre>{JSON.stringify(data?.data, null, 2)}</pre>
    </div>
  );
};

גישה זו הופכת את לוגיקת הבקשות ליותר הצהרתית (declarative), ומנהלת באופן אוטומטי את מצבי הטעינה, טיפול בשגיאות ולוגיקת הרענון, מה שהופך אותה למתאימה מאוד לשימוש ברכיבים.