Google Data API Sandro Rama Fiorini
Introdução Missão Google: “organizar a informação do mundo inteiro e fazê-la universalmente acessível e útil”. Universalmente acessível Fora do contexto do navegador
Introdução GData API Interface básica para vários serviços Google Incorpora Arquitetura REST Atom RSS
Roteiro Atom REST Google GData API Operações Concorrência Autenticação Estado Bibliotecas Clientes Exemplo de Cliente
Atom Formato XML para publicação de informações Proposta de padrão RFC 4287 Conceitos Feeds Metadados Entradas (Entry) Extensível (metadados do feed)
Example Feed A subtitle T18:30:02Z John Doe urn:uuid:60a76c80-d399-11d9-b91C e0af6 Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text. Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Arquitetura REST Representational State Transfer Termo proposto no ano 2000, na tese de doutorado de Roy Fielding, um dos criadores do protocolo HTTP Modelo de arquitetura baseado em Recursos Transições de estado
Arquitetura REST: Princípios Estado e funcionalidade divididos em recursos Cada recurso é endereçado unicamente com um sintaxe universal (como URI) Todos os recursos dividem um interface comum que consistindo de: Um conjunto restrito de operações bem definidas Um conjunto restrito de tipos de conteúdo Baseado em um protocolo que é Cliente servidor Stateless Cacheable Dividio em camadas
REST: Tipos RESTful Segue todos os princípios Melhor exemplo: WWW Recursos: paginas web Transição de estado: links Protocolo HTTP Requisições GET, PUT, POST, e DELETE RESTafarian Segue alguns princípios XML RPC Cookies
REST: Comparação com RPC getUser() addUser() removeUser() updateUser() getLocation() addLocation() removeLocation() updateLocation() listUsers() listLocations() findLocation() findUser() GET PUT DELETE
Google GData API Arquitetura REST RESTafarian Recursos descritos em XML Atom (padrão) e RSS Suporta extensões Acesso via HTTP Requisições GET, PUT, POST, e DELETE Atom Publishing Protocol (APP)
GData API: GET GET /myFeed200 OK Foo T16:25:00-08:00 Jo March
GData API: POST POST /myFeed Elizabeth Bennet Entry 1 This is my entry 201 CREATED 1 <link rel="edit“ href=“ /> T16:26:03-08:00 Elizabeth Bennet Entry 1 This is my entry
GData API: GET (consulta) GET /myFeed?q=This 200 OK Foo T16:26:03-08:00 Jo March T16:26:03-08:00 Elizabeth Bennet Entry 1 This is my entry
GData API: PUT PUT /myFeed/1/1/ 1 <link rel="edit“ href=" /> T16:28:05-08:00 Elizabeth Bennet Entry 1 This is my first entry. 200 OK 1 <link rel="edit" href=" /> T16:28:05-08:00 Elizabeth Bennet Entry 1 This is my first entry.
GData API: DELETE DELETE /myFeed/1/2/ 200 OK
Exemplo: Picasa <entry xmlns=' xmlns:media=' xmlns:gphoto=' Trip To Italy This was the recent trip I took to Italy. Italy public true italy, vacation <category scheme=' term='
GData API: Consulta Modelo intencionalmente simples Consultas representadas como HTTP URIs Não existe maneira de relacionar itens Ordenação depende da implementeção Protocolo extensível Exemplo: 19T15:30:00&published-max= T15:30:00
GData API: Concorrência Concorrência otimista Controle de versão Identificador Se um cliente tenta fazer uma alteração de uma entrada que já foi alterada, o acesso é negado. Negação de atualização: 409 Conflict Seguido do atual estado da entrada Alguns serviços não suportam esse modelo
GData API: Autenticação Para clientes desktop: ClientLogin Aplicativo pergunta ao usuário as suas credenciais e as envia ao Google. Google retorna um token que é utilizado nas interações seguintes Para clientes Web: AuthSub Semelhante ao ClientLogin O usuário informa as suas credenciais a um serviço web da Google Não passa pelo aplicativo web Mais seguro
GData API: Estado Manutenção de estado de duas formas Via Cookies Via Tokens
Bibliotecas Clientes Java Phyton.NET JavaScript/AJAX JSON no lugar de XML PHP
Java: Exemplo Classes que correspondem as entidades e tipos de dados da API com.google.gdata.data.Feed com.google.gdata.data.Entry Especializações para cada serviço com.google.gdata.data.photos.PhotoFeed Extensível
Aplicação de Teste (1) Blogger armazena fotos no Picasa, mas... Não permite postar fotos que já estejam no Picasa Aplicativo Java para fazer isso Mashup
Aplicação de Teste (2)
Conclusão Ótima iniciativa Mashups Abordagem pragmática Contraste com SOAP+WSDL Documentação razoável Bibliotecas cliente Biblioteca Java ainda precisa de um polimento