Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ways to build REST mobile client
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
550
SSH Can
oursky
1
350
HTTP/2
oursky
0
380
watchOS2
oursky
0
380
Common QA issues
oursky
0
240
Complex is better than complicated
oursky
0
320
Clean code again
oursky
3
410
KiriKiri x O2 x NVLMarker
oursky
0
270
Flux + React
oursky
1
420
Other Decks in Programming
See All in Programming
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
110
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
プロポーザルを書いてもらう
pvcresin
0
400
仕様駆動開発の消費期限
watany
20
8.1k
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
320
5分で問診!Composer セキュリティ健康診断
codmoninc
0
960
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
680
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
160
Cloudflare is Agents
chimame
0
160
テーブルをDELETEした
yuzneri
0
140
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
200
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
1
3.8k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
750
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
Amusing Abliteration
ianozsvald
1
240
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
The Spectacular Lies of Maps
axbom
PRO
1
900
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
Being A Developer After 40
akosma
91
590k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
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