introdução a plataforma de aplicativos redu
DESCRIPTION
Slides do workshop sobre construção de aplicativos educacionais utilizando o Redu (http://www.redu.com.br) como plataforma.TRANSCRIPT
Plataforma de Aplicativos101
Guilherme CavalcantiLíder técnico, plataforma de aplicativos
Apresentações
• Guilherme Cavalcanti
• Desenvolvedor Web desde 2007
• Granduando, CIn-UFPE
• Co-fundador do Redu
• Líder técnico do time da plataforma de aplicativos @ Redu
• Twitter/Delicious/Github:
• /guiocavalcanti
Equipe
• 15 pessoas
• Designers
• Desenvolvedores
• Pesquisadores
• Negócio
Estamos [email protected]
O que é a plataforma de aplicativos?
Mercado de educação
• Editoras
• Produtoras de mídias educativas
• Sistemas de Gestão Acadêmica
• Marketplace de aplicativos educacionais
Importância da disciplina
1. Necessidade de integração de tecnologias
2. Demanda por desenvolvedores de aplicativos educacionais
Tipo de aplicativos
• Canvas
• Externos
• Mobile, desktop, etc
• Plugins sociais
Canvas
Canvas
• Funciona dentro do Redu
• Like facebook apps
• Para o usuário final, faz parte do Redu
Principais funcionalidades
Sugestões de aplicativos
Infraestrutura
• Se comunica com o Redu via HTTP (API REST)
• As simple as an <iframe>
• Plugins sociais (em breve)
• SDK JavaScript (em breve)
• Redu Bootstrap (alpha)
Mais informações
• Vai ficar dentro da Disciplina
• Largura máxima de 720px
• Autenticação via JavaScript (OAuth2)
• Requisições cross-domain permitidas (CORS)
• Inicialmente compatível apenas com FF e Chrome (versões recentes)
Aplicativos externos
Aplicativos externos
• Mobile: aplicativos Android, iOS
• Plugins sociais: mural, meus cursos
• Aplicativos desktop
• Sistema de gestão acadêmica
• ERPs
• Analytics services
• Games
Infraestrutura
• Se comunica com o Redu via HTTP (API REST)
• SDKs e wrappers a serem construídos
O que temos pronto?
API REST
• Plain old HTTP
• 100% documentada
• Autenticação por OAuth2
API REST
WTH: API
...is a specification intended to be used as an interface by software components to
communicate with each other.
Someone at Wikipedia
WHT: REST
• Estilo arquitetural para sistemas distribuidos
• Levado em conta na construção da World Wide Web
• Amplamente utilizado em Webservices públicos
• Roy Fielding
WHT: REST
• Client-server: separação de responsabilidades
• Stateless: escalabilidade
• Uniform inteface: portabilidade
Documentação
• Disponível em developers.redu.com.br
• Open-source:
• https://github.com/redu/redu.github.com/
• Aceitamos correções
Content-type
• JSON
• XML (alguém precisa?)
• form-urlencoded
Autenticação
OAuth2
• Como descobrir quem fez qual requisição?
• OAuth2 Provider
• Tudo depende de um token
Papéis
Resource owner Usuário da aplicação
Client application Aplicação
Resource/authorization Server
Redu
OAuth2 : regras
1. Client applications atuam (role play) em nome do resource owner
2. Client applications não guardam login e senha do resource owner
3. Client applications pedem autorização para atuar em nome do resource owner
Pedindo seu token em Python
1 from rauth.service import OAuth2Service 2 4 redu = OAuth2Service( 5 name='redu', 6 authorize_url='http://redu.com.br/oauth/authorize', 7 access_token_url='http://redu.com.br/oauth/token', 8 consumer_key='YF6tokenI45Z2tokenk9ttokenoDmCBH', 9 consumer_secret='kMkrtokenhfoMHLZOtokenCGAZRZtoken')10 11 print 'Visit this URL in your browser: ' + redu.get_authorize_url()12 16 code = raw_input('Enter the PIN: ')17 19 data = dict(code=code, grant_type='authorization_code',redirect_uri='')2023 access_token = redu.get_access_token('POST', data=data)25 26 print 'The access token is: ' + access_token[access_token]
https://github.com/redu/oauth-consumers
Pedindo seu token em Ruby
3 require "oauth2" 4 5 consumer_key ='YF6btoken3jek9tRbGptokenCBH' 6 consumer_secret ='kMkrBKyadsMHLZO3MBdasZRZEdasL' 7 8 client = OAuth2::Client.new(consumer_key, consumer_secret,10 :site => 'http://redu.com.br')11 12 puts "Already have a PIN? [y/n]:"13 if gets.chomp == 'n'14 puts "Authorize: "15 puts client.auth_code.authorize_url16 end17 18 puts "Insert the pin: "19 pin = gets.chomp20 token = client.auth_code.get_token(pin)21 puts "The Access Token is #{token.token}"
https://github.com/redu/oauth-consumers