SlideShare une entreprise Scribd logo
1  sur  68
Télécharger pour lire hors ligne
Mobile API
                             Design & Techniques.
                             Fred Brunel
                             CTO




Wednesday, 29 February, 12
Wednesday, 29 February, 12
Wednesday, 29 February, 12
Wednesday, 29 February, 12
Why?




Wednesday, 29 February, 12
Though for CPU power
                             Though for bandwidth
                             Lazy designed.
                             Too close to database.


Wednesday, 29 February, 12
A mobile device is
                             Low powered
                             Low bandwidth
                             Runs on battery!


Wednesday, 29 February, 12
A the network is the
                             weak link.




Wednesday, 29 February, 12
Network conditions
                             change in real-time.




Wednesday, 29 February, 12
We want to keep the
                             best user experience
                             at all time.
                             Nobody wants an
                             unresponsive app.
Wednesday, 29 February, 12
The features of an
                             API has a huge
                             impact on
                             performances.


Wednesday, 29 February, 12
An API is a contract
                             that dictates what
                             can or cannot be
                             done (directly).


Wednesday, 29 February, 12
When the API is too
                             lazy, or incomplete;
                             the burden is put on
                             the mobile app.


Wednesday, 29 February, 12
Any workaround put
                             a stress on the
                             mobile app to use
                             too much network.


Wednesday, 29 February, 12
API = User Interface.

                             Should be simple and
                             get the job done. Fast.


Wednesday, 29 February, 12
Landlord Report.



Wednesday, 29 February, 12
Simple




                      Standard   Complete
Wednesday, 29 February, 12
Simple




                             SOAP
        WS-*
                      Standard                      Complete
           XML-RPC                  Pure REST
Wednesday, 29 February, 12
Simple




                                 Complete
Wednesday, 29 February, 12
Trust the OSI model.
                             Works everywhere.
                             And it’s plenty enough.

                             http://en.wikipedia.org/wiki/OSI_model




Wednesday, 29 February, 12
REST-ish API + JSON

                             Pure REST is a nice to
                             have but not a goal.


Wednesday, 29 February, 12
GET/POST + Action +
                             Params is fine.

                             PUT/DELETE are nice
                             to have.
Wednesday, 29 February, 12
Twitter is also REST-ish

                             POST statuses/create
                             POST statuses/destroy/:id
                             POST statuses/update



Wednesday, 29 February, 12
REST put an emphasis
                             on actions applied to
                             resources; but the
                             issue is the
                             representation.
Wednesday, 29 February, 12
Simplify the life of the
                             implementor.
                             Be pragmatic.



Wednesday, 29 February, 12
When designing your
                             API payloads, pay
                             attention to
                             consistency and
                             completeness.
Wednesday, 29 February, 12
Consistency means
                             developer know what
                             to expect.
                             Principle of least
                             astonishment.
Wednesday, 29 February, 12
Completeness means
                             less roundtrips.




Wednesday, 29 February, 12
HTTP latency on 3G

                             ~ 1 second.

                             Every request count.
Wednesday, 29 February, 12
API is NOT a CRUD
                             interface to your SQL
                             database.

                             It’s a facade.
Wednesday, 29 February, 12
Facade
                             App                        Database
                                           API

                                           Data
                             Display                     Raw Data
                                       Representation




Wednesday, 29 February, 12
The facade answer to
                             high-level questions.

                             Think services, not
                             objects and methods.
Wednesday, 29 February, 12
So, how do we start
                             from here?




Wednesday, 29 February, 12
Most of the time, a
                             mobile API will be use
                             to get information to
                             be displayed on a
                             screen.
Wednesday, 29 February, 12
Reverse Design.

                             Start from the UI
                             Not the data


Wednesday, 29 February, 12
1. Think screens
                             2.Entities to display
                             3.Design entity models
                             4.Design services


Wednesday, 29 February, 12
Wednesday, 29 February, 12
ID
                             Title
                             Town
                             Country
                             Rating
                             Thumbnail URL
                             Geocode
                             Website
                             Email
                             Description

