Você está na página 1de 10

Simova NFS API

Elaborado por Dalton Meira em 06/03/2020

Sumário
Apresentação

Etapas
Autenticação
Parâmetros
Requisições e Respostas
Sincronismo
Integração
Exemplo
Request
Response
Retorno de Imagem
Request
Response

Referência

-1-
Apresentação

O NFS permite a comunicação por API, sendo o ​sincronismo (entrada de dados NFS) e ​integração
(saída de dados do NFS) através de uma API usando ​JWT​ (Json Web Token).
Toda a lógica de negócio, no que se trata quais dados serão sincronizados (quais entidades vão vim
para o NFS) e integrados (quais entidades serão obtidas pelo sistema terceiro) é tratado com um analista da
Simova e depois é configurado a API.
A comunicação hoje sempre parte do lado do cliente, então quando é necessário enviar um dado para
o NFS o Sistema de Terceiro faz um request enviado as informações e a mesma coisa na hora que deseja
obter um dado, é feita uma chamada passando qual registro é buscado.

Etapas

Autenticação

A primeira etapa é a autenticação por um método ​POST para isso o usuário deve existir cadastrado
dentro do NFS, com isso é enviado usuário e senha, o retorno é um token que vai expirar em 15 minutos, se
antes desse tempo autenticar novamente é gerado um novo token, o antigo para de funcionar e também tem
o tempo 15 minutos.

-2-
A url será o domínio do cliente mais /nfs/api/v1/auth​, supondo que o domínio seja
smartos.simova.cloud, no final a chamada será:

https://smartos.simova.cloud/nfs/api/v1/auth

Parâmetros

Os parâmetros para autenticação são enviados como um ​Json Object [​ 1] de acordo com a ​tabela 1​.

Chave Obrigatório Descrição

nome Não Nome do usuário

user Sim E-mail válido do usuário


cadastrado no NFS

password Sim Password do usuário

empresa Sim
Tabela 1

Requisições e Respostas

Request

curl --request POST \


--url https://smartos.simova.cloud/nfs/api/v1/auth \
--header 'content-type: application/json' \
--data '{
"nome": "simova",
"user": "simova@simova.com.br",
"password": "simova123",
"empresa" : "Simova"
}'

Response

{
"type": "success",
"msg": "Token gerado com sucesso.",
"token":
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJtZHMuaC5zaW1vdmEuY2xvdWQiLCJuYW1lIjo

-3-
ic2ltb3ZhLmFkbWluIiwiZW1haWwiOiJzaW1vdmEuYWRtaW5Ac2ltb3ZhLmNvbS5iciIsImZpbGlhbCI6IlB
BTE0iLCJsb2NhbCI6bnVsbCwiZXhwIjoiMjAyMC0wMy0wNiAwOToyNzowNyJ9.YLSMHvBRFv7JxREv
WyybmWmIrUf1vPBmksRTfs9xz+Q=",
"user": "simova.admin@simova.com.br"
}

A chave ​token​ será usada no restante dos sincronismo e integração de dados.

Sincronismo

No sincronismo todas as chamadas são feitas por meio do método ​POST e no corpo é enviado um
Json Array ​[2]​.

O token sempre é enviado no header.

Request

curl --request POST \


--url https://smartos.simova.cloud/nfs/api/v1/sync/cliente \
--header 'authorization:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJtZHMuaC5zaW1vdmEuY2xvdWQiLCJuYW1lIjoi
c2ltb3ZhLmFkbWluIiwiZW1haWwiOiJzaW1vdmEuYWRtaW5Ac2ltb3ZhLmNvbS5iciIsImZpbGlhbCI6IlB
BTE0iLCJsb2NhbCI6bnVsbCwiZXhwIjoiMjAyMC0wMy0wNiAwOToyNzowNyJ9.YLSMHvBRFv7JxREv
WyybmWmIrUf1vPBmksRTfs9xz+Q= \
--data '[
{
"CodigoEmpresa": "Teste",
"CodigoCliente": "00001548789",

-4-
"Nome": "Cliente Teste",
"Tipo": "Física",
"CpfCnpj": "123456654654",
"NomeEndereco": "",
"Numero": "sn
"Complemento": "",
"Bairro": "",
"Cidade": "",
"UF": "SP"
}
]'

Response

[
{
"type": "success",
"msg": "Cadastro de Cliente inserido com sucesso",
"field": "",
"id": "6"
}
]

O retorno também é um ​json array​, porque pode ser sincronizado mais de um dado de uma vez, logo é
enviado também a resposta para cada na seguinte estrutura.

Chave Valor Descrição

type success/error/validation Para cada tipo de mensagem é


enviado um HTTP Status Code
diferente, mais detalhes na ​tabela
2.2

msg Customizada A mensagem é retornada de


acordo com seu type veja na
tabela 2.2

field Chave No caso são enviadas as chaves


que estão com erro ou inválidas

id Identificador único no NFS Este é o identificador único criado


no NFS, é muito importante para
dados que devem ser integrados.

-5-
Tabela 2.1​ - Retorno Mensagem

Type Mensagem HTTP Status Code

success Cadastro de Cliente inserido com 200


sucesso

Cadastro de Cliente atualizado


com sucesso

error Erro ao atualizar os dados de 400


Cliente

Erro ao inserir dados de Cliente

validation Campo Obrigatório 401

