0% acharam este documento útil (0 voto)
18 visualizações12 páginas

API Rest

O manual descreve a integração do Servidor WebFeeder com aplicações clientes, utilizando a arquitetura REST para comunicação via HTTP. O serviço permite autenticação e retorno de dados em formatos JSON ou XML, com exemplos de requisições e códigos de status HTTP. A documentação inclui detalhes sobre a estrutura de dados retornados, métodos de autenticação e exemplos de conexão em Java.

Enviado por

glisboabotan
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
18 visualizações12 páginas

API Rest

O manual descreve a integração do Servidor WebFeeder com aplicações clientes, utilizando a arquitetura REST para comunicação via HTTP. O serviço permite autenticação e retorno de dados em formatos JSON ou XML, com exemplos de requisições e códigos de status HTTP. A documentação inclui detalhes sobre a estrutura de dados retornados, métodos de autenticação e exemplos de conexão em Java.

Enviado por

glisboabotan
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

API REST

Este manual descreve os passos necessários para efetuar a integração do Servidor WebFeeder
com a aplicação cliente que irá consumir os dados oriundos do mesmo.

Considerações Iniciais

O Web Feeder foi desenvolvido usando a arquitetura REST (Representational State Transfer),
uma técnica de engenharia de software para sistemas hipermídia distribuídos como a World Wide
Web. Está arquitetura é usada para descrever qualquer interface web simples que utiliza XML e
HTTP (ou mesmo YAML, JSON e texto puro), sem as abstrações adicionais dos protocolos
baseados em padrões de trocas de mensagem como o protocolo de serviços web SOAP. O
REST se utiliza do protocolo HTTP diferente de SOAP que cria um novo protocolo sobre o HTTP
e trabalha com classes de retorno que são 5, o número inicial do código de retorno indica a classe
de retorno, por exemplo o retorno 200 é da classe 2 que é sucesso.

Arquitetura de Comunicação

O WebFeeder fornece diversas informações, onde o fluxo da informação é iniciado através da


autenticação do consumidor, o mesmo efetua a autenticação e através do “HTTPSession” gerado
pode-se iniciar o consumo, a cada requisição o tempo de expiração deste “HTTPSession” é
reciclado, sendo de responsabilidade do consumidor efetuar nova autenticação quando o mesmo
identificar que a sessão não é mais valida. A arquitetura de comunicação do WebFeeder permite
que o cliente faça uma requisição, e o mesmo executa a busca desta solicitação de acordo com o
requisitado, processa esta requisição e a devolve no formato desejado.
Padrões Técnicos

O serviço pode ser consumido e ter duas formas de retorno JSON e XML, sendo eles:

1. JSON (JavaScript Object Notation) - é uma das principais notações para intercâmbio de
dados entre aplicativos, que é possível utilizar com mais de 20 linguagens de programação
diferentes. Para maiores informações esta disponível a documentação completa e
exemplos de estruturas no site oficial do Json: [Link] segue abaixo um
exemplo do retorno JSON:

{"Aluno":[ {"nome":"João","notas":[8,9,7]}, {"nome":"Maria","notas":[8,10,7]},


{"nome":"Pedro","notas":[10,10,9]} ] }

2. XML (Extensible Markup Language) - é uma recomendação W3C para gerar linguagens de
marcação para uma necessidade especial, seu propósito principal é a facilidade de
compartilhamento de informações na internet, e a principal característica é de criar uma
infraestrutura única par diversas linguagens. Para maiores informações esta disponível a
documentação completa e exemplos de estruturas no site oficial do XML:

<?xmlversion="1.0"encoding="ISO-8859-1"?> <receitanome="pão"tempo_de_preparo="5
minutos"tempo_de_cozimento="1 hora"> <titulo>Pão simples</titulo> <ingredientes>
<ingredientequantidade="3"unidade="xícaras">Farinha</ingrediente>
<ingredientequantidade="7"unidade="gramas">Fermento</ingrediente>
<ingredientequantidade="1.5"unidade="xícaras"estado="morna">Água</ingrediente>
<ingredientequantidade="1"unidade="colheres de chá">Sal</ingrediente> </ingredientes>
<instrucoes> <passo>Misture todos os ingredientes, e dissolva bem.</passo><passo>Cubra
com um pano e deixe por uma hora em um local morno.</passo> <passo>Misture novamente,
coloque numa bandeja e asse num forno.</passo> </instrucoes> </receita>
Autenticação

