SlideShare a Scribd company logo
Victor Quinn
@victorquinn
Lead Node.js Engineer
Designing an API for Mobile
API Craft DMV Meetup, April 28 2014
Download
Gives you real-time information
on the people around you
!
It’s free!!
!
This will be pretty fast-paced
More About SocialRadar
Special considerations for a
Mobile API
• Speed really matters
• Battery usage - minimize
• Maximizing network utilization
• Response size matters
• Minimize number of requests
• Stateless
Speed: Problems
• Only one thing on screen at a time, perception change
• On desktop other things can distract
• Best Case: ~400ms latency for round trip on cell network
• We tested at SocialRadar using a basic ping no-op
endpoint
• Verizon LTE, iPhone 5S
• Device doesn’t maintain active connection
• Average case much worse, ~1000ms round trip
Ideal round trip
iPhone 5S on Verizon LTE
User's Phone API
200ms
200ms
200ms
Total round trip time 800ms
200ms
bit of hand waving, I’m not
a network expert
Likely round trip
iPhone 4S on Verizon 3G
User's Phone API
500ms
500ms
200ms
Total round trip time 1600ms
400ms
Speed: Solutions
• Cache anything humanly possible
• Respond as quickly as possible, deferring
anything that doesn’t need to be done immediately
• Queue most things
• Make sure your API can handle high concurrency
(we settled on Node.js to accomplish this,
WhatsApp uses Erlang)
Minimize battery usage
!
• Brief note about cell battery and network
usage (more)
• Response size matters
• Minimize number of requests
Maximize network utilization
Response Size: Problems
• At SocialRadar, we tested responses of different sizes
• Optimal was largest response that would fit into a
single TCP packet on the cell network.
• Around 128KB. Differs based on client device and
network
• Any longer would jump response time significantly
Response Size: Solutions
• Paging sizes — largest
that fit within TCP packet
window
• Contrast with
Desktop, paging more
dependent on server
response time and UI
User's Phone API
200ms
200ms
200ms
Total round trip time 800ms
200ms
Page size of 20 users
To retrieve 100 users, ~4s
Paging Size: 20 (Ideal)
Paging Size: 50 (Ideal)
User's Phone API
200ms
200ms
500ms
Total round trip time 1100ms
200ms
Page size of 50 users
To retrieve 100 users, ~2.2s
Paging Size: 20 (Likely)
User's Phone API
500ms
500ms
200ms
Total round trip time 1600ms
400ms
To retrieve 100 users, ~8s
Paging Size: 50 (Likely)
User's Phone API
500ms
500ms
500ms
Total round trip time 1900ms
400ms
To retrieve 100 users, ~3.8s
Number of Requests: Problems
• Traditionally parallelized, not (well) on mobile
• Battery life is of great concern and every network
request eats into that
• Spinning up the cell modem, making request,
waiting for it drains the battery
• So if you make 5 requests instead of 1, draining
battery, leaving user waiting
Number of Requests: Solutions
• Paging size as mentioned above, try to maximize
response that will fit in a packet to minimize the
number of requests
• So one request with 20KB much better than 5
with 4KB each
• Batch multiple requests into a single one
Batch Request Library
• Finding no great existing batch request library for
Node.js, we rolled our own open source library
• http://batch-request.socialradar.com
• Allows you to send a single request that represents
multiple
• No need to compromise on RESTful principles and
move to a SOA
• Handles complex dependencies
Batch Request Library (2)
1. npm install batch-request
2. Add one line of code to your API:

app.post('/batch', batch.validate, batch);!
3. Send batch request as single POST:

{

"myRequest1": {

"method": "GET",

"uri": "http://api.mysite.com/users/1/first_name"

},

"myRequest2": {

"method": "GET",

"uri": "http://api.mysite.com/users/1/email"

}

}
Batch Request Library (3)
4. Receive single response:

{

"myRequest1": {

“statusCode": 200,

“body": “Victor”,

“headers”: {…}

},

"myRequest2": {

“statusCode": 200,

“body": “victor@socialradar.com”,

“headers”: {…}

}

}
When you pull to refresh,
Batch Request to:
• Update user location with
latest GPS reading
• Retrieve current City/State
• Retrieve most recent stat
numbers
• Get some user lists to
cache them
Stateless
• Cell networks are spotty
• For performance, want load balance among
multiple servers
• Solution: Assign access token to device rather than
relying on sessions for user access
• We have an access token which is an encrypted
string containing user_id and some other stuff
Victor Quinn
@victorquinn
Lead Node.js Engineer
!
Download our App
Questions?

More Related Content

PDF
Олександр Хотемський:”Serverless архітектура та її застосування в автоматизац...
Dakiry
 
PDF
WordPress Speed & Performance from Pagely's CTO
Lizzie Kardon
 
PPT
Nss Labs Dpi Intro V3
gueste47133
 
PPTX
High Performance Architecture Patterns
Celso Crivelaro
 
PDF
High Performance Architecture Patterns
Celso Crivelaro
 
PDF
A Customized Approach to HTTP Proxy Caching in Ruby
Perry Carbone
 
PDF
DMIEXPO - Ajay Goyal - Maximum ROI in Bulk Emailing by IPv6 – Optimum deliver...
Morning Dough
 
PPTX
Service workers: what and why UmbUKFest 2018!
Matthew Wise
 
Олександр Хотемський:”Serverless архітектура та її застосування в автоматизац...
Dakiry
 
WordPress Speed & Performance from Pagely's CTO
Lizzie Kardon
 
Nss Labs Dpi Intro V3
gueste47133
 
High Performance Architecture Patterns
Celso Crivelaro
 
High Performance Architecture Patterns
Celso Crivelaro
 
A Customized Approach to HTTP Proxy Caching in Ruby
Perry Carbone
 
DMIEXPO - Ajay Goyal - Maximum ROI in Bulk Emailing by IPv6 – Optimum deliver...
Morning Dough
 
Service workers: what and why UmbUKFest 2018!
Matthew Wise
 

What's hot (7)

PPTX
SignalR Overview
Michael Sukachev
 
PDF
Altitude SF 2017: The power of the network
Fastly
 
PPTX
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
PROIDEA
 
PPTX
ECS19 - Ingo Gegenwarth - Running Exchange in large environment
European Collaboration Summit
 
PDF
Nzpug google appengine
stuartmitchell
 
ODP
Comet / WebSocket Web Applications
Codemotion
 
PPTX
Scale your signalR realtime web application
Ran Wahle
 
SignalR Overview
Michael Sukachev
 
Altitude SF 2017: The power of the network
Fastly
 
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
PROIDEA
 
ECS19 - Ingo Gegenwarth - Running Exchange in large environment
European Collaboration Summit
 
Nzpug google appengine
stuartmitchell
 
Comet / WebSocket Web Applications
Codemotion
 
Scale your signalR realtime web application
Ran Wahle
 
Ad

Viewers also liked (16)

PDF
Mobile API Design Techniques
Trieu Nguyen
 
PDF
Jordi Romero Api for-the-mobile-era
.toster
 
PDF
Develop and Deploy your Mobile API with Rails, Nginx, Unicorn and Capistrano
Errazudin Ishak
 
PPT
Pragmatic Git workflow
Tomek Cejner
 
PDF
Creating an Effective Mobile API
Nick DeNardis
 
PDF
How to build mobile API with Node.js
Tomek Cejner
 
PDF
Data To Go: Mobile API Design (Lightning Talk)
Chuck Greb
 
PDF
Api mobile first
Chris Saez
 
PDF
Mobile Api and Caching
New Relic
 
PDF
Mobile API: Design & Techniques
Fred Brunel
 
PDF
Data to Go: Mobile API Design
Chuck Greb
 
PDF
Data to Go: Mobile API Design (SXSW)
Chuck Greb
 
PDF
Build a REST API for your Mobile Apps using Node.js
Stormpath
 
PPTX
We we should be Mobile API - First, by Brad Hipps
Puerto Rico Tech Summit
 
