Exemplos
Introdução
A Fieldy CONNECT é uma API REST capaz de fornecer acesso à Base de Dados da aplicação MOBIUSOne.
Este documento apresenta o formato de acesso de requisições genéricas e os padrões de resposta de sucesso ou erro.
A API recebe e retorna informações no formato JSON.
Para mais informações sobre as rotas suportadas, acesse a Referência.
Formato
Todos os endpoints da Fieldy CONNECT são construídos de acordo com o seguinte formato:
https://api.fieldy.com.br/api/v1/<Holding>/<Tabela>/<Objeto>
onde:
v1
é a versão da API<Holding>
é o CPF/CNPJ da empresa detentora da Base de Dados<Tabela>
é a fonte de dados desejada<Objeto>
é o identificador único do objeto.
Caso deseje mais informações sobre as tabelas disponíveis, clique aqui.
São implementados os métodos GET, POST, PUT, PATCH e DELETE, onde cada um deles oferece uma funcionalidade:
- GET: retorna os dados de um recurso.
- POST: adiciona um novo registro à base de dados.
- PUT: sobresecreve completamente um registo.
- PATCH: corrige um ou mais campos de um registro.
- DELETE: realiza a deleção lógica de um registro da base de dados.
Abaixo, são fornecidos alguns exemplos de requisições suportadas pela Fieldy CONNECT.
Regras de Criação dos Endpoints
Os endpoints da API da MOBIUSOne são criados dinâmicamente de acordo com as tabelas do Banco de Dados do cliente.
O endereço de um objeto na API é criado de acordo com o seu Id, i.e., sua chave primária.
As tabelas da MOBIUSOne, em sua maioria, possuem como chave primária os campos idHolding
e idUnidadeNegocio
. No entanto, como cada endpoint e cada usuário da API é direcionado a uma Holding, não é necessário indicar tais campos explícitamente na pesquisa.
Em geral, a chave primária é simples, no entanto existem exceções. Abaixo, estão alguns exemplos.
Tabela com Chave Primária Simples
A maior parte das tabelas da MOBIUSOne são estruturadas com Chave Primária Simples. Deste modo, para se identificar um objeto, somente é necessário indicar o seu Id.
Por exemplo:
- Deseja-se requisitar as informações do seguinte Cliente:
{
"idHolding": "15347602000197",
"idCliente": "000003",
"idUnidadeNegocio": "15347602000197",
"idUnidadeLocal": null,
"idColaborador": null,
"idCondicaoPagamento": null,
"idFormaPagamento": null,
"idSegmento": null,
"idSetor": null,
"idTerritorio": null,
"idRegiao": null,
"idClienteLocal": null,
"codigoRetaguarda": "C000003",
[...]
}
Ao se observar a estrutura da tabela Cliente, identifica-se que as chaves primárias desta tabela são idHolding
e idCliente
.
Como idHolding
já foi informado através do usuário e do endpoint, é necessário somente fornecer o identificador idCliente
do objeto desejado.
No objeto acima, idCliente = "000003"
. Logo, o endpoint que se refere à este objeto é:
GET https://api.fieldy.com.br/api/v1/15347602000197/Cliente/000003
Tabela com Chave Primária Composta
Algumas das tabelas da MOBIUSOne são estruturadas com Chave Primária Composta.
Sendo assim, um endpoint com apenas uma chave, como por exemplo /v1/<Holding>/Cliente/000003
não é capaz de identificar um elemento único.
Para identificar objetos com chaves primárias compostas, foi definido o uso de Objetos JSON para identificação, como por exemplo:
- Deseja-se solicitar o objeto da tabela
ClienteEndereco
que possui a seguinte estrutura:
{
"idHolding": "15347602000197",
"idCliente": "000003",
"idClienteEndereco": 0,
"idUnidadeNegocio": null,
"idFornecedor": null,
"idEndereco": null,
[...]
}
Ao se observar a estrutura da tabela ClienteEndereco, identifica-se que as chaves primárias desta tabela são idHolding
, idCliente
e idClienteEndereco
.
Como idHolding
já foi informado através do usuário e do endpoint, é necessário fornecer dois identificadores, idCliente
e idClienteEndereco
do objeto desejado.
Para o objeto acima, com idCliente = "000003"
e idClienteEndereco = 0
, o endpoint é construído da seguinte da seguinte forma:
GET https://api.fieldy.com.br/api/v1/15347602000197/ClienteEndereco/{ "idCliente":"000003", "idClienteEndereco": 0 }
Pontos de Atenção:
- Chaves de Abertura (
{
) e Fechamento (}
) são obrigatórias - Aspas são obrigatórias em nomes dos campos e chaves do tipo CHAR / NVARCHAR / STRING
- A ordem dos IDs não é levada em consideração
- Faz-se distinção entre maiúsculas e minúsculas
GET
Listar todos os clientes
Este exemplo equivale à uma query SQL
SELECT *
FROM [Cliente]
Endpoint:
GET https://api.fieldy.com.br/api/v1/15347602000197/Cliente
Header:
Authorization: Basic <Credencial>
Exemplo de Resposta Bem-Sucedida:
Será retornada uma lista de todos os Clientes da holding.
{
"total": 8726,
"limit": 100,
"skip": 0
"data": [
{
"idHolding": "15347602000197",
"idCliente": "000001",
"idUnidadeNegocio": "15347602000197",
[...],
"entrada": "2019-01-10T17:25:42.957Z",
"transmissao": null,
"backofficeMSG": null,
"idGerador": null
},
{
"idHolding": "15347602000197",
"idCliente": "000002",
[...]
},
{
"idHolding": "15347602000197",
"idCliente": "000003",
[...]
},
[...]
]
}
Exemplo de Resposta com Erro:
Erro no CNPJ/CPF (rota inválida):
Status: 404 NOT FOUND
Cannot GET /v1/15347602000198/Cliente/
Requisitar cliente por ID
Este exemplo equivale à uma query SQL
SELECT *
FROM [Cliente]
WHERE [idCliente] = '000001'
Endpoint:
GET https://api.fieldy.com.br/api/v1/15347602000197/Cliente/000001
Header:
Authorization: Basic <Credencial>
Exemplo de Resposta Bem-Sucedida:
Será retornado somente o cliente com identificador "idCliente": "000001"
{
"idHolding": "15347602000197",
"idCliente": "000001",
"idUnidadeNegocio": "15347602000197",
[...],
"entrada": "2019-01-10T17:25:42.957Z",
"transmissao": null,
"backofficeMSG": null,
"idGerador": null
}
Exemplo de Resposta com Erro:
Recurso não encontrado:
Status: 500 INTERNAL SERVER ERROR
NotFound: No record found for id '000001'
Listar produtos com estoque inferior a 100
Este exemplo equivale à uma query SQL
SELECT *
FROM ProdutoEstoque
WHERE estoque <= 100
Endpoint:
GET https://api.fieldy.com.br/api/v1/15347602000197/ProdutoEstoque
Header:
Authorization: Basic <Credencial>
Parâmetros:
estoque[$lte]=100
Uma lista com todos os parâmetros suportados está disponível na Referência.
Exemplo de Resposta Bem-Sucedida:
Será retornada uma lista de todos os Produtos cujo estoque é menor ou igual a 100 unidades
{
"total": 1,
"limit": 100,
"skip": 0,
"data": [
{
"idHolding": "15347602000197",
"idUnidadeNegocio": "15347602000197",
"idUnidadeLocal": "15347602000197",
"idProduto": "0004",
"estoque": 53,
"precoBase": 494.97,
"precoValeCompras": null,
"precoValeTicket": null,
"descPercMax": 30,
"estoqueVenda": "S",
"icms": null,
"condicaoVenda": "1",
"entradaPrevista": null,
"quantidadePrevista": null,
"comissaoVenda": null,
"margemLucro": null,
"estoqueReserva": null,
"dataVisualizacao": null,
"statusRegistro": 1,
"situacao": null,
"operacao": 0,
"ticket": null,
"erro": null,
"entrada": "2018-10-14T12:36:27.000Z",
"transmissao": "2018-10-24T06:10:41.000Z",
"backofficeMSG": null,
"idGerador": null
}
]
}
Exemplo de Resposta com Erro:
Recurso não encontrado:
Status: 500 INTERNAL SERVER ERROR
NotFound: No record found for id '1'
Formato de dados inválido:
Status: 500 INTERNAL SERVER ERROR
GeneralError: Error converting data type nvarchar to numeric.
Observações:
- É possível passar quantos argumentos forem necessários
- Todos os argumentos são agregados com o conectivo
AND
POST
Inserir uma nova Condição de Pagamento
Este exemplo equivale a uma query SQL
INSERT INTO [CondicaoPagamento]
([idHolding],
[idUnidadeNegocio],
[idCondicaoPagamento],
[idFormaPagamento],
[condicaoPagamento],
[parcelaNumero],
[statusRegistro],
[operacao])
VALUES ("15347602000197",
"15347602000197",
"01",
"01",
"À Vista",
1,
2,
0)
Endpoint:
POST https://api.fieldy.com.br/api/v1/15347602000197/CondicaoPagamento
Header:
Authorization: Basic <Credencial>
Parâmetros:
{
"idHolding": "15347602000197",
"idUnidadeNegocio": "15347602000197",
"idCondicaoPagamento": "01",
"idFormaPagamento": "01",
"condicaoPagamento": "À Vista",
"parcelaNumero": 1,
"statusRegistro": 2,
"operacao": 0
}
Exemplo de Resposta Bem-Sucedida:
Será retornado o objeto inserido
{
"idHolding": "15347602000197",
"idUnidadeNegocio": "15347602000197",
"idCondicaoPagamento": "01",
"idFormaPagamento": "01",
"condicaoPagamento": "À Vista",
"parcelaNumero": 1,
"prazoMedio": null,
"indice": null,
"parcelaMinima": null,
"notas": null,
"dataVisualizacao": null,
"statusRegistro": 2,
"situacao": null,
"operacao": 0,
"ticket": null,
"erro": null,
"entrada": "2019-01-23T14:23:38.773Z",
"transmissao": null,
"backofficeMSG": null
}
Exemplo de Resposta com Erro:
Objeto Duplicado:
Status: 500 INTERNAL SERVER ERROR
Cannot insert duplicate key in object 'dbo.CondicaoPagamento'.
Chave Estrangeira Inválida
Status: 500 INTERNAL SERVER ERROR
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__CondicaoPagament__44CA3770".
Campos obrigatórios não preenchidos
Status: 500 INTERNAL SERVER ERROR
Cannot insert the value NULL into column 'idUnidadeNegocio'
PUT
O método PUT substitui informações de todos os campos de um objeto.
Não deve ser utilizado para atualização, e sim para substitução.
Alterar um Endereço de Cliente
Este exemplo equivale a uma query SQL
UPDATE [ClienteEndereco]
SET [idHolding] = '15347602000197',
[idUnidadeNegocio] = '15347602000197',
[idCliente] = '000004',
[idClienteEndereco] = 1,
[idFornecedor] = NULL,
[idEndereco] = NULL,
[nomeLocal] = NULL,
[inscricaoRural] = NULL,
[cep] = '01014001',
[logradouro] = 'Rua Boa Vista',
[numero] = '185',
[complemento] = '',
[bairro] = 'Centro',
[cidade] = 'São Paulo',
[uf] = 'SP',
[referenciaEndereco] = NULL,
[telefone] = NULL,
[ramal] = NULL,
[GPSLatitude] = '-23.545885',
[GPSLongitude] = '-46.633751',
[GPSData] = '2018-01-07T11:05:53.000Z',
[ordemVisita] = NULL,
[dataVisita] = '2018-01-07T00:00:00.000Z',
[dataCompra] = NULL,
[dataVisualizacao] = NULL,
[statusRegistro] = 2,
[situacao] = NULL,
[operacao] = 1,
[ticket] = NULL,
[erro] = NULL,
[entrada] = '2019-01-11T11:36:43.000Z',
[transmissao] = '2019-01-11T11:42:08.000Z',
[backofficeMSG] = NULL
WHERE [idCliente] = '000004'
AND [idClienteEndereco] = 1;
Endpoint:
PUT https://api.fieldy.com.br/api/v1/15347602000197/ClienteEndereco/{"idCliente":"000004", "idClienteEndereco":1}
Header:
Authorization: Basic <Credencial>
Parâmetros:
{
"idHolding": "15347602000197",
"idCliente": "000004",
"idClienteEndereco": 1,
"idUnidadeNegocio": "15347602000197",
"cep": "01014001",
"logradouro": "Rua Boa Vista",
"numero": "185",
"complemento": "",
"bairro": "Centro",
"cidade": "São Paulo",
"uf": "SP",
"GPSLatitude": "-23.545885",
"GPSLongitude": "-46.633751",
"GPSData": "2018-01-07T11:05:53.000Z",
"dataVisita": "2018-01-07T00:00:00.000Z",
"statusRegistro": 2
}
Exemplo de Resposta Bem-Sucedida:
Será retornado o objeto atualizado
{
"idHolding": "15347602000197",
"idCliente": "000004",
"idClienteEndereco": 1,
"idUnidadeNegocio": "15347602000197",
"idFornecedor": null,
"idEndereco": null,
"nomeLocal": null,
"inscricaoRural": null,
"cep": "01014001",
"logradouro": "Rua Boa Vista",
"numero": "185",
"complemento": "",
"bairro": "Centro",
"cidade": "São Paulo",
"uf": "SP",
"referenciaEndereco": null,
"telefone": null,
"ramal": null,
"GPSLatitude": "-23.545885",
"GPSLongitude": "-46.633751",
"GPSData": "2018-01-07T11:05:53.000Z",
"ordemVisita": null,
"dataVisita": "2018-01-07T00:00:00.000Z",
"dataCompra": null,
"dataVisualizacao": null,
"statusRegistro": 2,
"situacao": null,
"operacao": 1,
"ticket": null,
"erro": null,
"entrada": "2019-01-11T11:36:43.000Z",
"transmissao": "2019-01-11T11:42:08.000Z",
"backofficeMSG": null
}
Exemplo de Resposta com Erro:
Chave Estrangeira Inválida
Status: 500 INTERNAL SERVER ERROR
The UPDATE statement conflicted with the FOREIGN KEY constraint "FK__CondicaoPagament__44CA3770".
Campos obrigatórios não preenchidos
Status: 500 INTERNAL SERVER ERROR
Cannot insert the value NULL into column 'idUnidadeNegocio'
PATCH
O método PATCH altera os campos de um registro.
Alterar a senha de um Usuário
Este exemplo equivale a uma query SQL
UPDATE [UsuarioAppDtl]
SET [senha] = 'a1b2c3d4'
WHERE [login] = 'usuario.dtl'
Endpoint:
PATCH https://api.fieldy.com.br/api/v1/15347602000197/UsuarioAppDtl/dtl.usuario
Header:
Authorization: Basic <Credencial>
Parâmetros:
{
"senha": "a1b2c3d4"
}
Exemplo de Resposta Bem-Sucedida:
Será retornado o objeto atualizado
{
"idHolding": "09912195000110",
"login": "dtl.usuario",
"senha": "a1b2c3d4",
"cpf": "",
"nome": "Usuário Fieldy",
"sobrenome": "",
"iniciais": "DTL",
"conhecidoComo": "Dtl USER",
"fotoDevice": "",
"fotoCLOUDAX": "",
"celularPessoal": "",
"emailPessoal": "usuario.fieldy@gmail.com",
"dataNascimento": "1999-12-31T00:00:00.000Z",
"notas": "",
"ativo": "0",
"nivelAcesso": 0,
"dataVisualizacao": null,
"statusRegistro": 1,
"situacao": null,
"operacao": 1,
"ticket": null,
"erro": null,
"entrada": "2019-01-24T14:06:23.200Z",
"transmissao": null,
"backofficeMSG": null
}
DELETE
O método DELETE realiza a exclusão lógica de um registro, definindo o campo operacao = 2
.
Remover um Usuário
Este exemplo equivale a uma query SQL
UPDATE [UsuarioAppDtl]
SET [operacao] = 2
WHERE [login] = 'dtl.usuario'
Endpoint:
DELETE https://api.fieldy.com.br/api/v1/15347602000197/UsuarioAppDtl/dtl.usuario
Header:
Authorization: Basic <Credencial>
Exemplo de Resposta Bem-Sucedida:
Será retornado o objeto atualizado
{
"idHolding": "09912195000110",
"login": "dtl.usuario",
"senha": "a1b2c3d4",
"cpf": "",
"nome": "Usuário Fieldy",
"sobrenome": "",
"iniciais": "DTL",
"conhecidoComo": "Dtl USER",
"fotoDevice": "",
"fotoCLOUDAX": "",
"celularPessoal": "",
"emailPessoal": "usuario.fieldy@gmail.com",
"dataNascimento": "1999-12-31T00:00:00.000Z",
"notas": "",
"ativo": "0",
"nivelAcesso": 0,
"dataVisualizacao": null,
"statusRegistro": 1,
"situacao": null,
"operacao": 2,
"ticket": null,
"erro": null,
"entrada": "2019-01-24T14:06:23.200Z",
"transmissao": null,
"backofficeMSG": null
}