O Servidor Web Feeder exige que o cliente possua um sessão válida para efetuar o consumo de
dados do mesmo (Veja no final deste documento um exemplo de conexão).

Para receber os dados, é necessário realizar a autenticação com o servidor Web Feeder, através
do método: SignIn.

A sessão que iremos utilizar para as requisições de consumo será sempre a mesma, quando esta
sessão não conseguir se autenticar, deve executar o mesmo método de login para renovar a
sessão.

A requisição do evento login tem um retorno de uma String contendo “true” ou “false”.

URL de Autenticação:

 [Link]

Para efetuar o consumo de um serviço disponibilizado pelo WebFeeder é necessário enviar uma
requisição utilizando a mesma sessão do evento login.
HTTP Status code

Código Descrição

200 Sucesso

401 Não autorizado

404 Metodo não encontrado

405 Requisição não permitida

408 Requisição retornou timeout

504 Gateway timeout

Para que a requisição venha no formato JSON, não é necessário adicionar nenhum parâmetro,
porém para que a requisição tenha o retorno XML é necessário ao fim da URL adicionar “/xml” .
Exemplo Requisição XML:

 [Link]
Serviços da API
Quote

O serviço retorna os dados referentes ao ativo ou ativos solicitados, o método é do tipo GET.

Formato da Requisição

 [Link]
 [Link]

Exemplo Requisição

 [Link]
 [Link]

Retorno

Campo Descrição

symbol Símbolo do ativo

timeUpdate Data e hora da última atualização

dateTrade Data e hora do último negócio

lastTrade Último preço

previous Preço de fechamento anterior

change Variação no dia

changeMonth Variação no mês

bid Preço na compra

ask Preço na venda

timeLastTrade Data e hora do último negócio

dateTradeObj Data da última modificação

quantity Quantidade do negócio atual


quantityLast Quantidade do último negócio

quantityTrades Quantidade de negócios realizados

volumeAmount Volume quantitativo de negócios

volumeFinancier Volume financeiro de negócios

high Máxima do dia

low Mínima do dia

timeBid Horário da melhor oferta de compra

timeAsk Horário da melhor oferta de venda

volumeBid Volume acumulado das melhores ofertas de compra

volumeAsk Volume acumulado das melhores ofertas de venda

volumeBetterBid Volume da melhor oferta de compra

volumeBetterAsk Volume da melhor oferta de venda

lastTradeLastWeek Preço de fechamento da última semana

lastTradeLastMonth Preço de fechamento do último mês

lastTradeLastYear Preço de fechamento do último ano

playerBid Código da corretora na compra

interest Quantidade de contratos abertos

Situation Estado do ativo

Average Preço médio do dia

execPrice Preço de exercício

tickSize Quantidade de casas decimais do papel

timeLastTradeSting Horário do último negócio

dateLastTradeString Data do último negócio

marketCode Código do mercado

contractMultiplier Fator de multiplicação

volumeAverageLast20Days Volume médio dos últimos 20 dias

marketCap Valor total de todas as ações da empresa

variation7Days Variação semanal


variation1Month Variação mensal

variation1Year Variação anual

variationVolumeInHour Variação em uma hora

variationVolumeToHour Variação na última hora

variationVolumeInDay Variação em um dia

theoryPrice Preço teórico

theoryQuantity Quantidade teórica

loteDefault Lote padrão

minIntervalIncrPrice Incremento mínimo

quotationForm Forma de cotação

adjustmentDay Ajuste

adjustmentPreviousDay Ajuste anterior

Exemplo do retorno

"symbol": "petr4",

"timeUpdate": "15-10-2019 17:33:21",

"dateTrade": "15-10-2019 00:00:00",

"lastTrade": 27.59,

"previous": 27.31,

"change": 1.0252714,

"changeMonth": 0.14519691,

