SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
PREPARING YOUR WEB
SERVICES FOR ANDROID AND
 THE OTHER WAY AROUND
            SPEAKER:
       AURAS DUMANOVSCHI
OVERVIEW
● Web services: play nice with others

● Response formats

● Optimization

● Tips

● Android: using the web data

● Increasing the speed of your app
WEB SERVICES



?
WHY
WEB SERVICES



?{
      ● Offloads the data gathering,
        transformation and storage to a
        powerful server.

      ● Can do a lot of things in a very
        short time

      ● It’s connected to a large internet
WHY     pipe
IS THERE A   2ND   CHOICE?
IS THERE A   2ND   CHOICE?

        Yes!
IS THERE A        2ND     CHOICE?

             Yes!
    Where else can you get data from?
IS THERE A        2ND     CHOICE?

             Yes!
    Where else can you get data from?


    Web pages
IS THERE A        2ND     CHOICE?

              Yes!
    Where else can you get data from?


     Web pages
   That means parsing HTML client side.
YEAH, SO?



           {
               ● It takes a lot of bandwidth to download



BIG
a few            some web pages

               ● Mobile devices are usually connected to
                 high latency networks: cell towers. Not
                 even wi-fi is as reliable as fiber optic.
PROBLEMS
               ● You may have to do this a lot of times
                 just for all the data needed for a single
                 screen
OK…

You can do all that on a web server in less than the
time* for a request from a 3G Galaxy Nexus to
reach the web server.



*that’s if you don’t have the data stored in a DB and
you have to fetch it from one or more sources.
SO, WEB SERVICES…

● Just like Q & A
SO, WEB SERVICES…

● Just like Q & A
                    {   Q: THE REQUEST
SO, WEB SERVICES…

● Just like Q & A
                    {   Q: THE REQUEST

                        A: THE RESPONSE
SO, WEB SERVICES…

● Just like Q & A
                    {   Q: THE REQUEST

                        A: THE RESPONSE


● Types: REST & SOAP;
SOAP
● REQUEST: XML, specific format;

● RESPONSE: XML, specific format;
REST

● REQUEST: HTTP or other*;

● RESPONSE: XML or JSON; any type of
  document you like;



  *HTTP is the norm. But you can also
  have XML or JSON requests.
XML VS JSON

● XML: human readable and compatible
  with most platforms;

● JSON: compact and quick to parse;
NO DATA ON YOUR SERVER?

 ● Scrape it;

 ● Cache it and/or store it;

 ● Serve the data later from the local cache;
SIMPLE PLAN OF A PARSER
   ● Start point;

   ● Data gathering points;

   ● End point ;

   ● Regular expressions;
START, DATA, END
FEROVIAR
STRUCTURING DATA
● Try and return only one type of object per
  API call

● For every object type use the same
  schema everywhere.

● In some cases you can return less data
  per object, but where you have more data
  return it in the same format
STRUCTURING DATA
● If your objects have many-to-many
  relationships with other objects remove
  redundancies

I.e : use person_id to identify a person and
at the end of the response return all the
unique persons in the current call
STRUCTURING DATA


   Use pagination!
BUT IF YOU CAN’T…

● Add an API call that tells you if the data
  has been changed (timestamp, hash,
  integer, etc)

● At least make sure you compress the
  response
ANDROID SUPPORTS GZIP,
          DEFLATE
// REQUEST
HttpUriRequest request = new HttpGet(url);
request.addHeader("Accept-Encoding", "gzip");
// ...
httpClient.execute(request);

// RESPONSE
InputStream instream = response.getEntity().getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");
if (contentEncoding != null &&
contentEncoding.getValue().equalsIgnoreCase("gzip")) {
    instream = new GZIPInputStream(instream);
}
TIPS

● Build an API call that returns images in the request
  shape & size;

● Less bandwidth required, less memory used and
  less CPU time spent on rendering (no more
  stretching/shrinking, positioning and cropping);
TIPS

● Never trust the client;

● Do your security and policy checks server side
  also;

● Secure every call with a signature: call
  parameters, private key, timestamp or unique
  call id per session ➔ hashed;
ANDROID SIDE OF THINGS

 ● Parsing JSON: JSONObject or Jackson

 ● Objects vs Streaming
ANDROID SIDE OF THINGS

 ● Generate objects from the data only if you need
   them right then;

 ● In some cases (loading screens) you may need
   to load a lot of data for later use;

 ● Throw lots of data straight to a SQLite DB using
   TRANSACTIONS
WHY TRANSACTIONS?

● Not just a concept borrowed from traditional
  *SQL databases

● Uses less I/O. A whole lot less I/O.

● Like 100x faster than saving each data line by
  line
REDESCOPERA ROMANIA
SAVING
● To SQLite Databases: persistent objects with later
  use

● To static objects: volatile objects that will only be
  used just this session

● To parcelable objects: even more volatile objects

● To SharedPreferences: persistent key-value data or
  singleton objects
CACHING

● Always cache to the filesystem the images you
  download from the web;

● That’s what the ~/cache dir is for;

● Limit your bitmap memory cache and make sure
  you also recycle the bitmaps when you clear them
  from the cache;
PLAYING NICE WITH THE WEB
         SERVICE
 Detect unique install id: generate a GUID


 SharedPreferences prefs =
 context.getDefaultSharedPreferences();
 String uniqueGUID = prefs.getString("install_guid",
 null);

 if (uniqueGUID == null) {
 ! uniqueGUID = UUID.randomUUID().toString()
 ! prefs.edit().putString("install_guid",
 uniqueGUID).commit();
 }
PLAYING NICE WITH THE WEB
         SERVICE
 Detect unique device id: use ANDROID_ID


 String deviceId =
 Settings.Secure.getString(contentResolver,Settings.Se
 cure.ANDROID_ID);
PLAYING NICE WITH THE WEB
         SERVICE
● Send debugging and app identification data in HTTP
  header

● App Name/Version

● Device manufacturer/Model/ID


  Helps debugging issues remotely and

  Allows web admins to control access to their web service
THANKS

email: auras@wip.ro

twitter: @auras

This presentation is available at:

http://wip.ro/droidcon/auras.pdf

Mais conteúdo relacionado

Mais procurados

Getting started with node JS
Getting started with node JSGetting started with node JS
Getting started with node JSHamdi Hmidi
 
Introduction about-ajax-framework
Introduction about-ajax-frameworkIntroduction about-ajax-framework
Introduction about-ajax-frameworkSakthi Bro
 
AtlasCamp 2014: Static Connect Add-ons
AtlasCamp 2014: Static Connect Add-onsAtlasCamp 2014: Static Connect Add-ons
AtlasCamp 2014: Static Connect Add-onsAtlassian
 
AtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for ConfluenceAtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for ConfluenceAtlassian
 
Log File Analysis: The most powerful tool in your SEO toolkit
Log File Analysis: The most powerful tool in your SEO toolkitLog File Analysis: The most powerful tool in your SEO toolkit
Log File Analysis: The most powerful tool in your SEO toolkitTom Bennet
 
Getting Started with Web Services
Getting Started with Web ServicesGetting Started with Web Services
Getting Started with Web ServicesDataNext Solutions
 
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!Masoud Kalali
 
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...Fastly
 
Engage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data CollectionEngage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data CollectionWebtrends
 
Ng init | EPI Sousse
Ng init | EPI SousseNg init | EPI Sousse
Ng init | EPI SousseHamdi Hmidi
 
Real time web (Orbited) at BCNE3
Real time web (Orbited) at BCNE3Real time web (Orbited) at BCNE3
Real time web (Orbited) at BCNE3Alex Kavanagh
 
Building Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using WebsocketsBuilding Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using WebsocketsNaresh Chintalcheru
 
Scalable Reliable Secure REST
Scalable Reliable Secure RESTScalable Reliable Secure REST
Scalable Reliable Secure RESTguestb2ed5f
 
Web Optimization Level: Paranoid
Web Optimization Level: ParanoidWeb Optimization Level: Paranoid
Web Optimization Level: Paranoidrobin_sy
 
Introduction to performance tuning perl web applications
Introduction to performance tuning perl web applicationsIntroduction to performance tuning perl web applications
Introduction to performance tuning perl web applicationsPerrin Harkins
 
MongoDB and the MEAN Stack
MongoDB and the MEAN StackMongoDB and the MEAN Stack
MongoDB and the MEAN StackMongoDB
 
Building Scalable Websites with Perl
Building Scalable Websites with PerlBuilding Scalable Websites with Perl
Building Scalable Websites with PerlPerrin Harkins
 
Bigger Stronger Faster
Bigger Stronger FasterBigger Stronger Faster
Bigger Stronger FasterChris Love
 
Inside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYCInside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYCFastly
 

Mais procurados (20)

Getting started with node JS
Getting started with node JSGetting started with node JS
Getting started with node JS
 
Introduction about-ajax-framework
Introduction about-ajax-frameworkIntroduction about-ajax-framework
Introduction about-ajax-framework
 
AtlasCamp 2014: Static Connect Add-ons
AtlasCamp 2014: Static Connect Add-onsAtlasCamp 2014: Static Connect Add-ons
AtlasCamp 2014: Static Connect Add-ons
 
AtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for ConfluenceAtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for Confluence
 
MongoDB and Node.js
MongoDB and Node.jsMongoDB and Node.js
MongoDB and Node.js
 
Log File Analysis: The most powerful tool in your SEO toolkit
Log File Analysis: The most powerful tool in your SEO toolkitLog File Analysis: The most powerful tool in your SEO toolkit
Log File Analysis: The most powerful tool in your SEO toolkit
 
Getting Started with Web Services
Getting Started with Web ServicesGetting Started with Web Services
Getting Started with Web Services
 
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
 
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
 
Engage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data CollectionEngage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data Collection
 
Ng init | EPI Sousse
Ng init | EPI SousseNg init | EPI Sousse
Ng init | EPI Sousse
 
Real time web (Orbited) at BCNE3
Real time web (Orbited) at BCNE3Real time web (Orbited) at BCNE3
Real time web (Orbited) at BCNE3
 
Building Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using WebsocketsBuilding Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using Websockets
 
Scalable Reliable Secure REST
Scalable Reliable Secure RESTScalable Reliable Secure REST
Scalable Reliable Secure REST
 
Web Optimization Level: Paranoid
Web Optimization Level: ParanoidWeb Optimization Level: Paranoid
Web Optimization Level: Paranoid
 
Introduction to performance tuning perl web applications
Introduction to performance tuning perl web applicationsIntroduction to performance tuning perl web applications
Introduction to performance tuning perl web applications
 
MongoDB and the MEAN Stack
MongoDB and the MEAN StackMongoDB and the MEAN Stack
MongoDB and the MEAN Stack
 
Building Scalable Websites with Perl
Building Scalable Websites with PerlBuilding Scalable Websites with Perl
Building Scalable Websites with Perl
 
Bigger Stronger Faster
Bigger Stronger FasterBigger Stronger Faster
Bigger Stronger Faster
 
Inside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYCInside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYC
 

Destaque

خدمات الويب (Web Services) و كيف تنشئها
 خدمات الويب (Web Services) و كيف تنشئها  خدمات الويب (Web Services) و كيف تنشئها
خدمات الويب (Web Services) و كيف تنشئها lunarhalo
 
5 android web_service
5 android web_service5 android web_service
5 android web_serviceSaber LAJILI
 
مقدمة عن بايثون / جانقو
مقدمة عن بايثون / جانقومقدمة عن بايثون / جانقو
مقدمة عن بايثون / جانقوlunarhalo
 
بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
 بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة  بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة lunarhalo
 
Openerp 8
Openerp 8Openerp 8
Openerp 8smiste
 
[Android] Web services
[Android] Web services[Android] Web services
[Android] Web servicesNikmesoft Ltd
 
Odoo Module de Fabrication
Odoo Module de FabricationOdoo Module de Fabrication
Odoo Module de FabricationAnalystik
 
Webservice for android ppt
Webservice for android pptWebservice for android ppt
Webservice for android pptsantosh lamba
 
Atelier1 mise en place d’odoo
Atelier1   mise en place d’odooAtelier1   mise en place d’odoo
Atelier1 mise en place d’odooAbdelouahed Abdou
 
Migration gmao de openerp 6.1 vers odoo 8
Migration gmao de openerp 6.1 vers odoo 8Migration gmao de openerp 6.1 vers odoo 8
Migration gmao de openerp 6.1 vers odoo 8HORIYASOFT
 
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...Abdelouahed Abdou
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Abdelouahed Abdou
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec OdooHassan WAHSISS
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)G²FOSS ENIT
 
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1Addi Ait-Mlouk
 
Odoo: Tableaux de bord et Reporting
Odoo: Tableaux de bord et ReportingOdoo: Tableaux de bord et Reporting
Odoo: Tableaux de bord et ReportingAfrica Performances
 
Gestion Comptable et Financiere Odoo V8
Gestion Comptable et Financiere Odoo V8Gestion Comptable et Financiere Odoo V8
Gestion Comptable et Financiere Odoo V8Africa Performances
 

Destaque (20)

خدمات الويب (Web Services) و كيف تنشئها
 خدمات الويب (Web Services) و كيف تنشئها  خدمات الويب (Web Services) و كيف تنشئها
خدمات الويب (Web Services) و كيف تنشئها
 
5 android web_service
5 android web_service5 android web_service
5 android web_service
 
مقدمة عن بايثون / جانقو
مقدمة عن بايثون / جانقومقدمة عن بايثون / جانقو
مقدمة عن بايثون / جانقو
 
بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
 بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة  بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
 
Openerp 8
Openerp 8Openerp 8
Openerp 8
 
[Android] Web services
[Android] Web services[Android] Web services
[Android] Web services
 
Odoo Module de Fabrication
Odoo Module de FabricationOdoo Module de Fabrication
Odoo Module de Fabrication
 
Webservice for android ppt
Webservice for android pptWebservice for android ppt
Webservice for android ppt
 
OpenERP/Odoo: Fiche Technique
OpenERP/Odoo: Fiche TechniqueOpenERP/Odoo: Fiche Technique
OpenERP/Odoo: Fiche Technique
 
Atelier1 mise en place d’odoo
Atelier1   mise en place d’odooAtelier1   mise en place d’odoo
Atelier1 mise en place d’odoo
 
Migration gmao de openerp 6.1 vers odoo 8
Migration gmao de openerp 6.1 vers odoo 8Migration gmao de openerp 6.1 vers odoo 8
Migration gmao de openerp 6.1 vers odoo 8
 
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
Android ppt
Android pptAndroid ppt
Android ppt
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)
 
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
 
Odoo gestion des stocks v8
Odoo gestion des stocks v8Odoo gestion des stocks v8
Odoo gestion des stocks v8
 
Odoo: Tableaux de bord et Reporting
Odoo: Tableaux de bord et ReportingOdoo: Tableaux de bord et Reporting
Odoo: Tableaux de bord et Reporting
 
Gestion Comptable et Financiere Odoo V8
Gestion Comptable et Financiere Odoo V8Gestion Comptable et Financiere Odoo V8
Gestion Comptable et Financiere Odoo V8
 

Semelhante a Preparing your web services for Android and your Android app for web services @Droidcon Bucharest 2012

20 tips for website performance
20 tips for website performance20 tips for website performance
20 tips for website performanceAndrew Siemer
 
Deploying Perl apps on dotCloud
Deploying Perl apps on dotCloudDeploying Perl apps on dotCloud
Deploying Perl apps on dotClouddaoswald
 
Design Web Service API by HungerStation
Design Web Service API by HungerStationDesign Web Service API by HungerStation
Design Web Service API by HungerStationArabNet ME
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXNGINX, Inc.
 
Introduction to amazon web services for developers
Introduction to amazon web services for developersIntroduction to amazon web services for developers
Introduction to amazon web services for developersCiklum Ukraine
 
Netflix oss season 1 episode 3
Netflix oss season 1 episode 3 Netflix oss season 1 episode 3
Netflix oss season 1 episode 3 Ruslan Meshenberg
 
MongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDB
MongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDBMongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDB
MongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDBMongoDB
 
Serverless Big Data Architecture on Google Cloud Platform at Credit OK
Serverless Big Data Architecture on Google Cloud Platform at Credit OKServerless Big Data Architecture on Google Cloud Platform at Credit OK
Serverless Big Data Architecture on Google Cloud Platform at Credit OKKriangkrai Chaonithi
 
Future of Serverless
Future of ServerlessFuture of Serverless
Future of ServerlessYoav Avrahami
 
Ten practical ways to improve front-end performance
Ten practical ways to improve front-end performanceTen practical ways to improve front-end performance
Ten practical ways to improve front-end performanceAndrew Rota
 
Write less (code) and build more with serverless
Write less (code) and build more with serverlessWrite less (code) and build more with serverless
Write less (code) and build more with serverlessDhaval Nagar
 
Combining ReST and Context for Killer iPhone Apps
Combining ReST and Context for Killer iPhone AppsCombining ReST and Context for Killer iPhone Apps
Combining ReST and Context for Killer iPhone Appsjasonc411
 
Advanced Web Technology.pptx
Advanced Web Technology.pptxAdvanced Web Technology.pptx
Advanced Web Technology.pptxssuser35fdf2
 
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Serdar Basegmez
 
kranonit S06E01 Игорь Цинько: High load
kranonit S06E01 Игорь Цинько: High loadkranonit S06E01 Игорь Цинько: High load
kranonit S06E01 Игорь Цинько: High loadKrivoy Rog IT Community
 
What's New in NGINX Plus R10?
What's New in NGINX Plus R10?What's New in NGINX Plus R10?
What's New in NGINX Plus R10?NGINX, Inc.
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developerslisab517
 
Decoupled (Headless) Drupal
Decoupled (Headless) DrupalDecoupled (Headless) Drupal
Decoupled (Headless) DrupalDaniel Stout
 

Semelhante a Preparing your web services for Android and your Android app for web services @Droidcon Bucharest 2012 (20)

20 tips for website performance
20 tips for website performance20 tips for website performance
20 tips for website performance
 
Deploying Perl apps on dotCloud
Deploying Perl apps on dotCloudDeploying Perl apps on dotCloud
Deploying Perl apps on dotCloud
 
Design Web Service API by HungerStation
Design Web Service API by HungerStationDesign Web Service API by HungerStation
Design Web Service API by HungerStation
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINX
 
Introduction to amazon web services for developers
Introduction to amazon web services for developersIntroduction to amazon web services for developers
Introduction to amazon web services for developers
 
Netflix oss season 1 episode 3
Netflix oss season 1 episode 3 Netflix oss season 1 episode 3
Netflix oss season 1 episode 3
 
MongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDB
MongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDBMongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDB
MongoDB Days Silicon Valley: Winning the Dreamforce Hackathon with MongoDB
 
Serverless Big Data Architecture on Google Cloud Platform at Credit OK
Serverless Big Data Architecture on Google Cloud Platform at Credit OKServerless Big Data Architecture on Google Cloud Platform at Credit OK
Serverless Big Data Architecture on Google Cloud Platform at Credit OK
 
Future of Serverless
Future of ServerlessFuture of Serverless
Future of Serverless
 
Ten practical ways to improve front-end performance
Ten practical ways to improve front-end performanceTen practical ways to improve front-end performance
Ten practical ways to improve front-end performance
 
Write less (code) and build more with serverless
Write less (code) and build more with serverlessWrite less (code) and build more with serverless
Write less (code) and build more with serverless
 
Combining ReST and Context for Killer iPhone Apps
Combining ReST and Context for Killer iPhone AppsCombining ReST and Context for Killer iPhone Apps
Combining ReST and Context for Killer iPhone Apps
 
Advanced Web Technology.pptx
Advanced Web Technology.pptxAdvanced Web Technology.pptx
Advanced Web Technology.pptx
 
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
 
kranonit S06E01 Игорь Цинько: High load
kranonit S06E01 Игорь Цинько: High loadkranonit S06E01 Игорь Цинько: High load
kranonit S06E01 Игорь Цинько: High load
 
What's New in NGINX Plus R10?
What's New in NGINX Plus R10?What's New in NGINX Plus R10?
What's New in NGINX Plus R10?
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
 
App Deployment on Cloud
App Deployment on CloudApp Deployment on Cloud
App Deployment on Cloud
 
Decoupled (Headless) Drupal
Decoupled (Headless) DrupalDecoupled (Headless) Drupal
Decoupled (Headless) Drupal
 
IoT-javascript-2019-fosdem
IoT-javascript-2019-fosdemIoT-javascript-2019-fosdem
IoT-javascript-2019-fosdem
 

Preparing your web services for Android and your Android app for web services @Droidcon Bucharest 2012

  • 1. PREPARING YOUR WEB SERVICES FOR ANDROID AND THE OTHER WAY AROUND SPEAKER: AURAS DUMANOVSCHI
  • 2. OVERVIEW ● Web services: play nice with others ● Response formats ● Optimization ● Tips ● Android: using the web data ● Increasing the speed of your app
  • 4. WEB SERVICES ?{ ● Offloads the data gathering, transformation and storage to a powerful server. ● Can do a lot of things in a very short time ● It’s connected to a large internet WHY pipe
  • 5. IS THERE A 2ND CHOICE?
  • 6. IS THERE A 2ND CHOICE? Yes!
  • 7. IS THERE A 2ND CHOICE? Yes! Where else can you get data from?
  • 8. IS THERE A 2ND CHOICE? Yes! Where else can you get data from? Web pages
  • 9. IS THERE A 2ND CHOICE? Yes! Where else can you get data from? Web pages That means parsing HTML client side.
  • 10. YEAH, SO? { ● It takes a lot of bandwidth to download BIG a few some web pages ● Mobile devices are usually connected to high latency networks: cell towers. Not even wi-fi is as reliable as fiber optic. PROBLEMS ● You may have to do this a lot of times just for all the data needed for a single screen
  • 11. OK… You can do all that on a web server in less than the time* for a request from a 3G Galaxy Nexus to reach the web server. *that’s if you don’t have the data stored in a DB and you have to fetch it from one or more sources.
  • 12. SO, WEB SERVICES… ● Just like Q & A
  • 13. SO, WEB SERVICES… ● Just like Q & A { Q: THE REQUEST
  • 14. SO, WEB SERVICES… ● Just like Q & A { Q: THE REQUEST A: THE RESPONSE
  • 15. SO, WEB SERVICES… ● Just like Q & A { Q: THE REQUEST A: THE RESPONSE ● Types: REST & SOAP;
  • 16. SOAP ● REQUEST: XML, specific format; ● RESPONSE: XML, specific format;
  • 17. REST ● REQUEST: HTTP or other*; ● RESPONSE: XML or JSON; any type of document you like; *HTTP is the norm. But you can also have XML or JSON requests.
  • 18. XML VS JSON ● XML: human readable and compatible with most platforms; ● JSON: compact and quick to parse;
  • 19. NO DATA ON YOUR SERVER? ● Scrape it; ● Cache it and/or store it; ● Serve the data later from the local cache;
  • 20. SIMPLE PLAN OF A PARSER ● Start point; ● Data gathering points; ● End point ; ● Regular expressions;
  • 23. STRUCTURING DATA ● Try and return only one type of object per API call ● For every object type use the same schema everywhere. ● In some cases you can return less data per object, but where you have more data return it in the same format
  • 24. STRUCTURING DATA ● If your objects have many-to-many relationships with other objects remove redundancies I.e : use person_id to identify a person and at the end of the response return all the unique persons in the current call
  • 25. STRUCTURING DATA Use pagination!
  • 26. BUT IF YOU CAN’T… ● Add an API call that tells you if the data has been changed (timestamp, hash, integer, etc) ● At least make sure you compress the response
  • 27. ANDROID SUPPORTS GZIP, DEFLATE // REQUEST HttpUriRequest request = new HttpGet(url); request.addHeader("Accept-Encoding", "gzip"); // ... httpClient.execute(request); // RESPONSE InputStream instream = response.getEntity().getContent(); Header contentEncoding = response.getFirstHeader("Content-Encoding"); if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) { instream = new GZIPInputStream(instream); }
  • 28. TIPS ● Build an API call that returns images in the request shape & size; ● Less bandwidth required, less memory used and less CPU time spent on rendering (no more stretching/shrinking, positioning and cropping);
  • 29. TIPS ● Never trust the client; ● Do your security and policy checks server side also; ● Secure every call with a signature: call parameters, private key, timestamp or unique call id per session ➔ hashed;
  • 30. ANDROID SIDE OF THINGS ● Parsing JSON: JSONObject or Jackson ● Objects vs Streaming
  • 31. ANDROID SIDE OF THINGS ● Generate objects from the data only if you need them right then; ● In some cases (loading screens) you may need to load a lot of data for later use; ● Throw lots of data straight to a SQLite DB using TRANSACTIONS
  • 32. WHY TRANSACTIONS? ● Not just a concept borrowed from traditional *SQL databases ● Uses less I/O. A whole lot less I/O. ● Like 100x faster than saving each data line by line
  • 34. SAVING ● To SQLite Databases: persistent objects with later use ● To static objects: volatile objects that will only be used just this session ● To parcelable objects: even more volatile objects ● To SharedPreferences: persistent key-value data or singleton objects
  • 35. CACHING ● Always cache to the filesystem the images you download from the web; ● That’s what the ~/cache dir is for; ● Limit your bitmap memory cache and make sure you also recycle the bitmaps when you clear them from the cache;
  • 36. PLAYING NICE WITH THE WEB SERVICE Detect unique install id: generate a GUID SharedPreferences prefs = context.getDefaultSharedPreferences(); String uniqueGUID = prefs.getString("install_guid", null); if (uniqueGUID == null) { ! uniqueGUID = UUID.randomUUID().toString() ! prefs.edit().putString("install_guid", uniqueGUID).commit(); }
  • 37. PLAYING NICE WITH THE WEB SERVICE Detect unique device id: use ANDROID_ID String deviceId = Settings.Secure.getString(contentResolver,Settings.Se cure.ANDROID_ID);
  • 38. PLAYING NICE WITH THE WEB SERVICE ● Send debugging and app identification data in HTTP header ● App Name/Version ● Device manufacturer/Model/ID Helps debugging issues remotely and Allows web admins to control access to their web service
  • 39. THANKS email: auras@wip.ro twitter: @auras This presentation is available at: http://wip.ro/droidcon/auras.pdf