Wednesday, 29 February, 12
Then, format the
                             representation to be as
                             efficient as possible.



Wednesday, 29 February, 12
Each JSON entity
                             should have the same
                             consistent
                             representation.


Wednesday, 29 February, 12
"person": {
                               "id": 1234,
                               "name": "Fred",
                               "lastname": "Brunel",
                               "company": "WhereCloud"
                             }




Wednesday, 29 February, 12
"book": {
                               "name": "Steve Jobs",
                               "author": "Walter Isaacson",
                               "lenders" = [{
                                   "person_id": 1234,
                                   "person_name": "Fred",
                                   "person_lastname": "Brunel"
                               }]
                             }
                                                          BAD
Wednesday, 29 February, 12
"book": {
                               "name": "Steve Jobs",
                               "author": "Walter Isaacson",
                               "lenders" = [{
                                   "id": 1234,
                                   "name": "Fred",
                                   "lastname": "Brunel"
                               }]
                             }
                                                      GOOD
Wednesday, 29 February, 12
...
                             "user_mentions": [{
                                 "id": 22548447,
                                 "id_str": "22548447",
                                 "screen_name": "rno",
                                 "name": "Arnaud Meunier",
                                 "indices": [0, 4]
                             ]}
                             ...




Wednesday, 29 February, 12
Pick the right
                             granularity.

                             Denormalize!


Wednesday, 29 February, 12
"result": {
                               ...
                               "categories" = [{ "id": 2 }],
                               "images": [{ "id": 317171 }],
                               "tags": [{ "id": 555 }]
                               ...
                             }




Wednesday, 29 February, 12
"result": {
                               ...
                               "categories": [{
                                 "id": 2
                                 "name" = "food"
                               }],
                               "images" = [{
                                 "id": 317171
                                 "url": "http://image.com/a.png"
                               }], ...
                             }

Wednesday, 29 February, 12
Denormalize the most
                             common fields.
                             Avoid unnecessary
                             roundtrips.


Wednesday, 29 February, 12
Don’t make the app
                             connects to 10 3rd-
                             party systems.
                             Aggregate on the
                             backend.
Wednesday, 29 February, 12
The backend has the
                             power, bandwidth
                             and knowledge.
                             Use it!


Wednesday, 29 February, 12
Make it fast!

                             Some good techniques
                             to be aware of.


Wednesday, 29 February, 12
JSON is fast to parse,
                             but still, compress
                             everything.



Wednesday, 29 February, 12
Use Cache-Control on
                             every response that
                             can be cached.



Wednesday, 29 February, 12
Partial Responses &
                             Partial Updates

                             Let the client decides
                             what to get/update.
Wednesday, 29 February, 12
GET
                             http://www.google.com/calendar/
                             feeds/zachpm@google.com/private/
                             full?fields=entry(title,gd:when)




Wednesday, 29 February, 12
PATCH /myfeed/1/1/
                             Content-Type: application/xml

                             <entry
                               xmlns='http://www.w3.org/2005/Atom'
                               xmlns:gd='http://schemas.google...'
                               gd:fields='description'>
                               <title>New title</title>
                             </entry>




Wednesday, 29 February, 12
Batch Requests

                             Send multiple
                             operations, get one
                             answer.
Wednesday, 29 February, 12
Persistent
                             Connections.

                             Keep a connection
                             nailed up.
Wednesday, 29 February, 12
“If you’re serious
                             about network, you
                             should make your
                             own protocol.”
                             —Fake Alan Kay.



Wednesday, 29 February, 12
The fabric of the
                             Internet is TCP/IP, not
                             HTTP.



Wednesday, 29 February, 12
Make your own
                             Binary Protocol.

                             Lot faster than text +
                             compression. Sorry!
Wednesday, 29 February, 12
Message-based API

                             Custom TLV
                             MessagePack
                             ProtocolBuffers
Wednesday, 29 February, 12
a message

                             TAG         LENGTH                  VALUE
                             16 bits       32 bits               n bits




                                 TLV     TLV      TLV      TLV      TLV



                                 TLV     TLV      TLV      TLV      TLV


                                       messages streaming



