apis for mobile

25
APIs/Services for Mobile Apps (in Ruby) Andrei Navarro

Upload: andrei-navarro

Post on 13-Jan-2015

639 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: APIs for mobile

APIs/Services forMobile Apps

(in Ruby)

Andrei Navarro

Page 2: APIs for mobile

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

Page 3: APIs for mobile

History

● 80 - 90s: Computers for "Business" use● 90s - Early 00s: "dotcom" era; ecommerce

○ Web TV● Mid 00s: "Web 2.0"

Page 4: APIs for mobile

History

Page 5: APIs for mobile

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

Page 6: APIs for mobile

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

Page 7: APIs for mobile

Similarities with RIA

● Javascript/AJAX makes requests to your backend -- which is connected to your database

Page 8: APIs for mobile

AJAX architecture

Page 9: APIs for mobile

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)

Page 10: APIs for mobile

Mobile App Data Architecture

Page 11: APIs for mobile

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

Page 12: APIs for mobile

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

Page 13: APIs for mobile

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

Page 14: APIs for mobile

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

Page 15: APIs for mobile

Issues with Rails

● Issues for APIs (not in general)● Adds a lot of dependencies that aren't

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/

Page 16: APIs for mobile

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

Page 17: APIs for mobile

Microframeworks

● Much lighter than Rails○ Sinatra/Padrino○ Ramaze○ Merb○ Camping

● Build only what you need○ smaller footprint

● You'll need to know Ruby well○ that's actually a good thing

Page 18: APIs for mobile

Grape Framework

● https://github.com/intridea/grape● From Intridea, creators of OmniAuth● "An opinionated microframework for creating

REST-like APIs in Ruby"

GeneralizedRapidAPIErector

Page 19: APIs for mobile

Grape Framework

Page 20: APIs for mobile

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

Page 21: APIs for mobile

API Versioning

Traditional Web Development

Page 22: APIs for mobile

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

Page 23: APIs for mobile

API Versioning

Page 24: APIs for mobile

Recommendations

● MVC-ize your application○ It's 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

Page 25: APIs for mobile

Questions?@dreinavarro