Primeira atualização de 2019 também criou novos arquivos, reorganizou as listas de valores de referência e revisou nomes de campos e parâmetros de busca
Logo antes do início da legislatura 56 da Câmara dos Deputados, a equipe do Dados Abertos publicou uma atualização da nova API e do sistema de geração de arquivos para download, com a correção de vários bugs e a implementação de alterações e novos conjuntos de dados há muito tempo aguardados. Mudanças no próprio ciclo de desenvolvimento devem ser feitas a partir desta versão – aliás, este é um dos motivos do salto na numeração de revisão entre as versões.
Foi implementado na API o endpoint /partidos/{id}/membros
, que, sem parâmetros, lista os deputados que são membros de um partido no momento da requisição. Mas também é possível usar os parâmetros idLegislatura
ou dataInicio
e dataFim
para obter uma lista de deputados do partido {id}
no intervalo de tempo desejado. É a primeira vez que esta informação se torna disponível nos serviços da Câmara na internet, e é um passo inicial para a implementação de outros recursos "de histórico" previstos pela especificação, como /deputados/{id}/historico
.
Um usuário do Dados Abertos na própria Câmara, o colega Francisco Cardozo, chamou nossa atenção, em dezembro, para a existência de dados de classificação das proposições por áreas temáticas, tais como "Direito Civil e Processual Civil" ou "Arte, Cultura e Religião". Já vínhamos publicando os dados de proposições com um campo keywords
, com as palavras-chave usadas para indexação das proposições, e soubemos que alguns usuários já as utilizam para fazer seus próprios esquemas de agrupamento temático. Os novos dados, porém, permitem que esse agrupamento seja feito com a classificação definida pelo Centro de Documentação e Informação da Câmara, sob as regras do thesaurus oficial da casa.
Foi criado um novo conjunto de arquivos para download, proposicoesTemas-{ano}.*
, para ligar os identificadores de proposições aos identificadores de áreas temáticas. Proposições podem ser classificadas com mais de uma área temática, e nos formatos de arquivo para planilhas isso exige que haja mais de um registro (linha) por proposição. Como temos tentado manter as respostas da API parecidas com as dos arquivos, optamos por criar nela um novo endpoint, /proposicoes/{id}/temas
, em vez de incorporar a lista de temas ao retorno de /proposicoes/{id}
. Também na API foi criado o parâmetro de busca codTema
para o endpoint /proposicoes
, que recebe um ou mais dos identificadores numéricos das áreas temáticas. Esses identificadores podem ser obtidos no endpoint /referencias/proposicoes/codTema
. Aliás...
Os endpoints de proposições passaram por várias alterações desde a última atualização. Uma delas não exige adaptações dos usuários, mas esperamos que seu efeito seja bem sentido: foram otimizadas as consultas às bases de dados, e um ganho de desempenho deverá ser sentido, principalmente, nas buscas em /proposicoes
que são feitas com os mesmos critérios por diferentes usuários.
O parâmetro idAutor
do endpoint /proposicoes
foi substituído por idDeputadoAutor
. Por enquanto só é possível selecionar proposições que sejam de autoria de um ou mais deputados, para os quais a API tem identificadores exclusivos; mas proposições também podem ser apresentadas por senadores, por outros poderes da República, por Assembleias Legislativas estaduais e por cidadãos. Em alguma das próximas atualizações, será implementado um parâmetro para permitir a busca por diferentes tipos de autores.
O endpoint /proposicoes/{id}/tramitacoes
passa a suportar os parâmetros dataInicio
e dataFim
– outra sugestão do nosso colega Francisco Cardozo.
Eventos como audiências públicas podem ser realizados por mais de um órgão. Atualmente a lista de órgãos responsáveis por um evento é incorporada a /eventos/{id}
, mas esta lista aninhada, tão trivial para formatos hierárquicos como JSON e XML, é problemática para os formatos de planilha nos quais os arquivos do Dados Abertos também são fornecidos. O novo subrecurso /eventos/{id}/orgaos
permitirá que, em uma atualização futura, a lista possa ser desmembrada do retorno de /eventos/{id}
. Recomendamos aos nossos usuários que já passem a utilizar o novo endpoint em suas aplicações.
Todo o conjunto de dados /referencias
foi reorganizado para, como bem definiu o usuário Hugo Benício no nosso fórum no GitHub em 03/10/2018, torná-lo "mais RESTful", e mais coerente com a organização adotada em toda a API.
O papel do endpoint /referencias
é fornecer listas de valores usados para busca ou qualificação de dados, como as situações de exercício de um deputado, os tipos de proposições e os tipos de eventos. Esses valores são usados principalmente em parâmetros de filtragem e seleção em diversos endpoints que retornam listas, como /deputados
e /eventos
.
Na nova organização, o segundo elemento do path passa a ser o nome de um dos conjuntos de dados da API, e o terceiro elemento do path passa a ser o nome de um parâmetro ou campo usado neste conjunto de dados. Por exemplo: os antigos endpoints /referencias/tiposEvento
e /referencias/situacoesEvento
passam a ser /referencias/eventos/codTipoEvento
e /referencias/eventos/codSituacaoEvento
. Em outras palavras: em geral, abaixo de /referencias
se segue o nome de um dos endpoints principais da API, e em seguida o nome de algum parâmetro que exige valores específicos; e a resposta é uma lista com esses valores. A explicação é mesmo enrolada, mas uma olhada na página de documentação da API mostra que os endereços do endpoint ficaram mais claros e até automatizáveis.
Além disso, já nos endpoints de dois níveis passam a ser retornadas todas as listas que também são fornecidas individualmente como subrecursos. Por exemplo, basta uma chamada a /referencias/proposicoes
para que se obtenha como retorno as listas também fornecidas por /referencias/proposicoes/siglaTipo
, /referencias/proposicoes/siglaTipo
, /referencias/proposicoes/codSituacao
e /referencias/proposicoes/codTema
.
Os antigos endpoints continuam funcionando temporariamente, e os novos endpoints já incorporam os novos nomes "cod*" dos parâmetros e campos.
Foi revista a nomenclatura de campos e parâmetros de query string em vários endpoints da API, e a revisão está sendo aplicada também aos arquivos do Dados Abertos. Alguns campos e parâmetros eram usados para designar valores qualificadores de dados, mas vinham usando o prefixo "id", que é usado para identificadores de recursos na API. Estes campos foram renomeados para usar o prefixo "cod": por exemplo, o parâmetro idTipoOrgao
que era usado para filtrar os resultados de /eventos
e /orgaos
passa a se chamar codTipoOrgao
.
/eventos
idSituacao
passa a ser codSituacao
idTipoOrgao
vira codTipoOrgao
idTipoEvento
passa a ser codTipoEvento
idTipoOrgao
passa a codTipoOrgao
/orgaos
e /orgaos/{id}
idTipoOrgao
passa a ser codTipoOrgao
idTipoOrgao
passa a ser codTipoOrgao
/orgaos/{id}/membros
, /legislaturas/{id}/mesa
e /deputados/{id}/orgaos
idPapel
passa a ser codTitulo
papel
passa a ser titulo
/proposicoes
idSituacao
passa a ser codSituacao
/proposicoes
e /proposicoes/{id}/relacionadas
idTipo
passa a codTipo
/proposicoes/{id}/tramitacoes
idTipoTramitacao
torna-se codTipoTramitacao
idSituacao
passa a codSituacao
/deputados/{id}/despesas
idDocumento
vira codDocumento
idLote
torna-se codLote
idTipoDocumento
passa a ser codTipoDocumento
Devido ao comportamento padrão da plataforma usada para a API, parâmetros de query string que não eram suportados vinham sendo silenciosamente ignorados. Isso costumava causar surpresas desagradáveis: uma busca em /eventos
com os parâmetros dataHoraInicio
e dataHoraFim
, por exemplo, não sairia como o imaginado, porque neste endpoint os parâmetros de data e horário são separados.
Para evitar problemas assim, o comportamento foi reconfigurado para que seja retornado um erro 400 se houver na query string um parâmetro desconhecido.
A todos que colaboraram para esta atualização com suas sugestões, críticas e relatos de problemas, muito obrigado e mantenham contato!