Apontador API

Acesso e Autenticação

Tudo o que você precisa saber para integrar nossa API no seu aplicativo

Cadastrando o Aplicativo

Basta completar o formulário de cadastro e o aplicativo ganhará o consumer key e consumer secret, que fazem o papel de "usuário" e "senha" dele na API.

Você pode consultar esses dados a qualquer momento no seu perfil no Apontador.

Chamando a API

A API é um serviço REST: todas as chamadas são feitas através de conexões HTTP no endereço api.apontador.com.br e prefixadas pelo identificador da versão (a atual é a v1).

Ou seja, para acessar o método categories, chame: http://api.apontador.com.br/v1/categories.

Experimente no navegador:

  • Clique aqui e forneça o key como usuário e o secret como senha.

Experimente em PHP:

<html>
  <pre>
    <?php
      // Usamos file_get_contents só para demonstrar - não é 100% recomendado ou aceito
      // pelos servidores. Recomendação: http://php.net/manual/pt_BR/book.curl.php
      $key = "COLOQUE_SEU_CONSUMER_KEY_AQUI";
      $secret = "COLOQUE_SEU_CONSUMER_SECRET_AQUI";
      $chamada = "http://$key:$secret@api.apontador.com.br/v1/categories?type=json";
      $resultado = json_decode(file_get_contents($chamada));
      var_dump($resultado);
    ?>
  </pre>
</html>

Parâmetros e Retorno

As chamadas da API recebem seus parâmetros conforme o verbo HTTP (ex.: na URL para GET, no corpo para POST). Você escolhe se quer o retorno em XML (default) ou JSON (adicionando o parâmetro type=json).

O encoding é sempre UTF-8, e parâmetros na URL devem representar os bytes UTF-8 com "%-encode".

Autenticando: HTTP Basic

Para chamadas que não envolvem outros usuários do Apontador (ex.: busca de locais), seu aplicativo pode usar a autenticação HTTP Basic - que é o que o navegador fez no exemplo acima.

Exemplo: digamos que o consumer key do aplicativo é 123456 e o consumer secret é ABCDEF. Obtenha o valor de "123456:ABCDEF" em Base64 e inclua no header Authorization ao chamar a API, isto é:

Authorization: Basic MTIzNDU2OkFCQ0RFRg==

Autenticando: OAuth

Chamadas que exigem autorização prévia do usuário, para que o seu aplicativo possa agir em nome dele (exemplos: postar avaliações, inserir locais). Para isso você vai usar OAuth, e sugerimos que escolha uma biblioteca entre as opções disponíveis para a sua linguagem de programação.

A biblioteca vai pedir as URLs abaixo, conforme a especificação:

  • Request Token URL:
    http://api.apontador.com.br/v1/oauth/request_token
  • User Authorization URL:
    http://api.apontador.com.br/v1/oauth/authorize
  • Access Token URL:
    http://api.apontador.com.br/v1/oauth/access_token

Seu fluxo deve ser desenhado de forma que, caso o aplicativo não tenha em mãos os tokens de acesso (ou se eles não forem válidos), o usuário seja levado à tela de confirmação de acesso no Apontador.

Consulte a documentação da biblioteca - o processo costuma ser automático, e você só terá que disponibilizar um endereço de retorno (callback) para receber os tokens (e guardá-los para acesso direto dali em diante).

Caso prefira implementar manualmente este fluxo de autenticação, siga as orientações da especificação OAuth.

Chamando via JavaScript (novidade!)

Também é possível chamar os métodos Basic da API diretamente de uma página, usando JavaScript.

Para habilitar este modo você deve preencher o campo "Endereço (URL) do site do Aplicativo" no cadastro do mesmo - a API só aceita pedidos vindos de páginas hospedadas no mesmo host desta URL.

Segue um exemplo de chamada usando a biblioteca JQuery:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src=
      "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
      $.getJSON("https://api.apontador.com.br/v1/search/places/byaddress?callback=?", {
        jsconsumerkey : "COLOQUE_SEU_CONSUMER_KEY_AQUI",
        type : "jsonp",
        city : "Sao Paulo",
        state : "SP",
        term : "Fiesp"
      }, function(data) {
        if (data.search.places.length>0) {
          var place = data.search.places[0].place;
          alert(place.name + "," + place.category.name);
        }
      });
    </script>
  </head>
</html>	

É importante declarar o charset, passar os parâmetros (jsconsumerkey e type=jsonp) e adicionar o ?callback=? na URL. Com isso, o JQuery processa a função de padding do JSONP automaticamente.

Se preferir usar JavaScript "puro", siga este exemplo do Dirceu Pauka Jr.

OAuth sem Servidor (via PIN)

Aplicativos web efetuam a autorização do usuário redirecionando seu navegador para a User Authorization URL (vide acima) e aguardando que ele retorne através do endereço de callback.

Este processo é pouco viável para aplicativos desktop ou em celulares, que não dispõem de um servidor para hospedar este endereço de callback (e nem sempre podem abrir um navegador sem fechar o aplicativo).

A solução nestes casos é fácil: edite os dados do aplicativo no Apontador, informando a seguinte URL de callback:

http://api.apontador.com.br/v1/oauth/callback

Quando for pedir a autorização de um usuário, faça o processo normal, mas chame a User Authorization URL via http, da mesma forma que você chamou a Request Token URL. O retorno dela será uma URL curta, que o seu aplicativo pode abrir em um browser (e/ou pedir para o usuário abrir).

Este callback também fará com que o usuário receba um PIN code, isto é, um número que ele digitará no seu aplicativo. Ela usará este número no lugar do oauth_verifier e seguirá o processo normal, guardando o token e secret finais (que serão usados para chamar a API em nome) localmente.

Tratamento de Erros

Caso a requisição não possa ser atendida por algum motivo, a API retorna a seguinte estrutura (ou sua equivalente JSON), permitindo ao aplicativo verificar a existência do atributo code antes de processar o retorno:

<error>
  <code>1</code>
  <message>Descrição amigável do erro</message>
</error>

Compatibilidade com o Futuro

A API deve ganhar mais funcionalidades ao longo do tempo. Para garantir a compatibilidade com essas mudanças não assuma que os parâmetros do retorno manterão a mesma ordem que apresentam hoje, e considere que podem vir novos parâmetros junto com os atuais.

Estes simples cuidados asseguram a compatibilidade futura, já que a hierarquia dos dados retornados, bem como seus nomes, formatos e obrigatoriedade atuais serão sempre mantidos nas URLs da versão atual.

Nossa sugestão: transforme o retorno em um objeto, ou use algo como XPath - dessa forma, você acessa os retornos de forma hierárquica, contornando o problema.

E agora?

Agora você está pronto para explorar tudo o que a Apontador API é capaz de fazer - vá em frente!