1) O documento apresenta uma API do governo brasileiro sobre compras governamentais. 2) A API tem o objetivo de disponibilizar os dados de forma aberta e padronizada para que desenvolvedores criem aplicações que gerem valor para a sociedade. 3) O documento explica como a API é construída e como realizar consultas aos seus recursos em formatos como JSON, CSV e XML.
Web APIs e dados abertos - API de Compras Governamentais
1. Minicurso – V Encontro Anual de Tecnologia da
Informação
Web APIs e Dados Abertos
{title: “API de Compras Governamentais”,
href: “http://compras.dados.gov.br”,
rel: “caso prático”}
Nitai Bezerra da Silva - @dadosgovbr
2. Objetivos do minicurso
1.Apresentar o potencial das APIs públicas para
que as pessoas desejem usá-las
2.Estimular o desenvolvimento de APPs que
consumam a API e criem valor para sociedade
3.Estimular o desenvolvimento de mais APIs por
outros governos
4. O que são dados abertos?
“Dados são abertos quando qualquer pessoa pode
livremente usá-los, reutilizá-los e redistribuí-los, estando
sujeito a, no máximo, a exigência de creditar a sua autoria e
compartilhar pela mesma licença.”
http://dados.gov.br/dados-abertos/
http://opendefinition.org/
Qualquer um significa qualquer um!
(Sem restrição ao uso comercial, etc.)
4 / 48
5. "O melhor uso que poderá ser feito com seus
dados certamente será feito por outros e não por
você.“
The Open Mind Principle
Permite que a inteligência coletiva crie melhores
formas de trabalhar com os dados do que os
próprios governos poderiam fazer
5 / 48
6. Lei de Acesso à Informação – LAI
12.527/11
Esclarece que é constitucional o direito de
acesso à informação
6 / 48
7. Infraestrutura Nacional de Dados
Abertos
Objetivos:
Proporcionar aos cidadãos, e ao governo, um ponto de acesso central aos dados públicos,
disponível na web.
Coordenar e orientar a padronização no ciclo de vida da informação, em especial no
momento de sua publicação na web.
Incentivar a agregação de valor aos dados públicos e a colaboração com o cidadão na
implementação de novos serviços à sociedade.
Ser uma iniciativa sustentável de Dados Abertos.
Para isso:
Conjunto de padrões, tecnologias, procedimentos e mecanismos de controle necessários para
se publicar dados abertos governamentais, visando seu reuso não só pela sociedade mas
pelo próprio governo. 7 / 48 http://wiki.gtinda.ibge.gov.br/
16. As 5 estrelas dos Dados Abertos
http://5stardata.info/
16 / 48
17. API Web
“É um conjunto de rotinas e padrões estabelecidos por
um software para a utilização das suas
funcionalidades por aplicativos que não pretendem
envolver-se em detalhes da implementação do
software, mas apenas usar seus serviços”
No contexto de desenvolvimento web, uma API,
também chamda de API web, é um conjunto definido
de mensagens de requisição e resposta HTTP,
geralmente expressado nos formatos XML ou JSON
18. Exemplos de APIs
● Twitter
● https://dev.twitter.com/
● Facebook
● https://developers.facebook.com/
● Mais sobre APIs
● http://www.programmableweb.com/
19. APIs para Dados Abertos
● Desenhadas apenas para leitura
● Caches mais duráveis
● Sem controle de acesso
● Maior desacoplamento do sistema em
produção
● Base de dados redundante
● Menos requisitos de segurança
21. http://compras.dados.gov.br
● API de dados abertos das Compras do
Governo Federal - SIASG
● Fornecedores (PF e PJ)
● Licitações
● Contratos
● Tipos de Materiais e Serviços
● ...
24. Tamanho da base de dados
● ~100Gb de dados (descompactados)
● Registros:
● 261.386 fornecedores
● 763.087 licitações (desde 1994)
● 974.014 contratos (desde 1976)
● 226.152 materias e 2.564 serviços
25. Objetivos da API
“Ser o repositório oficial para busca e acesso aos dados
relacionados às compras governamentais dos entes
federais seguindo as melhores práticas de publicação de
dados na web”
● Padronizar os identificadores (URIs) para cada
recurso informacional
● Melhorar o PageRank para enfim aumentar e
democratizar o acesso à informação
● Constituir os pilares de um governo como
plataforma
30. Formatos dos recursos
● JSON
● 1. Facilidade para representar hierarquias 2. Suporta
tipagem de valores 3. Facilidade de consumo (qualquer
linguagem de programação lê com facilidade) 4.
Utilizável diretamente em navegadores (leitura por
javascript) 5. Formato padronizado (RFC 7159 do IETF,
ECMA-404) 6. Possibilidade de definir esquema de
validação 7. Mais leve para processar que o XML
● CSV
● XML
● HTML
32. Formatos dos recursos
● JSON
● CSV
● 1. Simplicidade. Registros em estrutura tabular. 2.
Facilidade de geração (qualquer banco de dados
exporta) 3. Facilidade de consumo (qualquer editor de
planilhas manipula) 4. Sucinto (os arquivos gerados
são menores)
● 1. Falta de padronização do formato 2. Não suporta
tipagem de valores 3. Dificuldade em se representar
ligações entre os dados
● XML
● HTML
34. Formatos dos recursos
● JSON
● CSV
● XML
● 1. Facilidade para representar hierarquias 2. Suporta
tipagem de valores 3. Amplo suporte de ferramentas 4.
Formato padronizado (W3C) 5. Possilidade de definir
esquema de validação
● 1. Prolixo (os arquivos gerados são maiores) 2. Maior
gasto de processamento para geração e consumo em
relação ao JSON
● HTML
36. Formatos dos recursos
● JSON
● CSV
● XML
● HTML
● 1. Formato para leitura humana 2. Possibilita a
indexação do conteúdo por motores de busca 3.
possibilita a injeção de marcadores semânticos
● 1. Estrutura muito heterogenia 2. Não deve ser utilizado
para consumo automatizado
38. Algumas consultas
● Órgãos onde o termo “turismo” faz parte do nome
● http://compras.dados.gov.br/licitacoes/v1/orgaos?nome=turismo
● Uasgs do órgão Ministério do Turismo
● http://compras.dados.gov.br/licitacoes/v1/uasgs?id_orgao=54000
● Contratos da Uasg 540004
● http://compras.dados.gov.br/contratos/v1/contratos?uasg=540004
● Dados do fornecedor Americel S/A
● http://compras.dados.gov.br/fornecedores/doc/fornecedor_pj/01685903000116
● Todos contratos desde fornecedor (Americel S/A)
● http://compras.dados.gov.br/contratos/v1/contratos?cnpj_contratada=01685903000116
● Licitação relacionada ao primeiro contrato desta lista
● http://compras.dados.gov.br/licitacoes/doc/licitacao/54000405000022003
Para todas essas consultas basta alterar o parâmetro para obter
os valores em outro formato: JSON, CSV e XML
39. Consultas avançadas
● Combinando vários parâmetros Ex.:
Fornecedores onde ramo de negócio é (42:
obras de infra-estrutura) e natureza jurídica é
(3: sociedade anônima), ordenando pelo nome
● http://compras.dados.gov.br/fornecedores/v1/fornec
edores?id_ramo_negocio=42 &
id_natureza_juridica=3 &order_by=nome
40. Parâmetros transversair
● order_by
● Todos os campos podem ser utilizados para ordenação dos resultados
● Ex.: Contratos(order_by=data_inicio_vigencia)
● order
● A ordenação pode ser ascendente e descendente
● Ex.: Licitações(..&order=asc)
● offset
● É utilizado para paginar consultas com +500 resultados
● Ex.: Licitações[334..833]
● {data_max, data_min}
● Filtra um intervalo para um campo do tipo data
● Ex.: Contratos[2014-02-01<=data_assinatura<2014-02-03]
41. Tipos de métodos
● Requisição que retorna um subconjunto dos
recursos
● Ex.: Consulta licitações da modalidade “concorrência”
● http://compras.dados.gov.br/licitacoes/v1/licitacoes.html?modalidade=03
● Requisição que retorna um recurso específico
● Ex.: Dados da licitação de id “19300203000000032”
● http://compras.dados.gov.br/licitacoes/doc/licitacao/19300203000000032
44. Padrões/Características da API
● REST – Estilo arquitectural
● JAX-RS – Padrão para criação de API RESTful em Java
● HATEOAS – Característica da arquitetura de aplicativos REST
onde o cliente interage com a rede através de hypermídia
fornecida dinamicamente
● HAL – Formato padrão e simples para hyperlinkar recursos na
API
● Swagger – Padrão simples e aberto para descrever APIs REST
em JSON
● URIs bem desenhadas
45. Padrão de URIs
● URI de uma consulta:
● http://compras.dados.gov.br/contratos/v1/contratos.html?uasg=153229
● URI de um recurso:
● http://compras.dados.gov.br/licitacoes/id/licitacao/15322901000011999
● http://compras.dados.gov.br/licitacoes/doc/licitacao/15322901000011999
46. APIs + motor de busca
● A publicação dos dados também no formato HTML
favorece a indexação dos recursos em motores de
busca (Google, Bing, etc..)
● A implementação fiel da característica HATEOAS do
REST torna todos os recursos alcançáveis pelos
crawlers de indexação
● Enfim os motores de busca levam a muito mais pessoas
o acesso às informações da API
● Exemplo de pesquisa:
https://www.google.com.br/?gws_rd=ssl#safe=off&q=licita%C3%● Note que não é utilizado termo especificando API, ou
outro detalhe da implementação