PDF
Designing API for mobile apps (MobileWarsaw 19.01.2015)
Wojtek Erbetowski
 
PDF
Build Features, Not Apps
Natasha Murashev
 
Mobile API Design Techniques
Trieu Nguyen
 
Jordi Romero Api for-the-mobile-era
.toster
 
Develop and Deploy your Mobile API with Rails, Nginx, Unicorn and Capistrano
Errazudin Ishak
 
Pragmatic Git workflow
Tomek Cejner
 
Creating an Effective Mobile API
Nick DeNardis
 
How to build mobile API with Node.js
Tomek Cejner
 
Data To Go: Mobile API Design (Lightning Talk)
Chuck Greb
 
Api mobile first
Chris Saez
 
Mobile Api and Caching
New Relic
 
Mobile API: Design & Techniques
Fred Brunel
 
Data to Go: Mobile API Design
Chuck Greb
 
Data to Go: Mobile API Design (SXSW)
Chuck Greb
 
Build a REST API for your Mobile Apps using Node.js
Stormpath
 
We we should be Mobile API - First, by Brad Hipps
Puerto Rico Tech Summit
 
Designing API for mobile apps (MobileWarsaw 19.01.2015)
Wojtek Erbetowski
 
Build Features, Not Apps
Natasha Murashev
 
Ad

Similar to Designing an API for Mobile (20)

PDF
Network
Ynon Perek
 
PPTX
Scaling habits of ASP.NET
David Giard
 
PDF
Asynchronous web-development with Python
Skoobe
 
PDF
Building real time applications with Symfony2
Antonio Peric-Mazar
 
PDF
Asynchronous web-development with Python
Anton Caceres
 
PPTX
«Real Time» Web Applications with SignalR in ASP.NET
Alessandro Giorgetti
 
PPTX
Real time web: is there a life without socket.io and node.js?
Eduard Trayan
 
KEY
From 100s to 100s of Millions
Erik Onnen
 
PDF
The Anatomy of Failure - Lessons from running systems to serve millions of pe...
John Paul Alcala
 
PDF
RESTful web
Alvin Qi
 
PDF
Building high performance microservices in finance with Apache Thrift
RX-M Enterprises LLC
 
PPTX
How to deliver rich, real-time apps - AppsWorld 2014
Andy Piper
 
PPTX
Eric Proegler Oredev Performance Testing in New Contexts
Eric Proegler
 
PDF
Performance Evaluation of XMPP on the Web
Markku Laine
 
PDF
Computer Networks Module 1-part 1.pdf
ShanthalaKV
 
PPTX
SenchaCon 2016: How to Give your Sencha App Real-time Web Performance - James...
Sencha
 
PPTX
Realtime traffic analyser
Alex Moskvin
 
PDF
Async event based web server
Gi Woong Lee
 
PDF
KKBOX WWDC17 Security - Antony
Liyao Chen
 
PDF
Building A Great API - Evan Cooke, Cloudstock, December 2010
Twilio Inc
 
Network
Ynon Perek
 
Scaling habits of ASP.NET
David Giard
 
Asynchronous web-development with Python
Skoobe
 
Building real time applications with Symfony2
Antonio Peric-Mazar
 
Asynchronous web-development with Python
Anton Caceres
 
«Real Time» Web Applications with SignalR in ASP.NET
Alessandro Giorgetti
 
Real time web: is there a life without socket.io and node.js?
Eduard Trayan
 
From 100s to 100s of Millions
Erik Onnen
 
The Anatomy of Failure - Lessons from running systems to serve millions of pe...
John Paul Alcala
 
RESTful web
Alvin Qi
 
Building high performance microservices in finance with Apache Thrift
RX-M Enterprises LLC
 
How to deliver rich, real-time apps - AppsWorld 2014
Andy Piper
 
Eric Proegler Oredev Performance Testing in New Contexts
Eric Proegler
 
Performance Evaluation of XMPP on the Web
Markku Laine
 
Computer Networks Module 1-part 1.pdf
ShanthalaKV
 
