logologo
Úvod
Manuál
Vývoj
Pluginy
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Úvod
Manuál
Vývoj
Pluginy
API
logologo

Rychlý start

Přehled vývoje pluginů
Vytvoření prvního pluginu
Struktura adresářů projektu

Vývoj na straně serveru

Přehled
Plugin
Kolekce
Databázové operace
Správa zdrojů dat (DataSourceManager)
Správa zdrojů (ResourceManager)
Řízení přístupu (ACL)
Middleware
Cache
Události
Kontext požadavku
Migrace
Protokoly
Internacionalizace (I18n)
Příkazový řádek (Command)
Správa plánovaných úloh (CronJobManager)
Testování

Vývoj na straně klienta

Přehled
Plugin
Kontext
Router
Řízení přístupu (ACL)
Správa zdrojů dat (DataSourceManager)
Zdroje
Požadavky
Styly a motivy
Protokoly
Internacionalizace (I18n)
Testování

Ostatní

Průvodce aktualizací pluginů
Seznam jazyků
Správa závislostí
Sestavení
Previous PageZdroje
Next PageStyly a motivy
TIP

Tento dokument byl přeložen umělou inteligencí. V případě nepřesností se prosím obraťte na anglickou verzi

#Požadavky

NocoBase poskytuje APIClient založený na knihovně Axios, který můžete použít k odesílání HTTP požadavků z jakéhokoli místa, kde je dostupný Context.

Mezi běžná místa, kde můžete získat Context, patří:

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

#ctx.api.request()

ctx.api.request() je nejpoužívanější metoda pro odesílání požadavků. Její parametry a návratové hodnoty jsou zcela shodné s metodou axios.request().

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

Základní použití

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

Můžete přímo použít standardní konfiguraci požadavků Axios:

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

#ctx.api.axios

ctx.api.axios je instance AxiosInstance, pomocí které můžete upravovat globální výchozí konfigurace nebo přidávat interceptory požadavků.

Úprava výchozí konfigurace

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

Více dostupných konfigurací naleznete v Axios Default Config.

#Interceptory požadavků a odpovědí

Pomocí interceptorů můžete zpracovávat požadavky před jejich odesláním nebo odpovědi po jejich přijetí. Například můžete jednotně přidávat hlavičky požadavků, serializovat parametry nebo zobrazovat jednotná chybová hlášení.

#Příklad interceptoru požadavků

// Použití qs pro serializaci parametrů
axios.interceptors.request.use((config) => {
  config.paramsSerializer = (params) =>
    qs.stringify(params, {
      strictNullHandling: true,
      arrayFormat: 'brackets',
    });
  return config;
});

// Vlastní hlavičky požadavků
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;
});

#Příklad interceptoru odpovědí

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    // Při chybě požadavku zobrazte jednotné oznámení
    ctx.notification.error({
      message: 'Chyba odpovědi na požadavek',
    });
    return Promise.reject(error);
  },
);

#Vlastní hlavičky požadavků NocoBase Serveru

Níže jsou uvedeny vlastní hlavičky požadavků podporované NocoBase Serverem, které lze použít pro scénáře s více aplikacemi, internacionalizací, více rolemi nebo více způsoby autentizace.

HeaderPopis
X-AppUrčuje aktuálně přístupnou aplikaci ve scénářích s více aplikacemi
X-LocaleAktuální jazyk (např. zh-CN, en-US)
X-HostnameNázev hostitele klienta
X-TimezoneČasové pásmo klienta (např. +08:00)
X-RoleAktuální role
X-AuthenticatorAktuální metoda autentizace uživatele

💡 Tip
Tyto hlavičky požadavků jsou obvykle automaticky vkládány interceptory a není třeba je nastavovat ručně. Ruční přidání je nutné pouze ve speciálních scénářích (například v testovacích prostředích nebo ve scénářích s více instancemi).

#Použití v komponentách

V React komponentách můžete získat objekt kontextu pomocí useFlowContext() a následně volat ctx.api pro odesílání požadavků.

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>Načítám...</div>;
};

#Použití s useRequest z ahooks

V praxi můžete pro pohodlnější správu životního cyklu a stavu požadavků využít Hook useRequest z knihovny 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>Načítám...</div>;
  if (error) return <div>Chyba požadavku: {error.message}</div>;

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

Tento přístup umožňuje deklarativnější logiku požadavků, automaticky spravuje stavy načítání, zpracování chyb a logiku obnovení, což je velmi vhodné pro použití v komponentách.