Pular para o conteúdo principal
observação

O original em inglês mudou depois desta tradução, então ela pode estar desatualizada.

Definir Resources

Os Resources são uma coleção de methods (métodos) para um determinado data model (modelo de dados).

Entities e Schemas definem de forma declarativa o modelo de dados. Os Endpoints são os métodos sobre esses dados.

npm install --save @data-client/rest

resource() constrói um namespace de RestEndpoints

TodoResource
import { Entity, resource } from '@data-client/rest';

export class Todo extends Entity {
  id = 0;
  userId = 0;
  title = '';
  completed = false;

  static key = 'Todo';
}

export const TodoResource = resource({
  urlPrefix: 'https://jsonplaceholder.typicode.com',
  path: '/todos/:id',
  schema: Todo,
  searchParams: {} as { userId?: string | number } | undefined,
  paginationField: 'page',
});

/** Methods can be called as functions or used in hooks */

// GET https://jsonplaceholder.typicode.com/todos/5
TodoResource.get({ id: 5 });
// GET https://jsonplaceholder.typicode.com/todos
TodoResource.getList();
// GET https://jsonplaceholder.typicode.com/todos?userId=1
TodoResource.getList({ userId: 1 });
// POST https://jsonplaceholder.typicode.com/todos
TodoResource.getList.push({ title: 'my todo' });
// POST https://jsonplaceholder.typicode.com/todos?userId=1
TodoResource.getList.push({ userId: 1 }, { title: 'my todo' });
// GET https://jsonplaceholder.typicode.com/todos?userId=1&page=2
TodoResource.getList.getPage({ userId: 1, page: 2 });
// PUT https://jsonplaceholder.typicode.com/todos/5
TodoResource.update({ id: 5 }, { title: 'my todo' });
// PATCH https://jsonplaceholder.typicode.com/todos/5
TodoResource.partialUpdate({ id: 5 }, { title: 'my todo' });
// PATCH https://jsonplaceholder.typicode.com/todos/5
TodoResource.getList.move({ id: 5 }, { completed: true });
// DELETE https://jsonplaceholder.typicode.com/todos/5
TodoResource.delete({ id: 5 });

Para ajudar a definir Resources, são fornecidos helpers componíveis e extensíveis específicos de protocolo para REST, GraphQL, Websockets+SSE.

Para usar definições de API existentes, ou definir seus próprios helpers específicos de protocolo, use Endpoint e EntityMixin de @data-client/endpoint. [Veja a aba Async/Promise acima]