CamaraDosDeputados / dados-abertos

Repositório do serviço de Dados Abertos da Câmara. Consulte as "Issues" para atendimento a dúvidas e sugestões.
http://dadosabertos.camara.leg.br
195 stars 13 forks source link

Retornar mais dados em /eventos/{id}/pauta #309

Open EquipeDadosAbertosCD opened 3 years ago

EquipeDadosAbertosCD commented 3 years ago

Olá Fabricio,

Gostaria de dar uma sugestao para economizar nas chamadas aos end-points. Que os objetos referenciados viessem mais preenchidos.

Por exemplo: https://dadosabertos.camara.leg.br/api/v2/eventos/60754/pauta

retorna uma lista de itens que podem ter uma proposicao atrelada:

<pauta>
<regime>Ordinária (Art. 151, III, RICD)</regime>
<codRegime>14</codRegime>
<ordem>5</ordem>
<proposicao_>
<id>1514151</id>
<uri>https://dadosabertos.camara.leg.br/api/v2/proposicoes/1514151</uri>
<siglaTipo>PL</siglaTipo>
<codTipo>139</codTipo>
<numero>2021</numero>
<ano>2015</ano>
<ementa>Condiciona a realização de entrevistas ou exibição de imagens de presos sob custódia do Estado no interior de delegacias ou estabelecimentos prisionais à prévia autorização judicial.</ementa>
</proposicao_>
<uriProposicaoRelacionada/>
<situacaoItem>Vista concedida</situacaoItem>
<uriVotacao/>
</pauta>

E vou exibir o resultado isso numa lista (com 40 itens, por exemplo), mas o normal de um PL eh que ele seja mencionado juntamente com o(s) autor(es). Quando a consulta eh sobre 1 só proposicao, até que nao é muito prejuízo fazer uma chamada adicional pra pegar os autores, mas 40 chamadas adicionais é bem caro. Da mesma forma, quero saber quem é o ultimo relator da materia (aí tenho que fazer uma chamada a /proposicoes pra pegar essa informacao). E, se quero colocar o partido do autor, isso significa mais uma chamada pro endpoint /deputado pra cada um dos deputados, pq o endpoint /proposicao/9999/autores nao tras a informacao de partido.

Pra mostrar a pauta da CTASP dessa semana, foram essas chamadas:

https://dadosabertos.camara.leg.br/api/v2/eventos/60771  x1   (dados da reuniao)
https://dadosabertos.camara.leg.br/api/v2/eventos/60771/pauta  (retorna 42 itens em pauta)
https://dadosabertos.camara.leg.br/api/v2/proposicoes/99999   x42 (pra pegar os dados de cada proposicao))
https://dadosabertos.camara.leg.br/api/v2/proposicoes/99999/autores   x42 (pra pegar o primeiro autor das proposicoes)
https://dadosabertos.camara.leg.br/api/v2/deputados/99999   x42 (pra pegar o partido do primeiro autor)
https://dadosabertos.camara.leg.br/api/v2/proposicoes/99999/autores   x42 (pra pegar o primeiro autor das proposicoes)
https://dadosabertos.camara.leg.br/api/v2/deputados/99999 x33 itens que sao PL - pra pegar o Relator

Resumindo, foram 286 chamadas.

Isso ai foi so um exemplo, mas acho que tem varios pontos que os endpoints poderiam penetrar um pouco mais nos dados. Uma coisa eh acessar uma base SQL, como deve estar sendo feito aí.. outra eh ficar fazendo chamadas HTTP.

Originally posted by @flaviolenz in https://github.com/CamaraDosDeputados/dados-abertos/issues/297#issuecomment-809705476

EquipeDadosAbertosCD commented 3 years ago

Olá, @flaviolenz !

É muito frequente -- mas muito mesmo -- que usuários peçam que o resultado de um determinado endpoint seja estendido para abrigar dados que são úteis para suas aplicações. É o eterno dilema da granularidade nas APIs. Se todos esses pedidos forem atendidos, logo aparecerão outros usuários dizendo que os retornos são pesados demais, gastam a banda/cota do usuário do aplicativo, e são cheios de informações que não são úteis para suas aplicações!

Há muito tempo são previstos na especificação do Dados Abertos alguns parâmetros de projeção, que permitem que o usuário controle em até certo grau os campos que serão retornados (bem menos do que uma API GraphQL, mas bem mais fácil de usar). Ainda não tivemos condições para implementá-los, porém. E não sei se eles resolveriam a questão que você coloca, pois sua sugestão se refere a "entidades cruzadas", digamos assim, e que nem sempre se comunicam bem: os dados de proposições, por exemplo, não têm os partidos dos autores porque várias proposições não são de parlamentares, mas de órgãos internos ou externos.

A depender da sua aplicação, eu lhe sugeriria criar um "cache" de dados sobre as proposições, ou mesclar os dados da API com os dados bem mais volumosos dos arquivos para download. De toda forma eu espero que um dia consigamos ter no Portal de Dados Abertos algum recurso que nos permita discutir com a comunidade cada endpoint e cada arquivo e o conteúdo de cada um deles, para podermos ter estimativas mais claras sobre as necessidades de dados mais frequentes entre os usuários e, assim, fazermos ajustes na granularidade dos dados.

Obrigado e abraço!

Fabricio Rocha Equipe Dados Abertos - Câmara

flaviolenz commented 3 years ago

Ola Fabricio,

Obrigado pela resposta.

De fato o cache eh o workaround que implementei. Mas sempre na insegurança de estar com uma informação desatualizada até a expiração.

Existe algo que me dê os trâmites/atualização do último dia/hora/minuto?

Abraço

F. Lenz

Em seg., 5 de abr. de 2021 17:57, Serviço de Dados Abertos - Câmara dos Deputados @.***> escreveu:

Olá, @flaviolenz https://github.com/flaviolenz !

É muito frequente -- mas muito mesmo -- que usuários peçam que o resultado de um determinado endpoint seja estendido para abrigar dados que são úteis para suas aplicações. É o eterno dilema da granularidade nas APIs. Se todos esses pedidos forem atendidos, logo aparecerão outros usuários dizendo que os retornos são pesados demais, gastam a banda/cota do usuário do aplicativo, e são cheios de informações que não são úteis para suas aplicações!

Há muito tempo são previstos na especificação do Dados Abertos alguns parâmetros de projeção, que permitem que o usuário controle em até certo grau os campos que serão retornados (bem menos do que uma API GraphQL, mas bem mais fácil de usar). Ainda não tivemos condições para implementá-los, porém. E não sei se eles resolveriam a questão que você coloca, pois sua sugestão se refere a "entidades cruzadas", digamos assim, e que nem sempre se comunicam bem: os dados de proposições, por exemplo, não têm os partidos dos autores porque várias proposições não são de parlamentares, mas de órgãos internos ou externos.

A depender da sua aplicação, eu lhe sugeriria criar um "cache" de dados sobre as proposições, ou mesclar os dados da API com os dados bem mais volumosos dos arquivos para download. De toda forma eu espero que um dia consigamos ter no Portal de Dados Abertos algum recurso que nos permita discutir com a comunidade cada endpoint e cada arquivo e o conteúdo de cada um deles, para podermos ter estimativas mais claras sobre as necessidades de dados mais frequentes entre os usuários e, assim, fazermos ajustes na granularidade dos dados.

Obrigado e abraço!

Fabricio Rocha Equipe Dados Abertos - Câmara

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/CamaraDosDeputados/dados-abertos/issues/309#issuecomment-813645546, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACQ3S7LPHMA4OX42X6EGI5TTHIP4VANCNFSM42NND4DA .