A plataforma CKAN está disponível também através de sua API (Application Programming Interface) que
fornece acesso programático para o sistema CKAN. A API é muito poderosa e permite que você faça tudo
(e muito mais) que você pode fazer através da interface web.
Usando a API você pode fazer coisas como:




Acessar qualquer bit de informação no CKAN
Alterar qualquer pedaço de informação no CKAN (se você estiver autorizado!)
Criar um novo front-end web inteiro para o CKAN (se quiser!)
A API CKAN segue o estilo RESTful (Transferência de Estado Representativo) e usa JSON por
padrão.
Ao usar a API, você estará realizando solicitações HTTP para URLs como /api/rest/dataset, que retornam
dados em formato JSON.
Existem várias maneiras que você pode acessar esta URL diretamente:
·
Coloque este URL no seu navegador e veja o resultado. Existem plugins para navegadores como
o Firefox e o Chrome que lhe permitem visualizar corretamente arquivos em formato JSON no seu
navegador (por exemplo, JSONView para o Chrome )
·
Use um programa de linha de comando, como onda
·
Escreva um programa em sua linguagem de programação favorita com uma biblioteca de http
para acessar o URL
Alternativamente, você pode acessar a API usando uma das ferramentas dedicadas ou bibliotecas
escritas especificamente para o CKAN. Os seguintes clientes estão disponíveis:
dpm (gerenciador de pacotes de dados) : cliente de linha de comando e uma biblioteca Python (mantidos pela
equipe do núcleo do CKAN)
ckanclient - CKAN Python Cliente : Python (mantido pela equipe do núcleo CKAN)
CKAN Ruby : Ruby
Ckan_client-PHP : PHP
Ckan_client-J : Java
net-CKAN : PERL
ckanjs : Javascript (BackboneJS)
Extensão CKAN Google Refine : o cliente Google Refine lhe permite obter e enviar dados de e para uma
instância CKAN usando o Google Refine.
Para atender os scripts de outros sites ou aplicativos que desejam acessar a API, os dados podem ser
retornados em formato JSONP, onde o dado JSON é "preenchido" com uma chamada de função. A
função é chamada no parâmetro "callback".
Exemplo de pedido normal:
GET
http://catalogo.seplande.al.gov.br/api/rest/dataset/percentual-de-domicilios-particulares-permanentes-com-televisao
retorna: {"name": "Percentual de domicílios
televisão - dados totais de Alagoas ", ...}
particulares
permanentes
com
Exemplo de pedido com callback:
GET
http://catalogo.seplande.al.gov.br/api/rest/dataset/percentual-de-domicilios-particulares-permanentes-com-televisao?callback=json
retorna: json ({"name": "Percentual de domicílios particulares permanentes com
televisão - dados totais de Alagoas", ...});
Este parâmetro pode ser aplicado a todas as requisições GET para a API Search e APIs v1/v2/v3.
O localizador para determinado resource pode ser formado adicionando o caminho relative do resource ao
localizador da API.
Resource Locator = API Locator + Resource Path
Os localizadores para API do CKAN (por versão) são:
·
/api (versão 1)
·
/api/1 (versão 1)
·
/api/2 (versão 2)
Códigos padrão http são utilizados para sinalizar respostas.
Tabela 1 – Códigos de retorno da API CKAN
CÓDIGO
STATUS
200
OK
201
OK and new object created (referred to in the Location header)
301
Moved Permanently
400
Bad Request
403
Not Authorized
404
Not Found
409
Conflict (e.g. name already exists)
500
Service Error
Fonte: Documentação da API do CKAN 1.7.2
Modelos de resources estão disponíveis. Eles são representados por uma variedade de formatos de dados.
Cada local de recursos suporta um número de métodos.
Tabela 2 – Modelos de Resources
MODELO DE RESOURCE
OCALIZAÇÃO
Dataset Register
/rest/dataset
Dataset Entity
/rest/dataset/DATASET-REF
Group Register
/rest/group
Group Entity
/rest/group/GROUP-REF
Tag Register
/rest/tag
Tag Entity
/rest/tag/TAG-NAME
Rating Register
/rest/rating
Dataset Relationships Register
/rest/dataset/DATASET-REF/relationships
Dataset Relationships Register
/rest/dataset/DATASET-REF/RELATIONSHIP-TYPE
Dataset Relationships Register
/rest/dataset/DATASET-REF/relationships/DATASET-REF
Dataset Relationship Entity
/rest/dataset/DATASET-REF/RELATIONSHIP-TYPE/DATASET-REF
Dataset’s Revisions Entity
/rest/dataset/DATASET-REF/revisions
Revision Register
/rest/revision
Revision Entity
/rest/revision/REVISION-ID
License List
/rest/licenses
Fonte: Documentação da API do CKAN 1.7.2
Os valores possíveis para DATASET-REF são ID do dataset, ou o nome do dataset atual.
Os valores possíveis para RELATIONSHIP-TYPE são descritos no formato de dados Relationship-Type.
Em geral:
·
GET a um resource de registro irá listar as entidades desse tipo.
·
GET de um resource entidade irá mostrar as propriedades da entidade.
·
POST de dados de entidade para um resource registo irá criar a nova entidade.
·
PUT de dados de entidade para um resource entidade existente irá atualizá -lo.
Tabela 3 – Formato de dados para a API Model
NOME
FORMATO
Dataset-Ref
Dataset-Name-String (API v1) OR Dataset-Id-Uuid (API v2)
Dataset-List
[ Dataset-Ref, Dataset-Ref, Dataset-Ref, ... ]
{ id: Uuid, name: Name-String, title: String, version: String, url: String, resources: [ Resource, Resource, ...], author:
Dataset
String, author_email: String, maintainer: String, maintainer_email: String, license_id: String, tags: Tag-List, notes: String,
extras: { Name-String: String, ... } } See note below on additional fields upon GET of a dataset.
Group-Ref
Group-Name-String (API v1) OR Group-Id-Uuid (API v2)
Group-List
[ Group-Ref, Group-Ref, Group-Ref, ... ]
Group
{ name: Group-Name-String, title: String, description: String, packages: Dataset-List }
Tag-List
[ Name-String, Name-String, Name-String, ... ]
Tag
{ name: Name-String }
Resource
{ url: String, format: String, description: String, hash: String }
Rating
{ dataset: Name-String, rating: int }
NOME
FORMATO
Pkg-
[ Pkg-Relationship, Pkg-Relationship, ... ]
Relationships
Pkg-
{ subject: Dataset-Name-String, object: Dataset-Name-String, type: Relationship-Type, comment: String }
Relationship
Pkg-Revisions [ Pkg-Revision, Pkg-Revision, Pkg-Revision, ... ]
Pkg-Revision { id: Uuid, message: String, author: String, timestamp: Date-Time }
Relationship- One of: ‘depends_on’, ‘dependency_of’, ‘derives_from’, ‘has_derivation’, ‘child_of’, ‘parent_of’, ‘links_to’,
Type
‘linked_from’.
Revision-List [ revision_id, revision_id, revision_id, ... ]
Revision
{ id: Uuid, message: String, author: String, timestamp: Date-Time, datasets: Dataset-List }
License-List
[ License, License, License, ... ]
License
{ id: Name-String, title: String, is_okd_compliant: Boolean, is_osi_compliant: Boolean, tags: Tag-List, family: String, url:
String, maintainer: String, date_created: Date-Time, status: String }
Fonte: Documentação CKAN API 1.7.2
Para enviar dados de solicitação, criar a string JSON (codificar em UTF8),
colocá-la no corpo da
solicitação e enviar usando PUT ou POST.
Os dados requisitados estarão no corpo da resposta em formato JSON.
Notas:
·
Quando você atualizar um objeto, os campos que você não fornecer permanecerão como eram
antes.
·
·
Para excluir um par chave-valor "extra", fornecer a chave com valor JSON: null
Quando você lê um conjunto de dados, algumas informações adicionais são fornecidas que
você não pode modificar e enviar de volta para a API. Estes campos 'somente leitura' são fornecidos
somente no Dataset GET. São eles:
Tabela 4 – Campos somente leitura do Dataset
CHAVE
DESCRIÇÃO
id
Identificador único do Dataset
revision_id
Identificador da última revisão do pacote
metadata_created
Data de criação do Dataset
metadata_modified
Data da última modificação no Dataset
relationships
Informações sobre os relacionamentos do Dataset
ratings_average
ratings_count
ckan_url
download_url (API v1)
URL completa do Dataset
URL do primeiro resource
isopen
Indicador booleano se o Dataset é aberto de acordo com o Open Knowledge Definition
notes_rendered
Versão HTML do campo de Notas (pode conter código de marcação)
Fonte: Documentação CKAN API 1.7.2
Disponibilizamos uma pequena aplicação JavaScript onde é feita a consulta a API.
Clique aqui para acessá-la.
Ou baixe o código fonte.
Download

- Alagoas em Dados e Informações