Saltar al contenido principal
nota

El original en inglés cambió después de esta traducción, así que puede estar desactualizada.

Definir Resources

Los Resources son una colección de methods para un data model dado.

Las Entities y los Schemas definen de forma declarativa el modelo de datos. Los Endpoints son los métodos sobre esos datos.

npm install --save @data-client/rest

resource() construye un espacio de nombres 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 ayudarte a definir Resources, se proporcionan helpers componibles y extensibles específicos de cada protocolo para REST, GraphQL, Image/binary,Websockets+SSE.

Para usar definiciones de API existentes, o definir tus propios helpers específicos de un protocolo, usa Endpoint y EntityMixin de @data-client/endpoint. [Consulta la pestaña Async/Promise de arriba]