Wednesday, 29 February, 12
message Person {
                               required string name = 1;
                               required int32 id = 2;
                               optional string email = 3;

                                 enum PhoneType {
                                   MOBILE = 0;
                                   HOME = 1;
                                   WORK = 2;
                                 }

                                 message PhoneNumber {
                                   required string number = 1;
                                   optional PhoneType type = 2 [default = HOME];
                                 }

                                 repeated PhoneNumber phone = 4;
                             }




Wednesday, 29 February, 12
Person person;
                             person.set_name("John Doe");
                             person.set_id(1234);
                             person.set_email("jdoe@example.com");
                             fstream output("myfile", ios::out | ios::binary);
                             person.SerializeToOstream(&output);



                             fstream input("myfile", ios::in | ios::binary);
                             Person person;
                             person.ParseFromIstream(&input);
                             cout << "Name: " << person.name() << endl;
                             cout << "E-mail: " << person.email() << endl;




Wednesday, 29 February, 12
So.

                             They are tons of
                             efficient solutions
                             and techniques.
Wednesday, 29 February, 12
Remember.
                             Be pragmatic.
                             Be consistent
                             Be complete.
                             Be fast.
Wednesday, 29 February, 12
Thank you.


                             twitter.com/fbrunel
                             fred@wherecloud.com

Wednesday, 29 February, 12

Contenu connexe

En vedette

Mobile Api and Caching
Mobile Api and CachingMobile Api and Caching
Mobile Api and CachingNew Relic
 
Mobile API: Design & Techniques
Mobile API: Design & TechniquesMobile API: Design & Techniques
Mobile API: Design & TechniquesFred Brunel
 
Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)Chuck Greb
 
Data to Go: Mobile API Design
Data to Go: Mobile API DesignData to Go: Mobile API Design
Data to Go: Mobile API DesignChuck Greb
 
Build a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.jsBuild a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.jsStormpath
 
We we should be Mobile API - First, by Brad Hipps
We we should be Mobile API - First, by Brad HippsWe we should be Mobile API - First, by Brad Hipps
We we should be Mobile API - First, by Brad HippsPuerto Rico Tech Summit
 
Designing API for mobile apps (MobileWarsaw 19.01.2015)
Designing API for mobile apps (MobileWarsaw 19.01.2015)Designing API for mobile apps (MobileWarsaw 19.01.2015)
Designing API for mobile apps (MobileWarsaw 19.01.2015)Wojtek Erbetowski
 

En vedette (8)

Mobile Api and Caching
Mobile Api and CachingMobile Api and Caching
Mobile Api and Caching
 
Mobile API: Design & Techniques
Mobile API: Design & TechniquesMobile API: Design & Techniques
Mobile API: Design & Techniques
 
Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)
 
Data to Go: Mobile API Design
Data to Go: Mobile API DesignData to Go: Mobile API Design
Data to Go: Mobile API Design
 
Build a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.jsBuild a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.js
 
We we should be Mobile API - First, by Brad Hipps
We we should be Mobile API - First, by Brad HippsWe we should be Mobile API - First, by Brad Hipps
We we should be Mobile API - First, by Brad Hipps
 
Designing API for mobile apps (MobileWarsaw 19.01.2015)
Designing API for mobile apps (MobileWarsaw 19.01.2015)Designing API for mobile apps (MobileWarsaw 19.01.2015)
Designing API for mobile apps (MobileWarsaw 19.01.2015)
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Similaire à Mobile API Design Techniques

SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013
SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013
SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013Gigaom
 
Building a compiler in JRuby
Building a compiler in JRubyBuilding a compiler in JRuby
Building a compiler in JRubyakinsgre
 
Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)
Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)
Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)Rick. Bahague
 
Mobile in a Nutshell
Mobile in a NutshellMobile in a Nutshell
Mobile in a NutshellGauntFace
 
Apachecon cassandra transport
Apachecon cassandra transportApachecon cassandra transport
Apachecon cassandra transportzznate
 
