Consumindo APIs REST com Ruby
Transcript of Consumindo APIs REST com Ruby
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