SenchaCon 2016: How to Give your Sencha App Real-time Web Performance - James...
Sencha
 
Realtime traffic analyser
Alex Moskvin
 
Async event based web server
Gi Woong Lee
 
KKBOX WWDC17 Security - Antony
Liyao Chen
 
Building A Great API - Evan Cooke, Cloudstock, December 2010
Twilio Inc
 

Recently uploaded (20)

PPTX
MT Chapter 1.pptx- Magnetic particle testing
ABCAnyBodyCanRelax
 
PPTX
Information Retrieval and Extraction - Module 7
premSankar19
 
PDF
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
PDF
Introduction to Ship Engine Room Systems.pdf
Mahmoud Moghtaderi
 
PDF
settlement FOR FOUNDATION ENGINEERS.pdf
Endalkazene
 
PPTX
Chapter_Seven_Construction_Reliability_Elective_III_Msc CM
SubashKumarBhattarai
 
PDF
top-5-use-cases-for-splunk-security-analytics.pdf
yaghutialireza
 
PPTX
easa module 3 funtamental electronics.pptx
tryanothert7
 
PDF
Advanced LangChain & RAG: Building a Financial AI Assistant with Real-Time Data
Soufiane Sejjari
 
PDF
Unit I Part II.pdf : Security Fundamentals
Dr. Madhuri Jawale
 
PDF
Zero carbon Building Design Guidelines V4
BassemOsman1
 
PDF
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
PPTX
Inventory management chapter in automation and robotics.
atisht0104
 
PDF
Zero Carbon Building Performance standard
BassemOsman1
 
PDF
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
PDF
Biodegradable Plastics: Innovations and Market Potential (www.kiu.ac.ug)
publication11
 
PPTX
IoT_Smart_Agriculture_Presentations.pptx
poojakumari696707
 
PDF
LEAP-1B presedntation xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
hatem173148
 
PDF
Introduction to Data Science: data science process
ShivarkarSandip
 
PPTX
MSME 4.0 Template idea hackathon pdf to understand
alaudeenaarish
 
MT Chapter 1.pptx- Magnetic particle testing
ABCAnyBodyCanRelax
 
Information Retrieval and Extraction - Module 7
premSankar19
 
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
Introduction to Ship Engine Room Systems.pdf
Mahmoud Moghtaderi
 
settlement FOR FOUNDATION ENGINEERS.pdf
Endalkazene
 
Chapter_Seven_Construction_Reliability_Elective_III_Msc CM
SubashKumarBhattarai
 
top-5-use-cases-for-splunk-security-analytics.pdf
yaghutialireza
 
easa module 3 funtamental electronics.pptx
tryanothert7
 
Advanced LangChain & RAG: Building a Financial AI Assistant with Real-Time Data
Soufiane Sejjari
 
Unit I Part II.pdf : Security Fundamentals
Dr. Madhuri Jawale
 
Zero carbon Building Design Guidelines V4
BassemOsman1
 
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
Inventory management chapter in automation and robotics.
atisht0104
 
Zero Carbon Building Performance standard
BassemOsman1
 
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
Biodegradable Plastics: Innovations and Market Potential (www.kiu.ac.ug)
publication11
 
IoT_Smart_Agriculture_Presentations.pptx
poojakumari696707
 
LEAP-1B presedntation xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
hatem173148
 
Introduction to Data Science: data science process
ShivarkarSandip
 
MSME 4.0 Template idea hackathon pdf to understand
alaudeenaarish
 

