
Security News
Crates.io Implements Trusted Publishing Support
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
ra-data-json-server
Advanced tools
JSON Server Data Provider for react-admin, the frontend framework for building admin applications on top of REST/GraphQL services.
npm install --save ra-data-json-server
This Data Provider fits REST APIs powered by JSON Server, such as JSONPlaceholder.
Method | API calls |
---|---|
getList | GET http://my.api.url/posts?_sort=title&_order=ASC&_start=0&_end=24&title=bar |
getOne | GET http://my.api.url/posts/123 |
getMany | GET http://my.api.url/posts?id=123&id=456&id=789 |
getManyReference | GET http://my.api.url/posts?author_id=345 |
create | POST http://my.api.url/posts |
update | PUT http://my.api.url/posts/123 |
updateMany | PUT http://my.api.url/posts/123 , PUT http://my.api.url/posts/456 , PUT http://my.api.url/posts/789 |
delete | DELETE http://my.api.url/posts/123 |
Note: The JSON Server REST Data Provider expects the API to include a X-Total-Count
header in the response to getList
and getManyReference
calls. The value must be the total number of resources in the collection. This allows react-admin to know how many pages of resources there are in total, and build the pagination controls.
X-Total-Count: 319
If your API is on another domain as the JS code, you'll need to whitelist this header with an Access-Control-Expose-Headers
CORS header.
Access-Control-Expose-Headers: X-Total-Count
// in src/App.js
import * as React from "react";
import { Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';
import { PostList } from './posts';
const App = () => (
<Admin dataProvider={jsonServerProvider('https://jsonplaceholder.typicode.com')}>
<Resource name="posts" list={PostList} />
</Admin>
);
export default App;
The provider function accepts an HTTP client function as second argument. By default, they use react-admin's fetchUtils.fetchJson()
as HTTP client. It's similar to HTML5 fetch()
, except it handles JSON decoding and HTTP error codes automatically.
That means that if you need to add custom headers to your requests, you just need to wrap the fetchJson()
call inside your own function:
import { fetchUtils, Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';
const httpClient = (url, options = {}) => {
if (!options.headers) {
options.headers = new Headers({ Accept: 'application/json' });
}
// add your own headers here
options.headers.set('X-Custom-Header', 'foobar');
return fetchUtils.fetchJson(url, options);
};
const dataProvider = jsonServerProvider('https://jsonplaceholder.typicode.com', httpClient);
render(
<Admin dataProvider={dataProvider} title="Example Admin">
...
</Admin>,
document.getElementById('root')
);
Now all the requests to the REST API will contain the X-Custom-Header: foobar
header.
Tip: The most common usage of custom headers is for authentication. fetchJson
has built-on support for the Authorization
token header:
const httpClient = (url, options = {}) => {
options.user = {
authenticated: true,
token: 'SRTRDFVESGNJYTUKTYTHRG'
};
return fetchUtils.fetchJson(url, options);
};
Now all the requests to the REST API will contain the Authorization: SRTRDFVESGNJYTUKTYTHRG
header.
ra-data-json-server
supports Embedded Relationships. Use the meta.embed
query parameter to specify the relationships that you want to embed.
dataProvider.getOne('posts', { id: 1, meta: { embed: 'author' } });
// {
// data: { id: 1, title: 'FooBar', author: { id: 1, name: 'John Doe' } },
// }
The name of the embedded resource must be singular for a many-to-one relationship, and plural for a one-to-many relationship.
{ meta: { embed: 'comments' } }
You can leverage this feature in page components to avoid multiple requests to the data provider:
const PostList = () => (
<List queryOptions={{ meta: { embed: 'author' } }}>
<DataTable>
<DataTable.Col source="title" />
<DataTable.Col source="author.name" />
</DataTable>
</List>
);
Embedding Relationships is supported in getList
, getOne
, getMany
, and getManyReference
queries.
This data provider is licensed under the MIT License, and sponsored by marmelab.
FAQs
JSON Server data provider for react-admin
The npm package ra-data-json-server receives a total of 13,170 weekly downloads. As such, ra-data-json-server popularity was classified as popular.
We found that ra-data-json-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.
Research
/Security News
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.