APIs for mobile


Published on

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

APIs for mobile

  1. 1. APIs/Services for Mobile Apps (in Ruby) Andrei Navarro
  2. 2. Background● Web development for Startups ○ Web Products (w/ APIs)● .NET, PHP, Ruby (Rails, Ramaze)● Currently: ○ Tech Guy at Scrambled Eggs ○ Faculty at Ateneo de Manila● PHRUG, Startup Weekend● Geekcamp
  3. 3. History● 80 - 90s: Computers for "Business" use● 90s - Early 00s: "dotcom" era; ecommerce ○ Web TV● Mid 00s: "Web 2.0"
  4. 4. History
  5. 5. Recent Years● Late 00s - 10s: Mobile Era ○ Faster mobile internet speed ○ Easier access to devices ○ Exponential growth in users ○ "App" Era● People becoming App developers instead of going into Web
  6. 6. Mobile Apps need Web● Web developers are still relevant ○ Need to provide data/interconnectedness to mobile apps ○ Moving from Application layer to Presentation/Session layer
  7. 7. Similarities with RIA● Javascript/AJAX makes requests to your backend -- which is connected to your database
  8. 8. AJAX architecture
  9. 9. Quick Story (Amundsen vs Scott)● The Antarctic Race ○ http://www.slideshare.net/apigee/amundsens-dogs- information-halos-and-apis● Apps are the "South Pole"● Native Wisdom: Your APIs support and strengthen your mobile apps (whether built by yourself or by a developer community)
  10. 10. Mobile App Data Architecture
  11. 11. Building APIs● Just like any other web app ○ no view layer (HTML/CSS/JS) ○ apps "view" your API● Transfer is via HTTP/HTTPS● Plan your format ○ JSON, XML, SOAP etc. ○ REST/RPC? ○ Parsing capability on client end● Scalability● Sessions and Authentication ○ token-based ○ header-based ○ devise
  12. 12. Design-by-Contract● Define your "interface" that will supply the mobile app with JSON/XML data ○ use mocks!● When building your API, conform to that interface● Allows parallelization of development
  13. 13. Testing● Web apps are tested on a browser● APIs ultimate test is on the target clients● Development usually happens in parallel -- and you need to validate your API works before app is completed ○ rest-client gem ○ rest-client chrome/firefox extensions
  14. 14. Building it with Rails● Rails already supports RESTful architecture● Rails already supports multiple formats● Can use RSpec/Test::Unit to validate API requests● Variety of existing gems already tested and well integrated with Rails
  15. 15. Issues with Rails● Issues for APIs (not in general)● Adds a lot of dependencies that arent needed for your purpose ○ Wasted memory● Cherry pick middleware and modules from the stack ○ hassle.● Others ○ http://engineering.gomiso.com/2011/05/16/if-youre- using-to_json-youre-doing-it-wrong/
  16. 16. Some solutions● RABL (Ruby API builder language) ○ https://github.com/nesquena/rabl● Rails-API ○ https://github.com/rails-api/rails-api ○ a subset of rails specifically for building APIs
  17. 17. Microframeworks● Much lighter than Rails ○ Sinatra/Padrino ○ Ramaze ○ Merb ○ Camping● Build only what you need ○ smaller footprint● Youll need to know Ruby well ○ thats actually a good thing
  18. 18. Grape Framework● https://github.com/intridea/grape● From Intridea, creators of OmniAuth● "An opinionated microframework for creating REST-like APIs in Ruby"GeneralizedRapidAPIErector
  19. 19. Grape Framework
  20. 20. Grape Framework● Rack-based ○ easy deployment over passenger ○ run via config.ru ○ can sit alongside your Rails app ■ mount My::API in config/routes.rb● Different content-types supported● Fun HTTP stuff (headers, verbs, status codes etc)● Entities: grouping/presenting your data into "Models"● Killer feature: API versioning
  21. 21. API VersioningTraditional Web Development
  22. 22. API Versioning● Support several versions of Mobile apps ○ up to client/user to update● App store problem ○ Dev ○ Staging ■ App store staging ○ Production ■ App store production
  23. 23. API Versioning
  24. 24. Recommendations● MVC-ize your application ○ Its just good design.● Use Devise/Omniauth for authentication ○ token-based authentication● Use oj gem for JSON ○ https://github.com/ohler55/oj ○ faster Json parser/encoder compared to native ruby JSON parsing● Use ox gem for XML
  25. 25. Questions? @dreinavarro