Your SlideShare is downloading. ×
Demystifying REST
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Demystifying REST


Published on



Kirsten Jones
REST web services are everywhere! It seems like everything you want is available via a web service, but getting started with one of these web services can be overwhelming – and debugging the interactions bewilders some of the smartest developers I know. In this talk, I will talk about HTTP, how it works, and how to watch and understand the traffic between your system and the server. From there I’ll proceed to REST – how REST web services layer on top of HTTP and how you can expect a REST web service to behave. We’ll go over how to monitor and understand requests and responses for these services. Once we’ve covered that, I’ll talk about how OAuth is used for authentication in the framework of a REST application. PHP code samples will be shown for interacting with an OAuth REST web service, and I will cover http monitoring tools for multiple OS’s. When you’re done with this talk you’ll understand enough about REST web services to be able to get started confidently, and debug many of the common issues you may encounter.

Published in: Technology, Design

  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Kirsten Jones, Technical Leader, Cisco Systems
  • 2.  HTTP Overview REST Web Services OAuth Authentication
  • 3.  HyperText Transfer Protocol Used for conversations between web clients and servers Most of the internet uses HTTP Supports verbs for GET, PUT, POST, DELETE Query parameter framework
  • 4.  Client sends a request  Method  URL  Headers  (sometimes) parameters  (sometimes) body Server replies with a response  Content  Status  Headers
  • 5. HTTP response codes for dummies. 50x: we fucked up. 40x: you fucked up. 30x: ask that dude over there. 20x: cool.Props to @DanaDanger for that one
  • 6.  Chrome browser sends a request to Google  Method: GET  URL:  Headers: ▪ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ▪ Accept-Language: en-US,en;q=0.8 ▪ Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 ▪ Connection: keep-alive ▪ User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19 ▪ Accept-Encoding: gzip,deflate,sdch ▪ Cookie: NID=59=EudJ2a15ql8832PCysQA0qchtuvGWMoA7rkp79VpIYAQ8- j42IO17LFudCYNMXm9l6SHcu3YgrGRCdrRCyM468xPZaOek4Pi- AXQ8eARqU1SGYx6y7_9LW-c3HHb-vs2; PREF=ID=994f8de0e8b39a5b:U=237805f1f710dc73:FF=0:TM=1336752507:LM=13 36752509:S=W0Hha7x4czdXp51U ▪ Host:
  • 7.  Google sends a response  Headers: ▪ Content-Length: 24716 ▪ Content-Encoding: gzip ▪ Set-Cookie: NID=59=F48kbwfwOi-qCHJyrnMSUlDBVxK- ZVKZpq5B5jttt_25IRN4lS-0rQcVttq- dnOIlQzafw1i4HPQAO0RpZ7NuC0WCKWta7SYoekx0--YGf2zIFZ9VXIKS- _UEaOH9iBe; expires=Sat, 10-Nov-2012 21:26:46 GMT; path=/;; HttpOnly ▪ Expires: -1 ▪ Server: gws ▪ X-XSS-Protection: 1; mode=block ▪ Cache-Control: private, max-age=0 ▪ X-Frame-Options: SAMEORIGIN ▪ Content-Type: text/html; charset=UTF-8 ▪ Date: Fri, 11 May 2012 21:26:46 GMT  Content: A bunch of HTML  Status: 200
  • 8.  Macintosh: HTTPScoop Macintosh: Charles (supports SSL) Windows: Fiddler Unix (or Mac): Wireshark (X11)
  • 9. Request
  • 10. Headers
  • 11. Request/Response
  • 12.  Uses URL paths to define resources Create, Read, Update, Delete  POST, GET, PUT, DELETE Error Codes  HTTP Status Codes Request parameters  Query parameters Response types and configuration  Headers
  • 13.  Blog Info from Tumblr GET (read) Requires api_key sent as parameter
  • 14.  Headers
  • 15.  Request/Response
  • 16. Status: 200Content:{"meta": {"status":200, "msg":"OK” }, "response":{ "blog":{"title":"Untitled","posts":0, "name":"synedra", "url":"", "updated":0, "description":"","ask":false,"likes":0}}}
  • 17.  Monitor application use Know which users are making requests Prevent DDOS attacks on the system
  • 18.  Used by many APIs Each application gets a consumer key and secret Authentication server handles authentication Each user of an application gets a unique user token and secret Supports tracking of application/member use of the API Allows users to protect username/password Industry standard – libraries for most programming languages
  • 19.  REST web services call adds verification signature to each request Query parameters  Authorization header Secrets are used to create signature Authentication server checks signature to verify that it was created using shared secrets If authentication succeeds, request is processed by API server
  • 20.  Signature is generated based on  URL  Parameters  Consumer key  User token mj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D&oauth_nonce =6283929&oauth_timestamp=1336775605&oauth_consu mer_key=***KEY***&oauth_signature_method=HMAC- SHA1&oauth_version=1.0&oauth_token=***TOKEN*** &oauth_signature=CqHiZI6tI3pQGe5a0vVgoT0822A%3D
  • 21.  Request
  • 22.  Headers (nothing special)
  • 23.  Request/Response
  • 24.  Signature is generated based on  URL  Parameters  Consumer key  User token URL is unchanged: Authorization header has oauth stuff: OAuth realm="", oauth_body_hash="JtgCKBurLIPLM4dXkn2E3lgrfI4%3D", oauth_nonce="60723468", oauth_timestamp="1336776657", oauth_consumer_key=”***KEY***", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_token=”***TOKEN***", oauth_signature="8iWVpIK3LhRbu8JPf2gzC1YxQy4%3D"
  • 25.  No authorization parameters
  • 26.  Authorization is in the header
  • 27.  Request/response works the same
  • 28.  How to use PECL OAuth to sign API requests Quick walkthrough to understand process (but this talk is not about Oauth)
  • 29.  First step in OAuth: Get a request token for this authorization session OAuth library handles signing the request
  • 30.  Second step: Send the user to the server to authorize your application After the user authorizes your application, the server returns a verification code for you to use
  • 31.  Third step: Use the verifier and the request token to get an access token This is a long lived token
  • 32.  Make an API call using the OAuth library The library handles the signature generation
  • 33.  HTTP: Hypertext Transfer Protocol REST: REpresentational State Transfer OAuth: Authentication