The Future of Big Data is Relational (or why you can't escape SQL)
The Future of Big Data is Relational (or why you can't escape SQL)The Future of Big Data is Relational (or why you can't escape SQL)
The Future of Big Data is Relational (or why you can't escape SQL)OReillyStrata
 
Mobile first responsive web design
Mobile first responsive web designMobile first responsive web design
Mobile first responsive web designWill Hindson
 
Using Data to Drive User Experiences
Using Data to Drive User ExperiencesUsing Data to Drive User Experiences
Using Data to Drive User ExperiencesRam Parthasarathy
 
Apple Store, London 2009 02 25
Apple Store, London 2009 02 25Apple Store, London 2009 02 25
Apple Store, London 2009 02 25ProjectWizards
 
Products = Mess - How to avoid it? By Suman Mukherjee
Products = Mess - How to avoid it?  By Suman MukherjeeProducts = Mess - How to avoid it?  By Suman Mukherjee
Products = Mess - How to avoid it? By Suman MukherjeeWebGeek Philippines
 
Tech Tools for Meeting Professionals
Tech Tools for Meeting ProfessionalsTech Tools for Meeting Professionals
Tech Tools for Meeting ProfessionalsMidori Connolly
 
SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012
SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012
SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012Gigaom
 
Best Practices - Seeqnce - 23/24-02-2012
Best Practices - Seeqnce - 23/24-02-2012Best Practices - Seeqnce - 23/24-02-2012
Best Practices - Seeqnce - 23/24-02-2012Youssef Chaker
 

Similaire à Mobile API Design Techniques (17)

SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013
SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013
SOLVING BIG DATA APP DEVELOPERS BIGGEST PAINS from Structure:Data 2013
 
Building a compiler in JRuby
Building a compiler in JRubyBuilding a compiler in JRuby
Building a compiler in JRuby
 
100% JS
100% JS100% JS
100% JS
 
Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)
Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)
Drupal campmanila 2012 (Responsive Web in Drupal with Omega Theme)
 
Function currying
Function curryingFunction currying
Function currying
 
Reef - ESUG2011
Reef  - ESUG2011Reef  - ESUG2011
Reef - ESUG2011
 
Mobile in a Nutshell
Mobile in a NutshellMobile in a Nutshell
Mobile in a Nutshell
 
Apachecon cassandra transport
Apachecon cassandra transportApachecon cassandra transport
Apachecon cassandra transport
 