"bid": 27.57,

"ask": 27.59,

"timeLastTrade": "15-10-2019 17:33:21",

"dateTradeObj": "Oct 15, 2019 12:00:00 AM",

"quantity": 300.0,

"quantityLast": 300.0,
"quantityTrades": 36287.0,

"volumeAmount": 3.02238E7,

"volumeFinancier": 8.3612787E8,

"high": 27.88,

"low": 27.31,

"open": 27.31,

"timeBid": "17:35:09",

"timeAsk": "16:27:39",

"volumeBid": 6100.0,

"volumeAsk": 4700.0,

"volumeBetterBid": 100.0,

"volumeBetterAsk": 4700.0,

"lastTradeLastWeek": 27.26,

"lastTradeLastMonth": 27.55,

"lastTradeLastYear": 22.44,

"playerBid": "262",

"interest": 5.6020429E9,

"situation": "0",

"average": 27.665,

"execPrice": 0.0,

"tickSize": 2,

"timeLastTradeSting": "173321",

"dateLastTradeString": "20191015",

"marketCode": 1,

"contractMultiplier": 1.0,

"volumeAverageLast20Days": 4.0803396E7,

"marketCap": 3.72264075E11,

"variation7Days": 0.0,
"variation1Month": 0.0,

"variation1Year": 0.0,

"variationVolumeInHour": 66.247,

"variationVolumeToHour": 74.069,

"variationVolumeInDay": 51.000412,

"theoryPrice": 0.0,

"theoryQuantity": 0.0,

"loteDefault": 100,

"minIntervalIncrPrice": 0.01,

"quotationForm": 1,

"adjustmentDay": 0.0,

"adjustmentPreviousDay": 0.0

}
Exemplo de Conexão (JAVA):

package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class SendRequest {

private static String sessionID = null;

private static String server = "[Link]";


private static String login = "login";
private static String password = "123456";
private static String symbol = "petr4";

public static void main(String[] args) {

sessionID = signIn();

quote(symbol);
}

public static String signIn() {

HttpURLConnection con = null;


String sessionId = null;
try {
String urlParameter = "[Link] + server + "/SignIn?login=" +
login + "&password=" + password;

URL url = new URL(urlParameter);

con = (HttpURLConnection) [Link]();

[Link]("POST");
[Link](true);
[Link](true);
[Link]("Content-Type", "application/x-www-form-
urlencoded");

int httpResult = [Link]();


if (httpResult == HttpURLConnection.HTTP_OK || httpResult > 0) {

BufferedReader in = new BufferedReader(new


InputStreamReader([Link](), "UTF-8"));
StringBuilder builder = new StringBuilder();
String inputLine;
while ((inputLine = [Link]()) != null) {
[Link](inputLine);
}
[Link]();
String msg = [Link]();

sessionId = [Link]("Set-Cookie");

if (msg != "")
return sessionId;

} catch (MalformedURLException e) {
sessionId = null;
[Link]([Link]());
} catch (IOException e) {
sessionId = null;
[Link]([Link]());
} catch (Exception e) {
sessionId = null;
[Link]([Link]());
} finally {
[Link]();
}
return null;
}

public static String quote(String symbol) {

BufferedReader rd = null;
StringBuilder sb = null;
String line = null;
HttpURLConnection con = null;

try {

String server = "[Link]";


String urlParameter = "[Link] + server +
"/services/quotes/quote/" + symbol;

URL url = new URL(urlParameter);


con = (HttpURLConnection) [Link]();

[Link]("GET");
[Link]("Content-Type", "application/x-www-form-
urlencoded");
// [Link]("Accept", "/");
[Link]("Cookie", sessionID);
[Link]();

rd = new BufferedReader(new
InputStreamReader([Link]()));
sb = new StringBuilder();

while ((line = [Link]()) != null) {


[Link](line + '\n');
}

[Link]([Link]());
return [Link]();

} catch (MalformedURLException e) {
[Link]();
} catch (ProtocolException e) {
[Link]();
} catch (IOException e) {
[Link]();
} finally {
[Link]();
}

return "";
}

Você também pode gostar