22
With JavaScript RESTful API Automation Jonathan LeBlanc Head of Developer Evangelism (North America) Github: http://github.com/jcleblanc Slides: http://slideshare.net/jcleblanc Twitter: @jcleblanc

RESTful API Automation with JavaScript

Embed Size (px)

DESCRIPTION

Pragmatic RESTful API principles, along with a solid consumption architecture, can allow for a great amount of automation in your program development. At the same time, securing the application can be extremely tricky from JavaScript. In this session we will explore several principles behind RESTful API design and consumption using JavaScript, many of the standards that were integrated in the redevelopment of the PayPal API architecture in the new RESTful APIs. We will cover many of these architecture standards, including: * Building in action automation using HATEOAS * OAuth 2 in the JavaScript model * The challenges behind secure resource consumption through JavaScript

Citation preview

Page 1: RESTful API Automation with JavaScript

With JavaScript

RESTful API Automation

Jonathan LeBlancHead of Developer Evangelism (North

America)Github: http://github.com/jcleblanc

Slides: http://slideshare.net/jcleblancTwitter: @jcleblanc

Page 2: RESTful API Automation with JavaScript

What We’re Covering

REST Concepts

Automation through hypermedia constraints

OAuth 2 in JavaScript

Page 3: RESTful API Automation with JavaScript

What We Want

Page 4: RESTful API Automation with JavaScript

JavaScript Challenges

Page 5: RESTful API Automation with JavaScript

Cross Origin Resource Sharing

Access to other domains / subdomains is restricted (same origin policy)

JSONP to request resources across domains

Cross-origin resource sharing (CORS)You Send: Origin: http://site.com

They Send: Access-Control-Allow-Origin: http://site.com

Page 6: RESTful API Automation with JavaScript

Keeping Things Hidden

Token based auth mechanismOAuth: Client Secret

Basic Auth: Password

API request action to reaction mapping

A schematic for how data forces site changes

Page 7: RESTful API Automation with JavaScript

Action Automation

Page 8: RESTful API Automation with JavaScript

RESTful API Core Concepts

Honor HTTP request verbs

Use proper HTTP status codes

No version numbering in URIs

Return format via HTTP Accept header

Double Rainbow: Discovery via HATEOAS

Page 9: RESTful API Automation with JavaScript

Uniform Interface Sub-Constraints

Resource Identification

Resources must be manipulated via representations

Self descriptive messages

Hypermedia as the engine of application state

Page 10: RESTful API Automation with JavaScript

How we Normally Consume APIs

Page 11: RESTful API Automation with JavaScript

Using HATEOAS to Automate

Page 12: RESTful API Automation with JavaScript

"links": [ { "href":"https://api.sandbox.paypal.com/v1/payments/ authorization/6H149011U8307001M", "rel":"self", "method":"GET" },{ "href":"https://api.sandbox.paypal.com/v1/payments/ authorization/6H149011U8307001M/capture", "rel":"capture", "method":"POST" },{ "href":"https://api.sandbox.paypal.com/v1/payments/ authorization/6H149011U8307001M/void", "rel":"void", "method":"POST" }]

Page 13: RESTful API Automation with JavaScript

OAuth 2 & JavaScript?

Page 14: RESTful API Automation with JavaScript

A Little Use Background

User login

Application only

User Involvement

Page 15: RESTful API Automation with JavaScript

User Agent Flow: Redirect

Prepare the Redirect URIAuthorization Endpointclient_id response_type (token)scope redirect_uri

Browser RedirectRedirect URI

Page 16: RESTful API Automation with JavaScript

User Agent Flow: Redirect

Building the redirect link

var auth_uri = auth_endpoint + "?response_type=token" + "&client_id=" + client_id + "&scope=profile" + "&redirect_uri=" + window.location; $("#auth_btn").attr("href", auth_uri);

Page 17: RESTful API Automation with JavaScript

User Agent Flow: Hash Mod

Fetch the Hash Modaccess_tokenrefresh_tokenexpires_in

Extract Access Token

Page 18: RESTful API Automation with JavaScript

User Agent Flow: Hash Mod

http://site.com/callback#access_token=rBEGu1FQr54AzqE3Q&refresh_token=rEBt51FZr54HayqE3V4a&expires_in=3600

var hash = document.location.hash;var match = hash.match(/access_token=(\w+)/);

Extracting the access token from the hash

Page 19: RESTful API Automation with JavaScript

User Agent Flow: Get Resources

Set Request Headers + URIResource EndpointHeader: token type + access tokenHeader: accept data type

HTTPS Request

Page 20: RESTful API Automation with JavaScript

User Agent Flow: Get Resources

$.ajax({ url: resource_uri, beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'OAuth ' + token); xhr.setRequestHeader('Accept', 'application/json'); }, success: function (response) { //use response object }});

Making an authorized request

Page 21: RESTful API Automation with JavaScript

Good JavaScript API Interaction

Using Proper REST standards

Automation through hypermedia constraints

Using OAuth 2 appropriately

Page 22: RESTful API Automation with JavaScript

http://bit.ly/rest_automation_js

Thank You! Questions?

Jonathan LeBlancHead of Developer Evangelism (North

America)Github: http://github.com/jcleblanc

Slides: http://slideshare.net/jcleblancTwitter: @jcleblanc