The Future of Big Data is Relational (or why you can't escape SQL)
The Future of Big Data is Relational (or why you can't escape SQL)The Future of Big Data is Relational (or why you can't escape SQL)
The Future of Big Data is Relational (or why you can't escape SQL)
 
Mobile first responsive web design
Mobile first responsive web designMobile first responsive web design
Mobile first responsive web design
 
Using Data to Drive User Experiences
Using Data to Drive User ExperiencesUsing Data to Drive User Experiences
Using Data to Drive User Experiences
 
Apple Store, London 2009 02 25
Apple Store, London 2009 02 25Apple Store, London 2009 02 25
Apple Store, London 2009 02 25
 
Products = Mess - How to avoid it? By Suman Mukherjee
Products = Mess - How to avoid it?  By Suman MukherjeeProducts = Mess - How to avoid it?  By Suman Mukherjee
Products = Mess - How to avoid it? By Suman Mukherjee
 
Tech Tools for Meeting Professionals
Tech Tools for Meeting ProfessionalsTech Tools for Meeting Professionals
Tech Tools for Meeting Professionals
 
Making SharePoint Mobile
Making SharePoint MobileMaking SharePoint Mobile
Making SharePoint Mobile
 
SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012
SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012
SMART TOOLS: DISSECT, DIGEST AND DELIVER BIG DATA from Structure:Data 2012
 
Best Practices - Seeqnce - 23/24-02-2012
Best Practices - Seeqnce - 23/24-02-2012Best Practices - Seeqnce - 23/24-02-2012
Best Practices - Seeqnce - 23/24-02-2012
 

Plus de Trieu Nguyen

Building Your Customer Data Platform with LEO CDP in Travel Industry.pdf
Building Your Customer Data Platform with LEO CDP in Travel Industry.pdfBuilding Your Customer Data Platform with LEO CDP in Travel Industry.pdf
Building Your Customer Data Platform with LEO CDP in Travel Industry.pdfTrieu Nguyen
 
Building Your Customer Data Platform with LEO CDP - Spa and Hotel Business
Building Your Customer Data Platform with LEO CDP - Spa and Hotel BusinessBuilding Your Customer Data Platform with LEO CDP - Spa and Hotel Business
Building Your Customer Data Platform with LEO CDP - Spa and Hotel BusinessTrieu Nguyen
 
Building Your Customer Data Platform with LEO CDP
Building Your Customer Data Platform with LEO CDP Building Your Customer Data Platform with LEO CDP
Building Your Customer Data Platform with LEO CDP Trieu Nguyen
 
How to track and improve Customer Experience with LEO CDP
How to track and improve Customer Experience with LEO CDPHow to track and improve Customer Experience with LEO CDP
How to track and improve Customer Experience with LEO CDPTrieu Nguyen
 
[Notes] Customer 360 Analytics with LEO CDP
[Notes] Customer 360 Analytics with LEO CDP[Notes] Customer 360 Analytics with LEO CDP
[Notes] Customer 360 Analytics with LEO CDPTrieu Nguyen
 
Leo CDP - Pitch Deck
Leo CDP - Pitch DeckLeo CDP - Pitch Deck
Leo CDP - Pitch DeckTrieu Nguyen
 
LEO CDP - What's new in 2022
LEO CDP  - What's new in 2022LEO CDP  - What's new in 2022
LEO CDP - What's new in 2022Trieu Nguyen
 
Lộ trình triển khai LEO CDP cho ngành bất động sản
Lộ trình triển khai LEO CDP cho ngành bất động sảnLộ trình triển khai LEO CDP cho ngành bất động sản
Lộ trình triển khai LEO CDP cho ngành bất động sảnTrieu Nguyen
 
Why is LEO CDP important for digital business ?
Why is LEO CDP important for digital business ?Why is LEO CDP important for digital business ?
Why is LEO CDP important for digital business ?Trieu Nguyen
 
From Dataism to Customer Data Platform
From Dataism to Customer Data PlatformFrom Dataism to Customer Data Platform
From Dataism to Customer Data PlatformTrieu Nguyen
 
Data collection, processing & organization with USPA framework
Data collection, processing & organization with USPA frameworkData collection, processing & organization with USPA framework
Data collection, processing & organization with USPA frameworkTrieu Nguyen
 
Part 1: Introduction to digital marketing technology
Part 1: Introduction to digital marketing technologyPart 1: Introduction to digital marketing technology
Part 1: Introduction to digital marketing technologyTrieu Nguyen
 
Why is Customer Data Platform (CDP) ?
Why is Customer Data Platform (CDP) ?Why is Customer Data Platform (CDP) ?
Why is Customer Data Platform (CDP) ?Trieu Nguyen
 
How to build a Personalized News Recommendation Platform
How to build a Personalized News Recommendation PlatformHow to build a Personalized News Recommendation Platform
How to build a Personalized News Recommendation PlatformTrieu Nguyen
 
How to grow your business in the age of digital marketing 4.0
How to grow your business  in the age of digital marketing 4.0How to grow your business  in the age of digital marketing 4.0
How to grow your business in the age of digital marketing 4.0Trieu Nguyen
 
Video Ecosystem and some ideas about video big data
Video Ecosystem and some ideas about video big dataVideo Ecosystem and some ideas about video big data
Video Ecosystem and some ideas about video big dataTrieu Nguyen
 
Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)Trieu Nguyen
 
Open OTT - Video Content Platform
Open OTT - Video Content PlatformOpen OTT - Video Content Platform
Open OTT - Video Content PlatformTrieu Nguyen
 
Apache Hadoop and Spark: Introduction and Use Cases for Data Analysis
Apache Hadoop and Spark: Introduction and Use Cases for Data AnalysisApache Hadoop and Spark: Introduction and Use Cases for Data Analysis
Apache Hadoop and Spark: Introduction and Use Cases for Data AnalysisTrieu Nguyen
 
Introduction to Recommendation Systems (Vietnam Web Submit)
Introduction to Recommendation Systems (Vietnam Web Submit)Introduction to Recommendation Systems (Vietnam Web Submit)
Introduction to Recommendation Systems (Vietnam Web Submit)Trieu Nguyen
 

Plus de Trieu Nguyen (20)

Building Your Customer Data Platform with LEO CDP in Travel Industry.pdf
Building Your Customer Data Platform with LEO CDP in Travel Industry.pdfBuilding Your Customer Data Platform with LEO CDP in Travel Industry.pdf
Building Your Customer Data Platform with LEO CDP in Travel Industry.pdf
 
Building Your Customer Data Platform with LEO CDP - Spa and Hotel Business
Building Your Customer Data Platform with LEO CDP - Spa and Hotel BusinessBuilding Your Customer Data Platform with LEO CDP - Spa and Hotel Business
Building Your Customer Data Platform with LEO CDP - Spa and Hotel Business
 
Building Your Customer Data Platform with LEO CDP
Building Your Customer Data Platform with LEO CDP Building Your Customer Data Platform with LEO CDP
Building Your Customer Data Platform with LEO CDP
 
How to track and improve Customer Experience with LEO CDP
How to track and improve Customer Experience with LEO CDPHow to track and improve Customer Experience with LEO CDP
How to track and improve Customer Experience with LEO CDP
 
[Notes] Customer 360 Analytics with LEO CDP
[Notes] Customer 360 Analytics with LEO CDP[Notes] Customer 360 Analytics with LEO CDP
[Notes] Customer 360 Analytics with LEO CDP
 
Leo CDP - Pitch Deck
Leo CDP - Pitch DeckLeo CDP - Pitch Deck
Leo CDP - Pitch Deck
 
LEO CDP - What's new in 2022
LEO CDP  - What's new in 2022LEO CDP  - What's new in 2022
LEO CDP - What's new in 2022
 
Lộ trình triển khai LEO CDP cho ngành bất động sản
Lộ trình triển khai LEO CDP cho ngành bất động sảnLộ trình triển khai LEO CDP cho ngành bất động sản
Lộ trình triển khai LEO CDP cho ngành bất động sản
 
Why is LEO CDP important for digital business ?
Why is LEO CDP important for digital business ?Why is LEO CDP important for digital business ?
Why is LEO CDP important for digital business ?
 
From Dataism to Customer Data Platform
From Dataism to Customer Data PlatformFrom Dataism to Customer Data Platform
From Dataism to Customer Data Platform
 
Data collection, processing & organization with USPA framework
Data collection, processing & organization with USPA frameworkData collection, processing & organization with USPA framework
Data collection, processing & organization with USPA framework
 
Part 1: Introduction to digital marketing technology
Part 1: Introduction to digital marketing technologyPart 1: Introduction to digital marketing technology
Part 1: Introduction to digital marketing technology
 
Why is Customer Data Platform (CDP) ?
Why is Customer Data Platform (CDP) ?Why is Customer Data Platform (CDP) ?
Why is Customer Data Platform (CDP) ?
 
How to build a Personalized News Recommendation Platform
How to build a Personalized News Recommendation PlatformHow to build a Personalized News Recommendation Platform
How to build a Personalized News Recommendation Platform
 
How to grow your business in the age of digital marketing 4.0
How to grow your business  in the age of digital marketing 4.0How to grow your business  in the age of digital marketing 4.0
How to grow your business in the age of digital marketing 4.0
 
Video Ecosystem and some ideas about video big data
Video Ecosystem and some ideas about video big dataVideo Ecosystem and some ideas about video big data
Video Ecosystem and some ideas about video big data
 
Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)
 
