11
2- APIs OData
3- ==========
2+ OData
3+ =====
44
55Diversas classes implementam a integração com APIs OData.
66
7- - :py:class: `bcb.Expectativas `
8- - :py:class: `bcb.PTAX `
9- - :py:class: `bcb.TaxaJuros `
10- - :py:class: `bcb.IFDATA `
11- - :py:class: `bcb.MercadoImobiliario `
7+ - :py:class: `bcb.odata.api. Expectativas `
8+ - :py:class: `bcb.odata.api. PTAX `
9+ - :py:class: `bcb.odata.api. TaxaJuros `
10+ - :py:class: `bcb.odata.api. IFDATA `
11+ - :py:class: `bcb.odata.api. MercadoImobiliario `
1212
13- Todas essas classes herdam de :py:class: `bcb.BaseODataAPI ` que faz a integração
13+ Todas essas classes herdam de :py:class: `bcb.odata.api. BaseODataAPI ` que faz a integração
1414com as APIs OData e organiza a informação em um ``DataFrame ``.
1515
16- :py:class: `bcb.BaseODataAPI `
17- ----------------------------
16+ Veja todas as APIs implementadas em :ref: `APIs OData `.
1817
19- A classe :py:class: `bcb.BaseODataAPI ` possui apenas 2 métodos:
18+ :py:class: `bcb.odata.api.BaseODataAPI `
19+ --------------------------------------
2020
21- - :py:meth: `bcb.BaseODataAPI.describe `: imprime informações da API, como
21+ A classe :py:class: `bcb.odata.api.BaseODataAPI ` possui apenas 2 métodos:
22+
23+ - :py:meth: `bcb.odata.api.BaseODataAPI.describe `: imprime informações da API, como
2224 quais *endpoints * estão disponíveis. Passando o nome do *endpoint *
2325 o método imprime as informações do que é retornado pelo *endpoint * e
2426 o se há algum parâmetro necessário, caso seja uma função.
25- - :py:meth: `bcb.BaseODataAPI.get_endpoint `: imprime informações da API, como
26- quais *endpoints * estão disponíveis.
27+ - :py:meth: `bcb.odata.api.BaseODataAPI.get_endpoint `: retorna um objeto
28+ :py:class: `bcb.odata.api.Endpoint ` referente ao nome do *endpoint * fornecido.
29+
2730
28- :py:class: `bcb.Endpoint `
29- ------------------------
31+ :py:class: `bcb.odata.api. Endpoint `
32+ ----------------------------------
3033
31- Os *endpoints * retornados herdam da classe :py:class: `bcb.Endpoint `,
32- que possui o método :py:meth: `bcb.Endpoint.query `, através do qual é
33- possível realizar as consultas estruturadas na API OData.
34+ Os *endpoints * retornados herdam da classe :py:class: `bcb.odata.api. Endpoint `,
35+ que possui o método :py:meth: `bcb.odata.api. Endpoint.query `, através do qual são
36+ realizadas as consultas estruturadas na API OData.
3437
35- :py:class: `bcb.odata.ODataQuery `
36- --------------------------------
38+ :py:class: `bcb.odata.framework. ODataQuery `
39+ ------------------------------------------
3740
38- :py:meth: `bcb.Endpoints.query ` retorna um objeto :py:class: `bcb.odata.ODataQuery `
41+ :py:meth: `bcb.odata.api. Endpoints.query ` retorna um objeto :py:class: `bcb.odata.framework .ODataQuery `
3942que possui os seguintes métodos.
4043
41- - :py:meth: `bcb.odata.ODataQuery.filter `
42- - :py:meth: `bcb.odata.ODataQuery.select `
43- - :py:meth: `bcb.odata.ODataQuery.orderby `
44- - :py:meth: `bcb.odata.ODataQuery.limit `
45- - :py:meth: `bcb.odata.ODataQuery.skip `
46- - :py:meth: `bcb.odata.ODataQuery.parameters `
47- - :py:meth: `bcb.odata.ODataQuery.collect `
48- - :py:meth: `bcb.odata.ODataQuery.show `
44+ - :py:meth: `bcb.odata.framework. ODataQuery.filter `
45+ - :py:meth: `bcb.odata.framework. ODataQuery.select `
46+ - :py:meth: `bcb.odata.framework. ODataQuery.orderby `
47+ - :py:meth: `bcb.odata.framework. ODataQuery.limit `
48+ - :py:meth: `bcb.odata.framework. ODataQuery.skip `
49+ - :py:meth: `bcb.odata.framework. ODataQuery.parameters `
50+ - :py:meth: `bcb.odata.framework. ODataQuery.collect `
51+ - :py:meth: `bcb.odata.framework. ODataQuery.show `
4952
5053Aplicações
5154----------
5255
56+ As APIs OData sem apresentam destas 2 maneiras:
57+
58+ - :ref: `EntitySets `: consultas estáticas sem parâmetros que retornam dados em formato tabular disponibilizados pela API.
59+ Exemplos de APIs: :ref: `Expectativas ` e :ref: `Taxas de Juros `.
60+ - :ref: `FunctionImports `: consultas dinâmicas com parâmetros que retornam dados em formato tabular disponibilizados pela API.
61+ Um exemplo é a :ref: `API OData de Moedas `.
62+
63+ Identifica-se a maneira pela qual a API se apresenta utilizando o método :py:meth: `bcb.odata.api.BaseODataAPI.describe `
64+ das classes que herdam :py:class: `bcb.odata.api.BaseODataAPI `.
65+
5366API de Expectativas
5467^^^^^^^^^^^^^^^^^^^
5568
56- Vamos ver como isso tudo funciona utilizando a API de expectativas.
69+ A API de Expectativas possui diversos *entity sets *.
70+ Utilizando o método ``describe `` visualizamos todos os *entity sets * disponibilizados pela API.
5771
5872.. ipython :: python
5973
6074 from bcb import Expectativas
6175 em = Expectativas()
6276 em.describe()
6377
64- ``EntitySets ``
65- """"""""""""""
78+ A API de Expectativas possui 8 ``EntitySets ``.
79+ Essa listagem traz os nomes dos ``EntitySets `` e ao passar um destes nomes para o método ``describe `` obtemos a
80+ descrição do ``EntitySet `` que é o *endpoint * que dá acesso a API.
81+
82+ EntitySets
83+ """"""""""
6684
67- Vemos que na API de expectativas tem uma listagem de ``EntitySets ``.
68- ``EntitySets `` são *endpoints * que retornam um conjunto de dados toda vez que
69- são chamados.
85+ Cada ``EntitySet `` é um *endpoint * que retorna um conjunto de dados toda vez que são chamados.
86+ Utilizamos os método ``describe `` para obter informações sobre o que é retornado na solicitação ao *endpoint *.
7087
7188Inspecionando o *endpoint * ``ExpectativaMercadoMensais ``
7289
@@ -75,30 +92,33 @@ Inspecionando o *endpoint* ``ExpectativaMercadoMensais``
7592 em.describe(' ExpectativaMercadoMensais' )
7693
7794
78- ``EntityType ``
79- """"""""""""""
95+ O *endpoint * ``ExpectativaMercadoMensais `` retorna um conjunto de dados
96+ denominado ``br.gov.bcb.olinda.servico.Expectativas.ExpectativaMercadoMensal ``, que é um ``EntityType ``.
97+ Este ``EntityType `` tem as seguintes propriedades:
8098
81- Os dados retornados por um ``EntitySet `` tem um tipo que é o seu ``EntityType ``.
82- Para o *endpoint * ``ExpectativaMercadoMensais `` o tipo retornado é
83- ``br.gov.bcb.olinda.servico.Expectativas.ExpectativaMercadoMensal `` que retorna as
84- seguintes colunas (com seus respectivos tipos):
99+ - ``Indicador<str> ``
100+ - ``Data<str> ``
101+ - ``DataReferencia<str> ``
102+ - ``Media<float> ``
103+ - ``Mediana<float> ``
104+ - ``DesvioPadrao<float> ``
105+ - ``Minimo<float> ``
106+ - ``Maximo<float> ``
107+ - ``numeroRespondentes<int> ``
108+ - ``baseCalculo<int> ``
85109
86- - Indicador<str>
87- - Data<str>
88- - DataReferencia<str>
89- - Media<float>
90- - Mediana<float>
91- - DesvioPadrao<float>
92- - Minimo<float>
93- - Maximo<float>
94- - numeroRespondentes<int>
95- - baseCalculo<int>
110+ Note que cada propriedade tem um tipo associado.
111+ As propriedades são formatadas em colunas no DataFrame retornado como resultado da consulta.
112+ É muito importante conhecer as colunas, pois caso se queira realizar filtros ou ordenação nas
113+ consultas, estes são aplicados às propriedades.
96114
97- É muito importante conhecer as colunas caso queira realizar filtros ou ordenação nas
98- consultas.
115+ A utilização de filtros e ordenação na consulta é fundamental para a realização de consultas eficientes, pois estas
116+ operações são realizadas diretamente no processamento da API e isso reduz o volume de dados trafegados e,
117+ consequentemente, acelera a consulta.
99118
100- Para realizar a consulta é necessário obter o objeto :py:class: `bcb.Endpoint `.
101- Isso é feito executando o método :py:meth: `bcb.Expectativas.get_endpoint `.
119+ Para realizar uma consulta é necessário obter um objeto da classe :py:class: `bcb.odata.api.Endpoint `.
120+ Isso é feito chamando o método :py:meth: `bcb.odata.api.Expectativas.get_endpoint ` com o nome do ``EntitySet `` desejado.
121+ Vamos utilizar o *endpoint * ``ExpectativaMercadoMensais `` como exemplo.
102122
103123.. ipython :: python
104124
@@ -122,7 +142,7 @@ Note que como apenas o ``limit`` foi utilizado, o único
122142parâmetro definido é o ``$top = 10 `` indicando que apenas
12314310 elementos serão retornados.
124144
125- Todos os métodos de :py:class: `bcb.odata.ODataQuery ` retornam a própria
145+ Todos os métodos de :py:class: `bcb.odata.framework. ODataQuery ` retornam a própria
126146instância do objeto, com excessão a ``show `` e ``collect ``.
127147Por essa razão é possível realizar chamadas encadeadas configurando
128148a consulta.
@@ -156,7 +176,7 @@ API de Moedas
156176^^^^^^^^^^^^^
157177
158178Uma outra aplicação é com a API de Moedas que implementa a especificação OData.
159- Utilizando a classe :py:class: `bcb.PTAX ` temos:
179+ Utilizando a classe :py:class: `bcb.odata.api. PTAX ` temos:
160180
161181.. ipython :: python
162182
@@ -165,8 +185,8 @@ Utilizando a classe :py:class:`bcb.PTAX` temos:
165185 ptax.describe()
166186
167187
168- `` FunctionImports ``
169- """""""""""""""""""
188+ FunctionImports
189+ """""""""""""""
170190
171191Note que essa API tem um ``EntitySet `` e seis ``FunctionImports ``.
172192A diferença entre eles é que os ``FunctionImports `` são funções
@@ -210,15 +230,15 @@ Classe ODataAPI
210230O portal de Dados Abertos to Banco Central apresenta diversas APIs OData, são
211231dezenas de APIs disponíveis.
212232A URL com metadados de cada API pode ser obtida no portal.
213- A classe `` ODataAPI ` ` permite acessar qualquer API Odata de posse da sua URL.
233+ A classe :py:class: ` bcb.odata.api. ODataAPI ` permite acessar qualquer API Odata de posse da sua URL.
214234
215235Por exemplo, a API de estatísticas de operações registradas no Selic tem a seguinte URL::
216236
217237 https://olinda.bcb.gov.br/olinda/servico/selic_operacoes/versao/v1/odata/
218238
219239que pode ser obtida no portal de dados abertos no `link <https://dadosabertos.bcb.gov.br/dataset/estatisticas-selic-operacoes >`_.
220240
221- Essa API pode ser diretamente acessada através da classe `` ODataAPI ` `.
241+ Essa API pode ser diretamente acessada através da classe :py:class: ` bcb.odata.api. ODataAPI `.
222242
223243.. ipython :: python
224244
0 commit comments