SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Fazendo uma aplicação 
cliente/servidor (e 
algumas dicas…)
Makoto Miyagawa 
makotomiyagawa@bemol.com.br 
! github.com/makotomiy
Bemol
Principais projetos 
Pré-venda Móvel (2012) 
• Sistema de orçamento móvel 
no iPod 
• Agilidade no atendimento ao 
cliente
Principais projetos 
Quiosque (2013) 
• Terminal de auto-atendimento 
no iPad 
• Consulta de informações e 
pagamento de prestações
O que eles têm em 
comum?
Modelo cliente/servidor
Proposta: Webserver + Client
Protocolo REST 
Métodos HTTP 
! 
GET 
POST 
PUT 
DELETE 
CRUD 
! 
Create (INSERT) 
Read (SELECT) 
Update (UPDATE) 
Destroy (DELETE)
Protocolo REST 
GET /clientes => SELECT * FROM clientes 
GET /clientes/1 => SELECT * FROM clientes WHERE id = 1 
POST /clientes => INSERT INTO clientes VALUES … 
PUT /clientes/1 => UPDATE clientes SET … WHERE id = 1
Serialização e mapeamento 
{ 
“cliente”: { 
“nome” : “João”, 
“idade” : 30, 
“casado” : true 
} 
} 
@interface Cliente : NSObject 
{ 
NSString *nome; 
NSNumber *idade; 
NSNumber *casado; 
} 
@end
Checklist 
" Chrome: REST Console 
# Ruby 
" Xcode (+ Command line tools)
http://goo.gl/YHvJtG
REST Console
RubyGems e Bundler
RubyGems e Bundler 
$ sudo gem install bundler 
$ cd server 
$ bundle install
DataMapper
Object Relational Mapper 
SELECT * FROM cliente 
= 
Cliente.all()
Object Relational Mapper 
INSERT INTO cliente VALUES … 
= 
Cliente.create(:nome => …)
Criar tabela 
database.rb 
class Tarefa 
include DataMapper::Resource 
! 
property :id, Serial, :key => true 
property :titulo, String, :required => true 
property :descricao, String 
property :concluido, Boolean, :default => false 
end
Webserver: Hello World 
get '/' do 
'Hello World!' 
end 
app.rb
Webserver: GET /tarefas 
app.rb 
get '/tarefas' do 
content_type :json 
! 
tarefas = Tarefa.all.collect {|t| t.attributes} 
! 
tarefas.to_json 
end
Webserver: POST /tarefas 
post '/tarefas' do 
content_type :json 
! 
conteudo = JSON.parse(request.body.read) 
nova_tarefa = Tarefa.create(conteudo) 
! 
nova_tarefa.attributes.to_json 
end 
app.rb
Cocoapods
Cocoapods 
$ sudo gem install cocoapods 
$ cd client/Todo List 
$ pod init 
$ pod install
AFNetworking
AFNetworking 
{ 
“cliente”: { 
“nome” : “João”, 
“idade” : 30, 
“casado” : true 
} 
} 
@{ 
@“cliente”: @{ 
@“nome” : @“João”, 
@“idade” : @30, 
@“casado” : @YES 
} 
}
Client: To-do list
Client: To-do list 
TDTarefa.h 
@interface TDTarefa : NSObject 
! 
@property (nonatomic, strong) NSNumber *idTarefa; 
@property (nonatomic, strong) NSString *atividade; 
@property (nonatomic, strong) NSNumber *concluido; 
! 
- (BOOL)isConcluido; 
- (instancetype)initFromDictionary:(NSDictionary *)dict; 
-(NSDictionary *)dictionaryRepresentation; 
! 
@end
Client: To-do list 
TDTodoList.h 
@protocol TDTodoListDelegate <NSObject> 
- (void)todoListGetListaSuccess:(NSArray *)array; 
- (void)todoListRequestFailed:(NSError *)error; 
@end 
! 
@interface TDTodoList : NSObject 
! 
@property (nonatomic, weak) id<TDTodoListDelegate> __weak delegate; 
! 
- (void)buscarLista; 
@end
Client: To-do list 
TDTodoList.m 
- (void)buscarLista 
{ 
AFHTTPRequestOperationManager *manager = 
[AFHTTPRequestOperationManager manager]; 
! 
[manager GET: parameters: success: failure:]; 
}
Client: To-do list 
TDTodoList.m 
- (void)criarTarefa:(TDTarefa *)tarefa 
{ 
AFHTTPRequestOperationManager *manager = 
[AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = 
[AFJSONRequestSerializer serializer]; 
! 
[manager POST: parameters: success: failure:]; 
}
Client: To-do list 
TDTodoList.m 
- (void)atualizarTarefa:(TDTarefa *)tarefa 
{ 
AFHTTPRequestOperationManager *manager = 
[AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = 
[AFJSONRequestSerializer serializer]; 
[manager PUT: parameters: success: failure:]; 
}
Client: To-do list 
URL: http://todo-ufam.herokuapp.com
E as dicas?
Debugging 
- breakpoint: All Exceptions 
- breakpoint condicional 
- breakpoints com ação 
- lldb: p e po
Cocoapods
Alcatraz
Alcatraz 
KSImageNamed
Alcatraz 
OMColorSense
CocoaControls
RestKit
Heroku
NSHipster
iOS Dev Weekly
objc.io
Dúvidas?
Obrigado! 
makotomiyagawa@bemol.com.br 
! github.com/makotomiy

Mais conteúdo relacionado

Semelhante a Fazendo uma aplicação cliente/servidor (e algumas dicas...)

Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webHenrique Gogó
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para issoJunior Conte
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
Aplicações de tempo real com Meteor.js
Aplicações de tempo real com Meteor.jsAplicações de tempo real com Meteor.js
Aplicações de tempo real com Meteor.jsRafael Sales
 
SOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POOSOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POORamon Valerio
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSMatheus Donizete
 
Campus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de SucessoCampus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de SucessoKleber Bacili
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Henrique Gogó
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Android Dev Conference 2017 - Arquitetura para projetos Android
 Android Dev Conference 2017 - Arquitetura para projetos Android Android Dev Conference 2017 - Arquitetura para projetos Android
Android Dev Conference 2017 - Arquitetura para projetos AndroidiMasters
 
II Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQLII Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQLDiego Magalhães
 

Semelhante a Fazendo uma aplicação cliente/servidor (e algumas dicas...) (20)

Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações web
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Angular js
Angular jsAngular js
Angular js
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para isso
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Aplicações de tempo real com Meteor.js
Aplicações de tempo real com Meteor.jsAplicações de tempo real com Meteor.js
Aplicações de tempo real com Meteor.js
 
SOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POOSOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POO
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Campus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de SucessoCampus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de Sucesso
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Android Dev Conference 2017 - Arquitetura para projetos Android
 Android Dev Conference 2017 - Arquitetura para projetos Android Android Dev Conference 2017 - Arquitetura para projetos Android
Android Dev Conference 2017 - Arquitetura para projetos Android
 
II Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQLII Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQL
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 

Fazendo uma aplicação cliente/servidor (e algumas dicas...)