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.
- REST
- GraphQL
- Async/Promise
npm install --save @data-client/rest
resource() constrói um namespace de RestEndpoints
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 });
npm install --save @data-client/graphql
GQLEndpoint ajuda a definir rapidamente queries e mutações
import { GQLEndpoint, GQLEntity } from '@data-client/graphql'; const gql = new GQLEndpoint('/'); export class Todo extends GQLEntity { title = ''; completed = false; static key = 'Todo'; } export const TodoResource = { getList: gql.query( ` query GetTodos { todo { id title completed } } `, { todos: new Collection([Todo]) }, ), update: gql.mutation( `mutation UpdateTodo($todo: Todo!) { updateTodo(todo: $todo) { id title completed } }`, { updateTodo: Todo }, ), };
npm install --save @data-client/endpoint
Definições TypeScript pré-existentes podem ser usadas no Data Client com Endpoint e EntityMixin.
import { Collection, Endpoint, EntityMixin, Invalidate } from '@data-client/endpoint'; import { Todo, getTodo, getTodoList, updateTodo, partialUpdateTodo, createTodo, deleteTodo, } from './existing/Todo'; export const TodoEntity = EntityMixin(Todo, { key: 'Todo' }); export const TodoResource = { get: new Endpoint(getTodo, { schema: TodoEntity }), getList: new Endpoint(getTodoList, { schema: new Collection([TodoEntity]), }), update: new Endpoint(updateTodo, { schema: TodoEntity, sideEffect: true, }), partialUpdate: new Endpoint(partialUpdateTodo, { schema: TodoEntity, sideEffect: true, }), create: new Endpoint(createTodo, { schema: new Collection([TodoEntity]).push, sideEffect: true, }), delete: new Endpoint(deleteTodo, { schema: new Invalidate(TodoEntity), sideEffect: true, }), };
Para ajudar a definir Resources, são fornecidos helpers componíveis e extensíveis específicos de protocolo para REST, GraphQL,
Imagem/binário,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]