demystifying rest

34
Demystifying REST Kirsten Jones, Technical Leader, Cisco Systems

Upload: kirsten-hunter

Post on 08-May-2015

2.785 views

Category:

Technology


0 download

DESCRIPTION

DEMYSTIFYING REST 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.

TRANSCRIPT

Page 1: Demystifying REST

Demystifying RESTKirsten Jones, Technical Leader, Cisco Systems

Page 2: Demystifying REST

What Will I Cover?

HTTP Overview REST Web Services OAuth Authentication

Page 3: Demystifying REST

HTTP – Protocol for the Web

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

Page 4: Demystifying REST

How does HTTP Work?

Client sends a request Method URL Headers (sometimes) parameters (sometimes) body

Server replies with a response Content Status Headers

Page 5: Demystifying REST

What do you Mean, Status?

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

Page 6: Demystifying REST

An example request

Chrome browser sends a request to Google Method: GET URL: http://www.google.com 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=1336752509:S=W0Hha7x4czdXp51U

▪ Host: www.google.com

Page 7: Demystifying REST

Example Response

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=/; domain=.google.com; 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

Page 8: Demystifying REST

HTTP Sniffers - Macintosh Macintosh: HTTPScoop

http://tuffcode.com/

Macintosh: Charles (supports SSL) http://www.charlesproxy.com/

Windows: Fiddlerhttp://www.fiddler2.com/fiddler2/

Unix (or Mac): Wireshark (X11)http://www.wireshark.org/

Page 9: Demystifying REST

Example: HTTPScoop

Request

Page 10: Demystifying REST

Example: HTTPScoop

Headers

Page 11: Demystifying REST

Example: HTTPScoop

Request/Response

Page 12: Demystifying REST

REST APIs Leverage HTTP

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

Page 13: Demystifying REST

Example REST Request

Blog Info from Tumblr GET (read) http

://api.tumblr.com/v2/blog/synedra.tumbler.com/info

Requires api_key sent as parameter

Page 14: Demystifying REST

Example Request: Httpscoop

Page 15: Demystifying REST

Example Request: Httpscoop

Headers

Page 16: Demystifying REST

Example Request: Httpscoop

Request/Response

Page 17: Demystifying REST

Example REST Response

Status: 200Content:{"meta": {"status":200, "msg":"OK” }, "response":{ "blog":{"title":"Untitled","posts":0, "name":"synedra", "url":"http:\/\/synedra.tumblr.com\/", "updated":0, "description":"","ask":false,"likes":0}}}

Page 18: Demystifying REST

Why do we Need Authentication?

Monitor application use Know which users are making

requests Prevent DDOS attacks on the system

Page 19: Demystifying REST

OAuth Authentication

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

Page 20: Demystifying REST

How does OAuth Work?

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

Page 21: Demystifying REST

OAuth Example - Parameters Signature is generated based on

URL Parameters Consumer key User token

http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fsynedra?oauth_body_hash=2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D&oauth_nonce=6283929&oauth_timestamp=1336775605&oauth_consumer_key=***KEY***&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=***TOKEN***&oauth_signature=CqHiZI6tI3pQGe5a0vVgoT0822A%3D

Page 22: Demystifying REST

OAuth Example - Parameters

Request

Page 23: Demystifying REST

OAuth Example - Parameters

Headers (nothing special)

Page 24: Demystifying REST

OAuth Example - Parameters

Request/Response

Page 25: Demystifying REST

OAuth Example - Header

Signature is generated based on URL Parameters Consumer key User token

URL is unchanged: http://api.linkedin.com/v1/people/~/shares

Authorization header has oauth stuff:OAuth realm="http://api.linkedin.com", 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"

Page 26: Demystifying REST

OAuth Example - Header

No authorization parameters

Page 27: Demystifying REST

OAuth Example - Header

Authorization is in the header

Page 28: Demystifying REST

OAuth Example - Header

Request/response works the same

Page 29: Demystifying REST

Using OAuth with PHP

How to use PECL OAuth to sign API requests

http://pecl.php.net/package/oauth Quick walkthrough to understand

process(but this talk is not about Oauth)

Page 30: Demystifying REST

Get a request token

First step in OAuth: Get a request token for this authorization session

OAuth library handles signing the request

Page 31: Demystifying REST

Get a verifier

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

Page 32: Demystifying REST

Get the access token

Third step: Use the verifier and the request token to get an access token

This is a long lived token

Page 33: Demystifying REST

Make a call

Make an API call using the OAuth library

The library handles the signature generation

Page 34: Demystifying REST

Summary

HTTP: Hypertext Transfer Protocol REST: REpresentational State

Transfer OAuth: Authentication