Open OTT - Video Content Platform
Open OTT - Video Content PlatformOpen OTT - Video Content Platform
Open OTT - Video Content Platform
 
Apache Hadoop and Spark: Introduction and Use Cases for Data Analysis
Apache Hadoop and Spark: Introduction and Use Cases for Data AnalysisApache Hadoop and Spark: Introduction and Use Cases for Data Analysis
Apache Hadoop and Spark: Introduction and Use Cases for Data Analysis
 
Introduction to Recommendation Systems (Vietnam Web Submit)
Introduction to Recommendation Systems (Vietnam Web Submit)Introduction to Recommendation Systems (Vietnam Web Submit)
Introduction to Recommendation Systems (Vietnam Web Submit)
 

Dernier

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Dernier (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

Mobile API Design Techniques

  • 1. Mobile API Design & Techniques. Fred Brunel CTO Wednesday, 29 February, 12
  • 6. Though for CPU power Though for bandwidth Lazy designed. Too close to database. Wednesday, 29 February, 12
  • 7. A mobile device is Low powered Low bandwidth Runs on battery! Wednesday, 29 February, 12
  • 8. A the network is the weak link. Wednesday, 29 February, 12
  • 9. Network conditions change in real-time. Wednesday, 29 February, 12
  • 10. We want to keep the best user experience at all time. Nobody wants an unresponsive app. Wednesday, 29 February, 12
  • 11. The features of an API has a huge impact on performances. Wednesday, 29 February, 12
  • 12. An API is a contract that dictates what can or cannot be done (directly). Wednesday, 29 February, 12
  • 13. When the API is too lazy, or incomplete; the burden is put on the mobile app. Wednesday, 29 February, 12
  • 14. Any workaround put a stress on the mobile app to use too much network. Wednesday, 29 February, 12
  • 15. API = User Interface. Should be simple and get the job done. Fast. Wednesday, 29 February, 12
  • 17. Simple Standard Complete Wednesday, 29 February, 12
  • 18. Simple SOAP WS-* Standard Complete XML-RPC Pure REST Wednesday, 29 February, 12
  • 19. Simple Complete Wednesday, 29 February, 12
  • 20. Trust the OSI model. Works everywhere. And it’s plenty enough. http://en.wikipedia.org/wiki/OSI_model Wednesday, 29 February, 12
  • 21. REST-ish API + JSON Pure REST is a nice to have but not a goal. Wednesday, 29 February, 12
  • 22. GET/POST + Action + Params is fine. PUT/DELETE are nice to have. Wednesday, 29 February, 12
  • 23. Twitter is also REST-ish POST statuses/create POST statuses/destroy/:id POST statuses/update Wednesday, 29 February, 12
  • 24. REST put an emphasis on actions applied to resources; but the issue is the representation. Wednesday, 29 February, 12
  • 25. Simplify the life of the implementor. Be pragmatic. Wednesday, 29 February, 12
  • 26. When designing your API payloads, pay attention to consistency and completeness. Wednesday, 29 February, 12
  • 27. Consistency means developer know what to expect. Principle of least astonishment. Wednesday, 29 February, 12
  • 28. Completeness means less roundtrips. Wednesday, 29 February, 12
  • 29. HTTP latency on 3G ~ 1 second. Every request count. Wednesday, 29 February, 12
  • 30. API is NOT a CRUD interface to your SQL database. It’s a facade. Wednesday, 29 February, 12
  • 31. Facade App Database API Data Display Raw Data Representation Wednesday, 29 February, 12
  • 32. The facade answer to high-level questions. Think services, not objects and methods. Wednesday, 29 February, 12
  • 33. So, how do we start from here? Wednesday, 29 February, 12
  • 34. Most of the time, a mobile API will be use to get information to be displayed on a screen. Wednesday, 29 February, 12
  • 35. Reverse Design. Start from the UI Not the data Wednesday, 29 February, 12
  • 36. 1. Think screens 2.Entities to display 3.Design entity models 4.Design services Wednesday, 29 February, 12
  • 38. ID Title Town Country Rating Thumbnail URL Geocode Website Email Description Wednesday, 29 February, 12
  • 39. Then, format the representation to be as efficient as possible. Wednesday, 29 February, 12
  • 40. Each JSON entity should have the same consistent representation. Wednesday, 29 February, 12
  • 41. "person": { "id": 1234, "name": "Fred", "lastname": "Brunel", "company": "WhereCloud" } Wednesday, 29 February, 12
  • 42. "book": { "name": "Steve Jobs", "author": "Walter Isaacson", "lenders" = [{ "person_id": 1234, "person_name": "Fred", "person_lastname": "Brunel" }] } BAD Wednesday, 29 February, 12
  • 43. "book": { "name": "Steve Jobs", "author": "Walter Isaacson", "lenders" = [{ "id": 1234, "name": "Fred", "lastname": "Brunel" }] } GOOD Wednesday, 29 February, 12
  • 44. ... "user_mentions": [{ "id": 22548447, "id_str": "22548447", "screen_name": "rno", "name": "Arnaud Meunier", "indices": [0, 4] ]} ... Wednesday, 29 February, 12
  • 45. Pick the right granularity. Denormalize! Wednesday, 29 February, 12
  • 46. "result": { ... "categories" = [{ "id": 2 }], "images": [{ "id": 317171 }], "tags": [{ "id": 555 }] ... } Wednesday, 29 February, 12
  • 47. "result": { ... "categories": [{ "id": 2 "name" = "food" }], "images" = [{ "id": 317171 "url": "http://image.com/a.png" }], ... } Wednesday, 29 February, 12
  • 48. Denormalize the most common fields. Avoid unnecessary roundtrips. Wednesday, 29 February, 12
  • 49. Don’t make the app connects to 10 3rd- party systems. Aggregate on the backend. Wednesday, 29 February, 12
  • 50. The backend has the power, bandwidth and knowledge. Use it! Wednesday, 29 February, 12
  • 51. Make it fast! Some good techniques to be aware of. Wednesday, 29 February, 12
  • 52. JSON is fast to parse, but still, compress everything. Wednesday, 29 February, 12
  • 53. Use Cache-Control on every response that can be cached. Wednesday, 29 February, 12
  • 54. Partial Responses & Partial Updates Let the client decides what to get/update. Wednesday, 29 February, 12
  • 55. GET http://www.google.com/calendar/ feeds/zachpm@google.com/private/ full?fields=entry(title,gd:when) Wednesday, 29 February, 12
  • 56. PATCH /myfeed/1/1/ Content-Type: application/xml <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google...' gd:fields='description'> <title>New title</title> </entry> Wednesday, 29 February, 12
  • 57. Batch Requests Send multiple operations, get one answer. Wednesday, 29 February, 12
  • 58. Persistent Connections. Keep a connection nailed up. Wednesday, 29 February, 12
  • 59. “If you’re serious about network, you should make your own protocol.” —Fake Alan Kay. Wednesday, 29 February, 12
  • 60. The fabric of the Internet is TCP/IP, not HTTP. Wednesday, 29 February, 12
  • 61. Make your own Binary Protocol. Lot faster than text + compression. Sorry! Wednesday, 29 February, 12
  • 62. Message-based API Custom TLV MessagePack ProtocolBuffers Wednesday, 29 February, 12
  • 63. a message TAG LENGTH VALUE 16 bits 32 bits n bits TLV TLV TLV TLV TLV TLV TLV TLV TLV TLV messages streaming Wednesday, 29 February, 12
  • 64. message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } Wednesday, 29 February, 12
  • 65. Person person; person.set_name("John Doe"); person.set_id(1234); person.set_email("jdoe@example.com"); fstream output("myfile", ios::out | ios::binary); person.SerializeToOstream(&output); fstream input("myfile", ios::in | ios::binary); Person person; person.ParseFromIstream(&input); cout << "Name: " << person.name() << endl; cout << "E-mail: " << person.email() << endl; Wednesday, 29 February, 12
  • 66. So. They are tons of efficient solutions and techniques. Wednesday, 29 February, 12
  • 67. Remember. Be pragmatic. Be consistent Be complete. Be fast. Wednesday, 29 February, 12
  • 68. Thank you. twitter.com/fbrunel fred@wherecloud.com Wednesday, 29 February, 12