Google Data API Sandro Rama Fiorini. Introdução Missão Google: “organizar a informação do...

Post on 07-Apr-2016

234 views 0 download

Transcript of Google Data API Sandro Rama Fiorini. Introdução Missão Google: “organizar a informação do...

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 RESTAtomRSS

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

<feed>

(metadados do feed)

<entry> ...

</entry><entry>

...</entry>...

</feed>

<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom">

<title>Example Feed</title> <subtitle>A subtitle.</subtitle> <link href="http://example.org/"/> <updated>2003-12-13T18:30:02Z</updated> <author>

<name>John Doe</name> <email>johndoe@example.com</email>

</author> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>

<entry> <title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <content>Some text.</content>

</entry><entry>

<title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <content>Some text.</content>

</entry></feed>

Arquitetura REST

Representational State TransferTermo 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()

http://example.com/users/ http://example.com/users/JohnDoe http://example.com/findUserForm http://example.com/locations/ http://example.com/locations/PortoAlegre http://example.com/findLocationForm

GET http://example.com/users/ PUT http://example.com/users/MaryJane DELETE http://example.com/users/JohnDoe

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: GETGET /myFeed 200 OK

<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom"> <title>Foo</title> <updated>2006-01-23T16:25:00-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href="/myFeed" rel="self"/></feed>

GData API: POSTPOST /myFeed

<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my entry </content></entry>

201 CREATED

<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <id>1</id> <link rel="edit“ href=“http://example.com/myFeed/1/1/” /> <updated>2006-01-23T16:26:03-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type="text">Entry 1</title> <content type="text">This is my entry</content></entry>

GData API: GET (consulta)GET /myFeed?q=This 200 OK

<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom"> <title>Foo</title> <updated>2006-01-23T16:26:03-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href="/myFeed" rel="self"/> <entry> <id>1</id> <link rel="edit" href="http://example.com/myFeed/1/1/"/> <updated>2006-01-23T16:26:03-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type="text">Entry 1</title> <content type="text">This is my entry</content> </entry></feed>

GData API: PUTPUT /myFeed/1/1/

<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <id>1</id> <link rel="edit“ href="http://example.com/myFeed/1/1/“ /> <updated>2006-01-23T16:28:05-08:00</updated>

<author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my first entry. </content></entry>

200 OK

<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <id>1</id>

<link rel="edit" href="http://example.com/myFeed/1/2/“ />

<updated>2006-01-23T16:28:05-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>liz@gmail.com</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my first entry. </content></entry>

GData API: DELETE DELETE /myFeed/1/2/

200 OK

Exemplo: Picasa<entry xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gphoto='http://schemas.google.com/photos/2007'> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <gphoto:location>Italy</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> <gphoto:timestamp>1152255600000</gphoto:timestamp> <media:group> <media:keywords>italy, vacation</media:keywords> </media:group> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album'></category></entry>

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:

http://www.example.com/feeds/jo?q=travel+Paris&published-min=2005-04-19T15:30:00&published-max=2006-04-19T15: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 formasVia CookiesVia 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 <atom:feed> com.google.gdata.data.Feed <atom:entry> 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