Designing an API for Mobile

  • 1. Victor Quinn @victorquinn Lead Node.js Engineer Designing an API for Mobile API Craft DMV Meetup, April 28 2014
  • 2. Download Gives you real-time information on the people around you ! It’s free!! ! This will be pretty fast-paced More About SocialRadar
  • 3. Special considerations for a Mobile API • Speed really matters • Battery usage - minimize • Maximizing network utilization • Response size matters • Minimize number of requests • Stateless
  • 4. Speed: Problems • Only one thing on screen at a time, perception change • On desktop other things can distract • Best Case: ~400ms latency for round trip on cell network • We tested at SocialRadar using a basic ping no-op endpoint • Verizon LTE, iPhone 5S • Device doesn’t maintain active connection • Average case much worse, ~1000ms round trip
  • 5. Ideal round trip iPhone 5S on Verizon LTE User's Phone API 200ms 200ms 200ms Total round trip time 800ms 200ms bit of hand waving, I’m not a network expert
  • 6. Likely round trip iPhone 4S on Verizon 3G User's Phone API 500ms 500ms 200ms Total round trip time 1600ms 400ms
  • 7. Speed: Solutions • Cache anything humanly possible • Respond as quickly as possible, deferring anything that doesn’t need to be done immediately • Queue most things • Make sure your API can handle high concurrency (we settled on Node.js to accomplish this, WhatsApp uses Erlang)
  • 8. Minimize battery usage ! • Brief note about cell battery and network usage (more) • Response size matters • Minimize number of requests Maximize network utilization
  • 9. Response Size: Problems • At SocialRadar, we tested responses of different sizes • Optimal was largest response that would fit into a single TCP packet on the cell network. • Around 128KB. Differs based on client device and network • Any longer would jump response time significantly
  • 10. Response Size: Solutions • Paging sizes — largest that fit within TCP packet window • Contrast with Desktop, paging more dependent on server response time and UI
  • 11. User's Phone API 200ms 200ms 200ms Total round trip time 800ms 200ms Page size of 20 users To retrieve 100 users, ~4s Paging Size: 20 (Ideal)
  • 12. Paging Size: 50 (Ideal) User's Phone API 200ms 200ms 500ms Total round trip time 1100ms 200ms Page size of 50 users To retrieve 100 users, ~2.2s
  • 13. Paging Size: 20 (Likely) User's Phone API 500ms 500ms 200ms Total round trip time 1600ms 400ms To retrieve 100 users, ~8s
  • 14. Paging Size: 50 (Likely) User's Phone API 500ms 500ms 500ms Total round trip time 1900ms 400ms To retrieve 100 users, ~3.8s
  • 15. Number of Requests: Problems • Traditionally parallelized, not (well) on mobile • Battery life is of great concern and every network request eats into that • Spinning up the cell modem, making request, waiting for it drains the battery • So if you make 5 requests instead of 1, draining battery, leaving user waiting
  • 16. Number of Requests: Solutions • Paging size as mentioned above, try to maximize response that will fit in a packet to minimize the number of requests • So one request with 20KB much better than 5 with 4KB each • Batch multiple requests into a single one
  • 17. Batch Request Library • Finding no great existing batch request library for Node.js, we rolled our own open source library • http://batch-request.socialradar.com • Allows you to send a single request that represents multiple • No need to compromise on RESTful principles and move to a SOA • Handles complex dependencies
  • 18. Batch Request Library (2) 1. npm install batch-request 2. Add one line of code to your API:
 app.post('/batch', batch.validate, batch);! 3. Send batch request as single POST:
 {
 "myRequest1": {
 "method": "GET",
 "uri": "http://api.mysite.com/users/1/first_name"
 },
 "myRequest2": {
 "method": "GET",
 "uri": "http://api.mysite.com/users/1/email"
 }
 }
  • 19. Batch Request Library (3) 4. Receive single response:
 {
 "myRequest1": {
 “statusCode": 200,
 “body": “Victor”,
 “headers”: {…}
 },
 "myRequest2": {
 “statusCode": 200,
 “body": “[email protected]”,
 “headers”: {…}
 }
 }
  • 20. When you pull to refresh, Batch Request to: • Update user location with latest GPS reading • Retrieve current City/State • Retrieve most recent stat numbers • Get some user lists to cache them
  • 21. Stateless • Cell networks are spotty • For performance, want load balance among multiple servers • Solution: Assign access token to device rather than relying on sessions for user access • We have an access token which is an encrypted string containing user_id and some other stuff
  • 22. Victor Quinn @victorquinn Lead Node.js Engineer ! Download our App Questions?