Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ways to build REST mobile client
Search
Oursky Limited
June 27, 2013
Programming
180
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ways to build REST mobile client
Oursky Limited
June 27, 2013
More Decks by Oursky Limited
See All by Oursky Limited
UI Automation
oursky
1
570
SSH Can
oursky
1
350
HTTP/2
oursky
0
390
watchOS2
oursky
0
380
Common QA issues
oursky
0
250
Complex is better than complicated
oursky
0
330
Clean code again
oursky
3
430
KiriKiri x O2 x NVLMarker
oursky
0
280
Flux + React
oursky
1
420
Other Decks in Programming
See All in Programming
Domain-Driven Transformation
hschwentner
2
2.3k
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
640
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
21
21k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
130
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8k
パーソナライズPodcastを作った話
repunit11
0
130
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
160
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
740
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
260
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
450
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
280
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Optimizing for Happiness
mojombo
378
71k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Design in an AI World
tapps
1
350
Balancing Empowerment & Direction
lara
6
1.3k
The Pragmatic Product Professional
lauravandoore
37
7.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
How to make the Groovebox
asonas
2
2.5k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Transcript
Ways to build REST mobile client Edwin Kwok Thursday, 27
June, 13
iOS Thursday, 27 June, 13
Network Manager Network Connection Builder / Factory Network Manager Delegate
Rugby Implementation Thursday, 27 June, 13
NetworkManager NetworkConnection NewsBuilder NewsViewController<NetworkManagerDelegate> Rugby Implementation 1. ask for News
6. News 2. send request 3. response 4. parse response 5. News Thursday, 27 June, 13
WeSnap Implementation ????? Thursday, 27 June, 13
RestKit Challenges Offline Data Access Flaky Connectivity Different Data Formats
Thursday, 27 June, 13
RestKit Features Integrated HTTP Stack Pluggable Parser Object Mapping Core
Data Integration UI Integration Thursday, 27 June, 13
Integrated HTTP Stack Base URLs Custom Header Network Indicator Performing
Requests Background Processing Authentication Request caching Thursday, 27 June, 13
Integrated HTTP Stack / / create client RKClient *client =
[RKClient clientWithBaseURL:@”http:/ /github.org”]; / / set header [client setValue:[[[UIDevice currentDevice] identifierForVendor] UUIDString] forHTTPHeaderField:@”X-UDID”]; / / set indicator behavior client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; Thursday, 27 June, 13
Performing Request - (IBAction)forkYouWithBlocks { self.imageView.image = nil; [[RKClient sharedClient]
get:@"http:/ /github.com/fluidicon.png" usingBlock:^(RKRequest *request) { [request setBackgroundPolicy:RKRequestBackgroundPolicyContinue]; [request setOnDidLoadResponse:^(RKResponse *response) { if (response.isSuccessful) { UIImage *image = [UIImage imageWithData:response.body]; self.imageView.image = image; } }]; }]; } Thursday, 27 June, 13
Background Processing [request setBackgroundPolicy:RKRequestBackgroundPolicyContinue]; RKRequestBackgroundPolicyNone / / do nothing RKRequestBackgroundPolicyCancel
/ / cancel request RKRequestBackgroundPolicyContinue / / continue RKRequestBackgroundPolicyRequeue / / requeue upon app restart Thursday, 27 June, 13
Object Mapping Simple Object Mapping Mapping Relationships Inverse Mappings Serialization
Mappings Thursday, 27 June, 13
Object mapping { id: 1, name: “Peter”, location: “Hong Kong”,
followers: 1, email: “
[email protected]
”, following: 36 } @interface User : NSObject @property (strong, nonatomic) NSNumber *id; @property (strong, nonatomic) NSString *name; @property (strong, nonatomic) NSString *location; @property (strong, nonatomic) NSNumber *followers; @property (strong, nonatomic) NSString *email; @property (strong, nonatomic) NSNumber *following; @end Thursday, 27 June, 13
Object mapping / / register mapping for a class objectMapping
= [RKObjectMapping mappingForClass:[User class]]; [objectMapping mapKeyPath:@"id" toAttribute:@"id"]; [objectMapping mapKeyPath:@"name" toAttribute:@"name"]; [objectMapping mapKeyPath:@"location" toAttribute:@"location"]; [objectMapping mapKeyPath:@"email" toAttribute:@"email"]; [objectMapping mapKeyPath:@"following" toAttribute:@"following"]; [objectMapping mapKeyPath:@"followers" toAttribute:@"followers"]; Thursday, 27 June, 13
Object mapping [[RKObjectManager sharedManager] loadObjectsAtResourcePath:[NSString stringWithFormat:@"/users/%@", userName] usingBlock:^(RKObjectLoader *loader) {
[SVProgressHUD showWithStatus:@"Loading..."]; [loader setObjectMapping:objectMapping]; [loader setOnDidLoadObject:^(id object) { [SVProgressHUD dismiss]; }]; [loader setOnDidFailWithError:^(NSError *error) { [SVProgressHUD showErrorWithStatus:@"Problem loading user"]; }]; }]; Thursday, 27 June, 13
Mapping Relationship RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]]; RKObjectMapping *issueMapping
= [RKObjectMapping mappingForClass:[Issue class]]; / / create relationships [issueMapping mapKeyPath:@"user" toRelationship:@"user" withMapping:userMapping]; { number: 1, title: “Issue #1”, user: { ... } } @interface Issue : NSObject @property (strong, nonatomic) NSNumber *number; @property (strong, nonatomic) NSString *title; @property (strong, nonatomic) User *user; @end Thursday, 27 June, 13
Android Thursday, 27 June, 13
Thursday, 27 June, 13
Problem The operating system may shut down the process Solution:
use service Thursday, 27 June, 13
Use a Service API Thursday, 27 June, 13
Use ContentProvider API Thursday, 27 June, 13
Google I/0 2013 Volley: Easy, Fast Networking for Android Thursday,
27 June, 13
Why Volley Restful apps have common features: infinite scroll image
loading offline caching request priority Volley provides all of them Thursday, 27 June, 13
Reference http:/ /www.amazon.com/Test-Driven-iOS- Development-Developers-Library/dp/ 0321774183 http:/ /restkit.org/ https:/ /dl.google.com/googleio/2010/android- developing-RESTful-android-apps.pdf
http:/ /www.youtube.com/watch? v=yhv8l9F44qo Thursday, 27 June, 13