Cadastro de Estado com valor


igual a SP não encontrado!
Tabela 2.2 ​- Tipos de mensagens

Integração

Na integração é feito um GET a partir o Id que é enviado o sincronismo o mesmo deve ser retornado
quando quer se obter as informações de volta para o sistema de terceiro.

-6-
A url é ​/nfs/api/v1/integration/{entidade}

entidade​: é configurado a partir da necessidade do cliente

Exemplo

Supondo que foi feito um sincronismo de Ordem de Serviço, que é a entidade ​os​, e o ID gerado no
SmartOS é 10.

Request

curl --request GET \


--url https://smartos.simova.cloud/nfs/api/v1/integration/os \
--header 'authorization:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuZnMubG9jYWwiLCJuYW1lIjoic2ltb3ZhLmFkb
WluIiwiZW1haWwiOiJzaW1vdmEuYWRtaW5Ac2ltb3ZhLmNvbS5iciIsImZpbGlhbCI6IlBBTE0iLCJsb2N
hbCI6bnVsbCwiZXhwIjoiMjAyMC0wMS0yNyAxNjowNDozNSJ9.R+i2r7D9MTVHPND62I636hW5rOSn
N+\/L\/s6GoGzKV3Y=' \
--header 'content-type: application/json' \
--data '{
"id": "10"
}'

Response

[
{
"CodigoEmpresa": "Simova",
"FilialOS": "1",
"StatusOS": "Encerrada",
"IDStatusOS": "3",
"Equipamento": [
{
"Chassi": "312321312",
"Horimetro": "100",
"IdImagemChassi": "",
"IdImagemHorimetro": "1",
"DataLeitura": "2019-11-28 15:21:01"
}

-7-
],
"Dtac": [
{
"PecaCausadora": "1231312"
}
],
"AptHorasTrabalhadas": [
{
"SeqServico": "001-0002-0000",
"CodigoParada": "",
"DescParada": "",
"TipoApontamento": 1,
"CodigoEmpresaTec": "PALM",
"FlagServicoManual": "0",
"DataInicialApontamento": "2019-12-26 16:09:14",
"DataFinalApontamento": "2019-12-26 17:09:21",
"TempoApontado": "120",
"CodigoTecnico": "5"
},
{
"SeqServico": "",
"CodigoParada": "1",
"DescParada": "À DISPOSIÇÃO",
"TipoApontamento": 2,
"CodigoEmpresaTec": "Simova",
"FlagServicoManual": "1",
"DataInicialApontamento": "2019-12-26 16:09:14",
"DataFinalApontamento": "2019-12-26 17:09:21",
"TempoApontado": "120",
"CodigoTecnico": "5"
}
],
"PecasAplicacas": [
{
"CodigoPeca": "DIV538",
"QuantidadeAplicada": "0"
},
{
"CodigoPeca": "84565924",
"QuantidadeAplicada": "0"
}
]
}

-8-
]

Nisso é enviada todas informações da OS que estão configuradas para retorno, que geralmente é o
Apontamento de Horas Trabalhadas, Peças usadas na OS e etc. Um destaque especial é para quando
retorno é uma imagem que é enviado um id de sua entidade para não deixar o JSON de retorno grande.

Retorno de Imagem

Quando é configurado para retornar uma imagem em seu retorno é enviado o ID de onde ela existe e
sua chamada deve ser feita em uma requisição separada, por exemplo, no último exemplo de uma integração
de OS (lembrando que integração é quando a informação é gerada no SmartOS e obtida pelo Sistema
Terceiro) na chave ​Equipamento​ é enviado

"IdImagemChassi": "",
"IdImagemHorimetro": "1",

Isso quer dizer que tem uma imagem de horímetro com id igual a 1 e para obter essa imagem é feito
um novo request passando no body um json com o IdImagemHorimetro.

Request

curl --request GET \


--url http://nfs.local/nfs/api/v1/integration/apontamento_equipamento \
--header 'authorization:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuZnMubG9jYWwiLCJuYW1lIjoic2ltb3ZhLmFkbWluIiwiZ
W1haWwiOiJzaW1vdmEuYWRtaW5Ac2ltb3ZhLmNvbS5iciIsImZpbGlhbCI6IlBBTE0iLCJsb2NhbCI6bnVsbCwi
ZXhwIjoiMjAyMC0wMS0yNyAxNjowNDozNSJ9.R+i2r7D9MTVHPND62I636hW5rOSnN+\/L\/s6GoGzKV3Y=' \
--header 'content-type: application/json' \
--data '
{
"IdImagemHorimetro" : "1"
}
'

Observação​: A entidade ​apontamento_equipamento é combinada e configurada pelo time do NFS, mas no


casos é onde existe essa imagem.

Response

-9-
[
{
"ImagemChassi": "",
"ImagemHorimetro": "imagine_aqui_base64_imagem"
}
]

No caso não deve existir uma ​ImagemChassi​, porém, se existir iria ser passado seu valor e no
retorno iria vir junto seu base64.

Referência
[1]​ Json Object - Na autenticação é usada a seguintes estrutura para enviar as informações:

{
“chave”: “valor”
}

[2]​ Json Array - No sincronismo de dados é usado a seguinte estrutura para enviar as informações:

[
{
“chave1”:”valor1”
},
{
“chave2”: “valor2”
}
]

- 10 -

Você também pode gostar