PHSYS API
Conceito
O sistema PHSYS é baseado em um modelo de requisições REST, permitindo receber requisições de diversas formas. Ele foi desenvolvido utilizando sessões, o que significa que é necessário fornecer um identificador de sessão (semelhante a um token ou secret key) para cada requisição direta ao sistema.
Uma integração REST é uma forma de comunicação entre sistemas que segue os princípios arquiteturais da web. Ela permite que diferentes sistemas se conectem e troquem informações de forma eficiente e padronizada.
Portanto, para enviar requisições ao servidor, é necessário primeiro solicitar um ID de sessão. Com esse ID de sessão, será possível realizar solicitações e enviar dados para o servidor.
A comunicação é baseada em requisições utilizando um formato JSON padronizado.
Estrutura do JSON de Requisição
As requisições devem ser enviadas via método POST. Para identificação de qual processo o servidor deve rodar, é necessário informar qual a classe e qual o procedimento será executado. Dados como ID, empresa e parâmetros são opcionais, mas devem ser informados dependendo do processo que será executado pelo servidor.
Os parâmetros que serão enviados, atualmente possui 9 tipos, sendo eles: string, integer, largeint, stream, boolean, time, date, datetime e float.
utilizando o seguinte formato de JSON no corpo (body) da requisição:
{"Classe": "TPHSPedido",
"Procedimento": "Imprimir",
"ID": 20,
"Empresa": 1,
“Parametros”:[
{
"Nome": "Texto",
"Tipo": "string",
"Valor": "Isso é um teste"
},
{
"Nome": "Numero",
"Tipo": "integer",
"Valor": 1
}
]
}
Parâmetros:
Classe: Nome da classe a ser invocada no servidor, classe pode ser enviada no parametros também. Exemplo {"Parametros": [{“Classe”:”TPHSPedido”}]}.
Procedimento: Nome do procedimento a ser executado na classe, procedimento pode ser enviada no parametros também. Exemplo {"Parametros": [{“Procedimento”:”Imprimir”}]}.
ID (Opcional): Identificador único associado à requisição.
Empresa (Opcional): Identificador da empresa relacionada à requisição.
Parametros (Opcional): Informações adicionais resultantes do processamento.
Nome (Obrigatório quando Parametros): Identificação do parâmetro.
Tipo (Obrigatório quando Parametros): Tipo de dado associado ao parâmetro.
Valor (Obrigatório quando Parametros): Valor do parâmetro, podendo ser uma string ou um stream (no caso do parâmetro "Arquivo").
FALAR SOBRE CADA TIPO DE PARAMETRO E A FORMATAÇÃO:
vJson.AddPair('Nome', FParametros.Itens[I].Nome);
if (FParametros.Itens[I].Tipo in [ptFloat]) then
begin
vJson.AddPair('Tipo', 'float');
vJson.AddPair('Valor', FormatFloat('0.00000000',FParametros.Itens[I].AsFloat));
end else
if (FParametros.Itens[I].Tipo in [ptDateTime]) then
begin
vJson.AddPair('Tipo', 'datetime');
vJson.AddPair('Valor', FormatDateTime('yyyy-mm-dd hh:mm:ss',FParametros.Itens[I].AsDateTime));
end else
if (FParametros.Itens[I].Tipo in [ptDate]) then
begin
vJson.AddPair('Tipo', 'date');
vJson.AddPair('Valor', FormatDateTime('yyyy-mm-dd',FParametros.Itens[I].AsDate));
end else
if (FParametros.Itens[I].Tipo in [ptTime]) then
begin
vJson.AddPair('Tipo', 'time');
vJson.AddPair('Valor', FormatDateTime('hh:mm:ss',FParametros.Itens[I].AsTime));
end else
if (FParametros.Itens[I].Tipo in [ptInteger]) then
begin
vJson.AddPair('Tipo', 'integer');
vJson.AddPair('Valor', FParametros.Itens[I].AsInteger);
end else
if (FParametros.Itens[I].Tipo in [ptLargeint]) then
begin
vJson.AddPair('Tipo', 'largeint');
vJson.AddPair('Valor', FParametros.Itens[I].AsLargeInt);
end else
if (FParametros.Itens[I].Tipo in [ptBoolean]) then
begin
vJson.AddPair('Tipo', 'boolean');
if (FParametros.Itens[I].AsBoolean) then
vJson.AddPair('Valor', 'true')
else
vJson.AddPair('Valor', 'false');
end else
begin
vJson.AddPair('Tipo', 'string');
vJson.AddPair('Valor', FParametros.Itens[I].AsString);
end;
Estrutura do JSON de Resposta
O servidor responderá com um JSON, contendo todos os parâmetros processados, caso seja solicitado um arquivo como PDF, o servidor responderá com um parâmetro STREAM, contendo em Base64 todo o conteúdo do PDF. O JSON segue a seguinte estrutura:
{"Parametros": [
{
"Nome": "Parametros",
"Tipo": "string",
"Valor": ""
},
{
"Nome": "Filtro",
"Tipo": "string",
"Valor": ""
},
{
"Nome": "Arquivo",
"Tipo": "stream",
"Valor": "JVBERi0xLjcNCiXi48/....."
}
]
}
Parâmetros:
Parametros: Informações adicionais resultantes do processamento.
Nome: Identificação do parâmetro.
Tipo: Tipo de dado associado ao parâmetro.
Valor: Valor do parâmetro, podendo ser uma string ou um stream (no caso do parâmetro "Arquivo").
Exemplos
Como exemplo, foi realizada a emissão de uma nota fiscal, para isso, utilizou-se o método POST, passando no parâmetro a sessaoid e no body, enviando o nome da classe, procedimento de emissão e o ID da nota que será emitida.
GetSessao:
GetSessao é necessário devido a comunicação entre cliente e servidor, criar uma sessão para o usuário que está solicitando a requisição, essa comunicação é encerrada e a sessão é destruída caso não haja requisições ao servidor dentro de 1 hora. A sessão será utilizada posteriormente ao requisitar o GetMetodo.
https://localhost:211/GetSessao?Usuario=usuario@BaseDados&SENHA=Senha
No body retornado pelo servidor, conterá o código da sessão, que deverá ser guardado e adicionado junto a requisição GetMetodo.
GetMetodo:
Após solicitar a sessão, será possível através de requisições utilizando o evento GetMetodo, acionar funcionalidades do sistema, como por exemplo: Imprimir um pedidom, liberar um Pedido para aprovação.
A Requisição GetMetodo, é obrigatória o uso de uma sessão válida, caso contrário será apresentado uma mensagem de erro solicitando uma sessão nova.
http://localhost:211/GetMetodo?SessaoID=000000000000000000000000
{
"Classe":"TPHSPedidoVenda",
"Procedimento":"Imprimir",
"ID":1825,
"Empresa":1
}
Também foi realizado a liberação do pedido, seguindo o processo abaixo: