Skip to main content

Data Backend

Tushan's data interface design is consistent with react-admin, allowing for the direct reuse of the existing backend interface ecosystem of react-admin.

Using Existing Community Ecosystem​

Visit the following link to view directly usable data backends: https://marmelab.com/react-admin/DataProviderList.html

Implementing a Corresponding Backend Based on Existing Interface Formats​

Taking the default built-in jsonServerProvider as an example, you need to implement the following interfaces on your backend:

  • GET /: Fetch list data

    • Query parameters:
      • _sort: Sort field
      • _order: Sort order: ASC | DESC
      • _start: Query start position
      • _end: Query end position
    • Return content:
      • Header: X-Total-Count: <number> defines the total count
      • Body: An array of database entries, each must include an id
  • GET /:id: Fetch single data entry

    • Query parameters:
      • :id: Database id
    • Return content:
      • Body: A database object, must include an id
  • POST /: Create data

    • Query parameters:
      • Body: Object of create form content
    • Return content:
      • Body: The newly created database object, must include an id
  • PUT /:id: Update data

    • Query parameters:
      • Body: Object of edit form content
    • Return content:
      • Body: The complete data of the edited form, must include an id
  • DELETE /:id: Delete data

    • Query parameters:
      • :id: The id of the data to be deleted
    • Return content:
      • Body: The deleted data object

You can use the chrome devtool network panel to observe the request parameters.

Implementing Your Own DataProvider to Adapt to Existing Backends​

First, all interface definitions are defined in the DataProvider type, and you can start as follows:

import type { DataProvider } from 'tushan';

export const myCustomDataProvider: DataProvider = {
create: () => Promise.resolve({ data: null } as any),
delete: () => Promise.resolve({ data: null } as any),
deleteMany: () => Promise.resolve({ data: [] }),
getList: () => Promise.resolve({ data: [], total: 0 }),
getMany: () => Promise.resolve({ data: [] }),
getManyReference: () => Promise.resolve({ data: [], total: 0 }),
getOne: () => Promise.resolve({ data: null } as any),
update: () => Promise.resolve({ data: null } as any),
updateMany: () => Promise.resolve({ data: [] }),
};

You need to implement the above methods separately. Adapt the interface data through different requests. You can refer to the implementation of jsonServerProvider that comes with tushan.