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

26
Google Data API Sandro Rama Fiorini

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

Page 1: 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.

Google Data API

Sandro Rama Fiorini

Page 2: 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.

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

Page 3: 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.

Introdução

GData API Interface básica para vários serviços

Google Incorpora

Arquitetura RESTAtomRSS

Page 4: 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.

Roteiro Atom REST Google GData API

Operações Concorrência Autenticação Estado Bibliotecas Clientes Exemplo de Cliente

Page 5: 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.

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>

Page 6: 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.

<?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>[email protected]</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>

Page 7: 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.

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

Page 8: 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.

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

Page 9: 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.

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

Page 10: 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.

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

Page 11: 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.

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)

Page 12: 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.

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>

Page 13: 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.

GData API: POSTPOST /myFeed

<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <author> <name>Elizabeth Bennet</name> <email>[email protected]</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>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text">This is my entry</content></entry>

Page 14: 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.

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>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text">This is my entry</content> </entry></feed>

Page 15: 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.

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>[email protected]</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>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my first entry. </content></entry>

Page 16: 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.

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

200 OK

Page 17: 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.

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>

Page 18: 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.

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

Page 19: 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.

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

Page 20: 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.

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

Page 21: 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.

GData API: Estado

Manutenção de estado de duas formasVia CookiesVia Tokens

Page 22: 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.

Bibliotecas Clientes

Java Phyton .NET JavaScript/AJAX

JSON no lugar de XML PHP

Page 23: 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.

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

Page 24: 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.

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

Page 25: 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.

Aplicação de Teste (2)

Page 26: 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.

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