Exemplo de Consulta de Produto Com PHSYS API
Introdução
Imagine que você queira consultar informações de produtos cadastrados no PHERP a partir de outro sistema, aplicativo ou integração externa. Para isso, você pode criar um Script Específico e configurá-lo nos parâmetros de um endpoint na PHSYS API.
O exemplo abaixo, chamado C_ConsultarProdutos, demonstra justamente como esse processo funciona: recebendo dados em JSON, interpretando os códigos enviados, realizando a consulta no cadastro de produtos e retornando as informações encontradas ao cliente em formato JSON.
Modelo de Integração Personalizado
Este endpoint executa diretamente o procedimento interno C_ConsultarProdutos, onde o desenvolvedor implementa o tratamento da requisição. O body já deve conter exclusivamente os dados esperados pelo procedimento, uma vez que o endpoint sabe previamente qual método será executado.
No processamento interno:
- O sistema lê o JSON enviado.
- Percorre a lista de produtos informados.
- Consulta os dados no cadastro de produtos.
- Monta o JSON de retorno dinamicamente.
- Retorna as informações encontradas.
Parâmetros fixos podem ser definidos no cadastro do endpoint e serão enviados automaticamente ao procedimento.
Modelo Integração
Parâmetros
Como Realizar a Requisição
A chamada ao endpoint C_ConsultarProdutos deve ser realizada utilizando o método HTTP POST, enviando o conteúdo em formato JSON no corpo da requisição (body).
Cabeçalhos Necessários
A requisição deve incluir o seguinte cabeçalho:
Content-Type: application/json
Esse cabeçalho informa ao servidor que o conteúdo enviado é um JSON válido.
Estrutura da Requisição
A URL deve seguir o padrão:
http://<servidor>:<porta>/api/C_ConsultarProdutos
Exemplo típico:
http://localhost:211/api/C_ConsultarProdutos
Corpo da Requisição (Body)
O body deve conter uma lista de produtos a serem consultados. Cada item da lista deve conter o código do produto.
Exemplo:
{
"Protudos": [
{ "Codigo": "5" },
{ "Codigo": "30" }
]
}
Exemplo de Envio utilizando Curl
curl -X POST "http://localhost:211/api/C_ConsultarProdutos" ^
-H "Content-Type: application/json" ^
-d "{
\"Protudos\": [
{ \"Codigo\": \"5\" },
{ \"Codigo\": \"30\" }
]
}"
Resposta da Requisição
O retorno é definido pelo parâmetro:
ParamByName('Result').AsString := <JSON de retorno>;
Exemplo de Resposta
{
"Produtos": [
{
"NOME": "Mouse",
"LARGURA": "10",
"COMPRIMENTO": "15"
}
]
}
Exemplo de Script
procedure C_ConsultarProdutos;
var
Q:TPHQuery;
TextJson:String;
JsonObj: TPHJson;
I: Integer;
begin
JsonObj := TPHJson.Create;
try
JsonObj.LerJson(GetBody);
Q := NewPHQuery;
try
for I := 0 to JsonObj.ElementoDoNome('Protudos').Count - 1 do
begin
Q.Clear;
Q.Add('SELECT NOME, '+
' LARGURA, '+
' COMPRIMENTO ' +
'FROM PRODUTOS ' +
'WHERE CODIGO = :COD');
Q.ParamByName('COD').AsInteger :=
StrToInt(JsonObj.ElementoDoNome('Protudos')
.Linha(I)
.ElementoDoNome('Codigo')
.Texto);
Q.Open;
if not (Q.Vazia) then
begin
if (TextJSON <> '') then
TextJSON := TextJSON + ', ';
TextJSON := TextJSON + '{ ' +
'"NOME" : "' + Q.FieldByName('NOME').AsString + '",' +
'"LARGURA" : "' + Q.FieldByName('LARGURA').AsString + '",' +
'"COMPRIMENTO" : "' + Q.FieldByName('COMPRIMENTO').AsString + '"' +
'}';
end;
end;
ParamByName('Result').AsString :=
'{ "Produtos": [' + TextJSON + '] }';
finally
Q.Free;
end;
finally
JsonObj.Free;
end;
end;