SDK
O SDK é o que utilizamos para fazermos nossa comunicação com as APIs REST do nosso backend, é como se nossas requisições ao backend ficassem mockados no SDK e ele faz todo o trabalho para nós.
Como criar um módulo no SDK
O SDK fica dentro das pastas pkgs/@itflex/sdk
, e as requisições referentes aos módulos dentro de modules
Então, você irá criar seu módulo novo: pkgs/itflex/sdk/modules/[módulo]
Você precisa de um arquivo especificando o SDK referente a API que ele será responsável, e também um index.js, então, por exemplo, eu estou criando um módulo no SDK para a API '/api/products', seria algo como:
sdk/modules/products/Products.js
sdk/modules/products/index.js
No arquivo Products.js ficam todas as requisições necessárias para essa API, nesse exemplo, estaremos fazendo um CRUD básico.
import { METHODS } from "../../core/Request"; //Importamos os métodos HTTP daqui
const BASE_URI = "/api/products";
// Classe que fica responsável por "montar" a resposta, o backend e o frontend na hora das análises de regra
// de negócios deixam bem claro como vai ser a API, que campos elas vão ter e como vão retorná-las, então
// montamos essa classe de acordo com o que é discutido.
export class Product {
constructor(props = {}) {
this.id = props.id;
this.name = props.name;
this.description = props.description || "";
this.quantity = props.quantity || null;
this.price = props.price;
}
}
// Onde estaram todas as requisições
export const ProductMethods = (config) => ({
getProducts() {
return config.request
.withUri(BASE_URI)
.withAuth(config.accessToken)
.withMethod(METHODS.get)
.withPayloadParser((payload) => {
return payload.products.map((product) => new Product(product));
})
.execute(config);
},
getProduct({ id }) {
return config.request
.withUri(`${BASE_URI}/${id}`)
.withAuth(config.accessToken)
.withMethod(METHODS.get)
.withPayloadParser((payload) => new Product(payload))
.execute(config);
},
createProduct(props = {}) {
const product = new Product(props);
const data = Object.assign({}, product);
delete data.id;
return config.request
.withAuth(config.accessToken)
.withUri(`${BASE_URI}`)
.withData(data)
.withMethod(METHODS.post)
.withPayloadParser((payload) => new Product(payload))
.execute(config);
},
updateProduct(props = {}) {
const product = new Product(props);
const data = Object.assign({}, product);
delete data.id;
return config.request
.withAuth(config.accessToken)
.withUri(`${BASE_URI}/${product.id}`)
.withData(data)
.withMethod(METHODS.put)
.withPayloadParser((payload) => new Product(payload))
.execute(config);
},
deleteProduct({ id }) {
return config.request
.withAuth(config.accessToken)
.withUri(`${BASE_URI}/${id}`)
.withMethod(METHODS.delete)
.execute(config);
},
});
// Exportamos mais uma vez
export default {
Product,
ProductMethods,
};
No arquivo index.js é onde agrupamos todos os SDK’s do módulo para podermos passar as informações necessárias
import Product from "./Products";
export const ProductsTypes = () => ({
Product: (props) => new Product.Product(props),
});
export const Products = (config) => {
const types = ProductsTypes;
return Object.assign(
{
types: types,
},
Product.ProductMethods(config)
);
};
Padrões SDK
SDK
A sdk segue o padrão de uso sdk.modulo.metodo. Por exemplo:
- sdk.auth.postUser
- sdk.dhcp.getOptions
Nomes de métodos
Para listagens, paginadas e não paginadas respectivamente:
- getEntitiesPages
- getEntities
Para os métodos que envolvem somente uma entidade segue-se o padrão:
- getEntity
- postEntity
- putEntity
- deleteEntity
Para métodos mais específicos, é utilizado o nome do que se está fazendo. Por exemplo:
- applyEntity
- importEntity