consumindo apis rest com ruby
TRANSCRIPT
Consumindo APIs REST com Ruby
Guilherme CavalcantiLíder técnico, plataforma de aplicativos
Thursday, 31 January 13
REST
Thursday, 31 January 13
Relembrando: REST
• Define a comunicação em sistemas distribuidos
• Padrões utilizados na comunicação
Thursday, 31 January 13
REST is about
• Recursos
• Representações
• Interface uniforme
• Hypermedia
Thursday, 31 January 13
Recurso
• São as entidades do sistema
• Usuário, Matrícula, Aula, Post, etc.
• Conceito abstrato
• Recurso != Representação
• Um recurso pode ser representado de diversas formas
Thursday, 31 January 13
Recurso
{ "id": 4, "login": "guiocavalcanti", "first_name": "Guilherme", "last_name": "Cavalcanti", "birth_localization": "Recife, Brasil", "friends_count": 175, "localization": "Recife, Brasil", "email": "[email protected]", "social_networks": [ { "name": "linkedin", "profile": "http://br.linkedin.com/in/guiocavalcanti" }, { "name": "twitter", "profile": "http://www.twitter.com/guiocavalcanti" } ], "thumbnails": [ { "size": "32x32",
GET /api/me HTTP/1.1
Thursday, 31 January 13
Interface uniforme
• As ações para operar um recurso são as mesmas
• criar um Post no mural
• criar um Disciplina
Thursday, 31 January 13
Interface uniforme
POST /api/users/4/statuses HTTP/1.1Host: redu.com.brConnection: keep-aliveCache-Control: no-cachePragma: no-cacheAccept: application/jsonAuthorization: OAuth XXXContent-Type: application/json
{ "status" : { "text" : "API 101" } }
Thursday, 31 January 13
Interface uniforme
POST /api/courses/19/spaces HTTP/1.1Host: redu.com.brConnection: keep-aliveCache-Control: no-cachePragma: no-cacheAccept: application/jsonAuthorization: OAuth XXXContent-Type: application/json
{ "space" : { "name" : "Minha Disciplina" } }
Thursday, 31 January 13
Hypermedia
• Uma API REST deve se comportar como uma página web
• Cada página contém referências para outras páginas que são importantes naquele contexto
Thursday, 31 January 13
Hypermedia
"links": [ { "href": "http://www.redu.com.br/api/users/guiocavalcanti/statuses/timeline", "rel": "timeline" }, { "href": "http://www.redu.com.br/api/users/guiocavalcanti/contacts", "rel": "contacts" }, { "href": "http://www.redu.com.br/api/users/guiocavalcanti/statuses", "rel": "statuses" }, { "href": "http://www.redu.com.br/api/users/guiocavalcanti/chats", "rel": "chats" }, { "href": "http://www.redu.com.br/api/users/guiocavalcanti/enrollments", "rel": "enrollments" }, {
GET /api/me HTTP/1.1
Thursday, 31 January 13
Hands on
Thursday, 31 January 13
OAuth
Thursday, 31 January 13
OAuth 2.0
• Dono do recurso
• Aplicação terceira
• Servidor de autenticação
• Servidor de recursos
Thursday, 31 January 13
Para uma aplicação Web
Thursday, 31 January 13
Hands on
Thursday, 31 January 13
Instalação
Thursday, 31 January 13
Instalando no Windows
http://railsinstaller.org/
Thursday, 31 January 13
Instalando no Linux/Mac
$ curl -L https://get.rvm.io | bash -s stable --ruby
https://rvm.io/
http://railscasts.com/episodes/200-rails-3-beta-and-rvm
Thursday, 31 January 13
OAuth 2 com Ruby
Thursday, 31 January 13
OAuth 2.0
https://github.com/intridea/oauth2
Thursday, 31 January 13
HTTP com Ruby
Thursday, 31 January 13
OAuth 2.0
https://github.com/lostisland/faraday
Thursday, 31 January 13
Gerenciamento de dependências
http://gembundler.com/
$ gem install bundler
Thursday, 31 January 13