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
Integrating iOS Applications with Backend REST ...
Search
Adrian Kosmaczewski
October 04, 2010
Technology
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Integrating iOS Applications with Backend REST Services
Presentation given at JAOO 2010, Århus, Denmark.
Adrian Kosmaczewski
October 04, 2010
More Decks by Adrian Kosmaczewski
See All by Adrian Kosmaczewski
What's in your Container? Securing the Software Supply Chain without Slowing Down
akosma
0
320
Managing Fleets of Kubernetes Clusters with GitOps
akosma
4
330
DevOps in Switzerland from 2018 to 2022
akosma
4
420
APPUiO Cloud
akosma
2
860
Introduction to K8up
akosma
0
480
Creating Products through DevOps: The Story of VSHN
akosma
0
350
Everyday Life of an Open-Source Company: The Story of VSHN
akosma
0
430
Creating a Product through DevOps: The Story of APPUiO Cloud
akosma
0
890
Migrating the GitLab–Kubernetes Integration from Certificates to the Agent
akosma
0
670
Other Decks in Technology
See All in Technology
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
150
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
2
1.1k
Genie Codeハンズオン応用編
taka_aki
0
140
35分でわかるEffective Platform Engineering
nwiizo
5
620
20260817_生成AIの動向と中学校・高等学校での活用を考える_v1.00_公開用
doradora09
PRO
0
210
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
270
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
160
コーチングの奥義 何もしないテクニック
jinwatanabe
0
160
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
220
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
240
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
360
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
280
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
330
Paper Plane
katiecoart
PRO
2
53k
A Tale of Four Properties
chriscoyier
163
24k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
470
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Designing for Performance
lara
611
70k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
Integrating iOS Applications with Backend REST Services Monday, October 4th
- JAOO - Århus, Denmark
Adrian Kosmaczewski
akosma software
akosma.com github.com/akosma linkedin.com/in/akosma formspring.me/akosma twitter.com/akosma slideshare.com/akosma
None
My Software Passion
People
Team members, users, clients, society in general
Software is a process
Software is a social process
None
One Problem
Several Solutions
None
Questions
Web Developers?
iOS Developers?
API Designers or Developers?
Server-side Technologies?
None
1 The Problem
Database
Many Questions
Formats?
Libraries?
“Best” approaches?
2 The Solutions
Bad news
Far too many
REST vs SOAP
XML vs JSON
Synchronous vs. Asynchronous
None
Good News
Introducing iPhoneWebServicesClient
http://github.com/akosma/ iPhoneWebServicesClient
2 parts
1 PHP server app
2 iOS client
Many formats
XML
JSON
(duh)
• XML • 8 libraries • JSON • 2 parsers
• YAML • CSV • SOAP • Property List • XML • Binary • Protocol Buffers
Extensible
(add more formats and libraries if you want)
Variable sized dataset
(from 1 to 5000 items per call)
Heterogenous Data Source
(the same data in different formats)
XML Libraries
(lots of them)
None
3 Demo
None
4 The Tests
• Local • Wifi • 3G • EDGE • All
Combinations • Different dataset sizes each time
None
5 Results
Easier to implement on the iOS side?
1. JSON + Property Lists + CSV 2. XML (DOM)
+ Protocol Buffers 3. XML (SAX) 4. SOAP + YAML
Easier to implement on the PHP side?
1. JSON + YAML 2. Property List + CSV +
XML 3. Protocol Buffers 4. SOAP
Smaller Payload
1. CSV + Protocol Buffers + Binary Plist 2. JSON
+ YAML 3. XML 4. SOAP
Fastest Deserialization Speed
1. Property Lists + TBXML 2. SOAP + libxml (DOM)
+ Google XML 3. JSON 4. YAML + CSV + APXML
More Portable?
1. XML + JSON 2. Protocol Buffers + YAML +
CSV 3. SOAP 4. Property Lists
More Readable?
1. JSON + YAML 2. XML + XML Property Lists
3. Protocol Buffers 4. Binary Property Lists
Less Memory Consumption?
1. Binary Property List + Protocol Buffers 2. CSV +
JSON + TBXML 3. XML 4. SOAP + APXML
Some raw, deeply flawed comparisons?
• Binary Plists are 3 to 4 times faster to
deserialize than JSON • iPod touch 2nd Gen is ~25% faster than iPhone 3G • iPhone 4 is ~300% faster than iPhone 3G • JSON is 45% of its equivalent XML plist • Binary plist is 35% of its equivalent XML plist
The “Best”?
1. JSON + Property Lists 2. TBXML + Protocol Buffers
3. Other XML parsers + CSV 4. YAML + SOAP + APXML
None
6 Next Steps
Test with other server-side technologies
(J2EE, ASP.NET, Ruby on Rails, Django...)
Test with other Cocoa networking libraries
• AsyncSocket http://akos.ma/0x37v • IP*Works! for Mac OS X http://www.nsoftware.com/portal/macos/
• OmniNetworking http://akos.ma/0q • ThoMoNetworking http://hci.rwth-aachen.de/thomonet • ConnectionKit http://github.com/karelia/ConnectionKit/
Test with other serialization systems
• MessagePack http://msgpack.org/ • Apache Thrift http://incubator.apache.org/thrift/ • BERT http://bert-rpc.org/
• Apache Avro http://avro.apache.org/ • ONC RPC aka Sun RPC http://akos.ma/va Open Network Computing Remote Procedure Call
Test with different data sets
(sport results, weather, financial data, hyerarchical data, binary data, etc...)
None
Thanks!
Questions?
These slides are released under a Creative Commons Attribution-No Derivative
Works 3.0 Unported License http://creativecommons.org/licenses/by-nd/3.0/