SlideShare ist ein Scribd-Unternehmen logo
1 von 15
HTML 5 and REST services
Building Rich HTML & JavaScript Clients
using REST services

Maurice de Beijer
Objectives

• Why build HTML client applications
• What did we cover in part 1?
    – What are REST services
    – The WCF Web API framework
•   Using a rich .NET client
•   Requesting resources in the proper format
•   Loading data from the service
•   Caching
•   JavaScript Templates
•   HTTP Methods
•   Authentication
Why build HTML client applications

• People are using multiple different devices
   – Desktop computers
   – Tablets
   – Smart phones
• Companies are changing
   – Bring your own device is the new mantra
• Different manufacturers use different technologies
   – But HTML is supported by all of them
What are REST services

• Representational State Transfer
  • Roy Thomas Fielding
• All about resources
   – CRUD style actions
• Embraces HTTP
   –   URLS
   –   MIME Media Types
   –   HTTP Methods
   –   Caching
   –   Security
• Enables very scalable services
   – Build around the technology that powers the Internet
The WCF Web API framework

• On CodePlex
   – http://wcf.codeplex.com/wikipage?title=WCF%20HTTP
• Use NuGet from within Visual Studio 2010
   – http://nuget.org/
• Current version 0.5
• Much better than the original WCF support for REST
   – But doesn’t replace it
Using a rich .NET client is easy

• Use the HttpClient
   – Part of the WCF Web API framework
• Or use any other standard HTTP client
   – The WebClient
   – The HttpWebRequest
• Other environments have similar types
   –   HttpURLConnection in Java
   –   NSURLConnection in Objective C
   –   fopen in PHP
   –   urllib in Python
   –   ...
Requesting resources in the proper format

• HTTP/REST use the Accept header to specify the mime
  type
• We can return the book resource as an image
   – Done with a custom MediaTypeFormatter
• Some browsers prefer PNG in an <img> tag
   – But will accept any image
   – Use the AddMediaRangeMapping() extension method.
• Some browser will accept anything in an <img> tag
   – Use the query string to specify the type.
   – Use the AddQueryStringMapping() extension method.
Loading data from the service

• JSON is the data format of choice
   – JavaScript Object Notation
• Use the XMLHTTPRequest object
   – jQuery makes this very easy
• jQuery.getJSON()
   – Load JSON data using an asynchronous HTTP GET request
• jQuery.ajax()
   – Perform an asynchronous HTTP (Ajax) request
   – Uses an options object that configure the Ajax request
Caching

• Caching can make a service much more scalable
   – REST services can use the standard HTTP caching infrastructure
• Some browsers cache results by default
   – Use $.ajax() with {cache: false}
   – Even better is to control caching.
      • set the response.Headers.CacheControl
JavaScript Templates

• Creating HTML elements in JavaScript can be tedious
• Templates can make a rich UI much easier
• JavaScript Micro-Templating
   – By John Resig, the inventor of jQuery
• Underscore library template
   – _.template()
• jQuery UI is working on a jQuery standard plugin
HTTP Methods

• GET and POST are no problem
• PUT and DELETE are not supported in most browsers
   – When used as a <form> method
   – Not part of the HTML specifications
   – Works fine with $.ajax() with type: ‘put’
• Sometimes firewalls also block PUT and DELETE
   – Use HTTP Method tunneling
   – Pus the method in the X-HTTP-Method-Override HTTP header
   – Use the HttpMethodTunnelChannel from WCF Web API Contrib
Authentication

• Lots of different options
   – OAuth
   – Basic authentication
   – Intergrated autentication
• Return a 401 – Unauthorized
   – When a client needs to provide credentials
• The FormsAuthenticationModule intercepts the 401
   – The browser receives a 307 - Redirect to the login page
   – See: Prevent Forms Authentication Login Page Redirect When You
     Don’t Want It by Phil Haack
Useful resources 1

• jQuery
  http://jquery.com/
• jQuery UI
  http://jqueryui.com/
• JavaScript Micro-Templating
  http://ejohn.org/blog/javascript-micro-templating/
• Underscore.js
  http://documentcloud.github.com/underscore/
• Modernizr
  http://www.modernizr.com/
Useful resources 2

• Essential Windows Communication Foundation 4 Training
   – http://www.develop.com/training-course/windows-
     communication-foundation-wcf
• Hypertext Transfer Protocol -- HTTP/1.1
   – http://tools.ietf.org/html/rfc2616
• The Atom Syndication Format
   – http://tools.ietf.org/html/rfc4287
• The Atom Publishing Protocol
   – http://tools.ietf.org/html/rfc5023
• Open Data Protocol (OData)
   – http://www.odata.org
• WCF Web API Contrib
   – http://webapicontrib.codeplex.com
• Fiddler
   – http://www.fiddler2.com
Summary

• HTML/JavaScript clients are important
   – You can no longer depend on Windows as the client
• The browsers isn’t as smart as you would expect
   – Accepts anything as the source in an image element
   – Form elements only support GET and POST
   – Caching of requests depends on the browsers
• Sometimes ASP.NET isn’t as smart as we would like
   – Changes a 401 – Unauthorized to a 307 – Redirect
• jQuery and jQuery UI are extremely useful
   – Don’t forget about Underscore.js and Modernizr

Weitere ähnliche Inhalte

Andere mochten auch

Using JIRA & Greenhopper for Agile Development
Using JIRA & Greenhopper for Agile DevelopmentUsing JIRA & Greenhopper for Agile Development
Using JIRA & Greenhopper for Agile Development
Jeff Leyser
 
JIRA-An intro
JIRA-An introJIRA-An intro
JIRA-An intro
Asha G.K.
 

Andere mochten auch (18)

20160307 apex connects_jira
20160307 apex connects_jira20160307 apex connects_jira
20160307 apex connects_jira
 
Jira
JiraJira
Jira
 
UC SDN
UC SDNUC SDN
UC SDN
 
Managing Product Growth Experiments With JIRA and Confluence - Zane Salim
Managing Product Growth Experiments With JIRA and Confluence - Zane SalimManaging Product Growth Experiments With JIRA and Confluence - Zane Salim
Managing Product Growth Experiments With JIRA and Confluence - Zane Salim
 
APEX connects Jira
APEX connects JiraAPEX connects Jira
APEX connects Jira
 
UC Browser
UC BrowserUC Browser
UC Browser
 
JIRA Performance After 300,000 Issues
JIRA Performance After 300,000 IssuesJIRA Performance After 300,000 Issues
JIRA Performance After 300,000 Issues
 
Jira plugin dev introduction 14012014 a
Jira plugin dev introduction 14012014 aJira plugin dev introduction 14012014 a
Jira plugin dev introduction 14012014 a
 
The Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIThe Full Power of ASP.NET Web API
The Full Power of ASP.NET Web API
 
Web 2.0 Mashups
Web 2.0 MashupsWeb 2.0 Mashups
Web 2.0 Mashups
 
Jira Agile
Jira AgileJira Agile
Jira Agile
 
Agile Overview Session
Agile Overview SessionAgile Overview Session
Agile Overview Session
 
Using JIRA & Greenhopper for Agile Development
Using JIRA & Greenhopper for Agile DevelopmentUsing JIRA & Greenhopper for Agile Development
Using JIRA & Greenhopper for Agile Development
 
Rest API Security
Rest API SecurityRest API Security
Rest API Security
 
6 Reasons Why APIs Are Reshaping Your Business
6 Reasons Why APIs Are Reshaping Your Business6 Reasons Why APIs Are Reshaping Your Business
6 Reasons Why APIs Are Reshaping Your Business
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Ingesting Drone Data into Big Data Platforms
Ingesting Drone Data into Big Data Platforms Ingesting Drone Data into Big Data Platforms
Ingesting Drone Data into Big Data Platforms
 
JIRA-An intro
JIRA-An introJIRA-An intro
JIRA-An intro
 

Mehr von Maurice De Beijer [MVP]

Mehr von Maurice De Beijer [MVP] (20)

Practice TypeScript Techniques Building React Server Components App
Practice TypeScript Techniques Building React Server Components AppPractice TypeScript Techniques Building React Server Components App
Practice TypeScript Techniques Building React Server Components App
 
A foolproof Way to Estimate a Software Project
A foolproof Way to Estimate a Software ProjectA foolproof Way to Estimate a Software Project
A foolproof Way to Estimate a Software Project
 
Surati Tech Talks 2022 / Build reliable Svelte applications using Cypress
Surati Tech Talks 2022 / Build reliable Svelte applications using CypressSurati Tech Talks 2022 / Build reliable Svelte applications using Cypress
Surati Tech Talks 2022 / Build reliable Svelte applications using Cypress
 
Build reliable Svelte applications using Cypress
Build reliable Svelte applications using CypressBuild reliable Svelte applications using Cypress
Build reliable Svelte applications using Cypress
 
Building Reliable Applications Using React, .NET & Azure
Building Reliable Applications Using React, .NET & AzureBuilding Reliable Applications Using React, .NET & Azure
Building Reliable Applications Using React, .NET & Azure
 
Concurrent Rendering Adventures in React 18
Concurrent Rendering Adventures in React 18Concurrent Rendering Adventures in React 18
Concurrent Rendering Adventures in React 18
 
Building reliable applications with React, C#, and Azure
Building reliable applications with React, C#, and AzureBuilding reliable applications with React, C#, and Azure
Building reliable applications with React, C#, and Azure
 
Building large and scalable mission critical applications with React
Building large and scalable mission critical applications with ReactBuilding large and scalable mission critical applications with React
Building large and scalable mission critical applications with React
 
Building Reliable Applications Using React, .NET & Azure
Building Reliable Applications Using React, .NET & AzureBuilding Reliable Applications Using React, .NET & Azure
Building Reliable Applications Using React, .NET & Azure
 
Why I am hooked on the future of React
Why I am hooked on the future of ReactWhy I am hooked on the future of React
Why I am hooked on the future of React
 
Building reliable web applications using Cypress
Building reliable web applications using CypressBuilding reliable web applications using Cypress
Building reliable web applications using Cypress
 
Getting started with React Suspense and concurrent rendering
Getting started with React Suspense and concurrent renderingGetting started with React Suspense and concurrent rendering
Getting started with React Suspense and concurrent rendering
 
React suspense, not just for Alfred Hitchcock
React suspense, not just for Alfred HitchcockReact suspense, not just for Alfred Hitchcock
React suspense, not just for Alfred Hitchcock
 
From zero to hero with the Reactive extensions for JavaScript
From zero to hero with the Reactive extensions for JavaScriptFrom zero to hero with the Reactive extensions for JavaScript
From zero to hero with the Reactive extensions for JavaScript
 
Why I am hooked on the future of React
Why I am hooked on the future of ReactWhy I am hooked on the future of React
Why I am hooked on the future of React
 
The new React
The new React The new React
The new React
 
From zero to hero with the reactive extensions for JavaScript
From zero to hero with the reactive extensions for JavaScriptFrom zero to hero with the reactive extensions for JavaScript
From zero to hero with the reactive extensions for JavaScript
 
Why I am hooked on the future of React
Why I am hooked on the future of ReactWhy I am hooked on the future of React
Why I am hooked on the future of React
 
I am hooked on React
I am hooked on ReactI am hooked on React
I am hooked on React
 
Create flexible React applications using GraphQL apis
Create flexible React applications using GraphQL apisCreate flexible React applications using GraphQL apis
Create flexible React applications using GraphQL apis
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 

Building rich HTML 5 clients using REST services

  • 1. HTML 5 and REST services Building Rich HTML & JavaScript Clients using REST services Maurice de Beijer
  • 2. Objectives • Why build HTML client applications • What did we cover in part 1? – What are REST services – The WCF Web API framework • Using a rich .NET client • Requesting resources in the proper format • Loading data from the service • Caching • JavaScript Templates • HTTP Methods • Authentication
  • 3. Why build HTML client applications • People are using multiple different devices – Desktop computers – Tablets – Smart phones • Companies are changing – Bring your own device is the new mantra • Different manufacturers use different technologies – But HTML is supported by all of them
  • 4. What are REST services • Representational State Transfer • Roy Thomas Fielding • All about resources – CRUD style actions • Embraces HTTP – URLS – MIME Media Types – HTTP Methods – Caching – Security • Enables very scalable services – Build around the technology that powers the Internet
  • 5. The WCF Web API framework • On CodePlex – http://wcf.codeplex.com/wikipage?title=WCF%20HTTP • Use NuGet from within Visual Studio 2010 – http://nuget.org/ • Current version 0.5 • Much better than the original WCF support for REST – But doesn’t replace it
  • 6. Using a rich .NET client is easy • Use the HttpClient – Part of the WCF Web API framework • Or use any other standard HTTP client – The WebClient – The HttpWebRequest • Other environments have similar types – HttpURLConnection in Java – NSURLConnection in Objective C – fopen in PHP – urllib in Python – ...
  • 7. Requesting resources in the proper format • HTTP/REST use the Accept header to specify the mime type • We can return the book resource as an image – Done with a custom MediaTypeFormatter • Some browsers prefer PNG in an <img> tag – But will accept any image – Use the AddMediaRangeMapping() extension method. • Some browser will accept anything in an <img> tag – Use the query string to specify the type. – Use the AddQueryStringMapping() extension method.
  • 8. Loading data from the service • JSON is the data format of choice – JavaScript Object Notation • Use the XMLHTTPRequest object – jQuery makes this very easy • jQuery.getJSON() – Load JSON data using an asynchronous HTTP GET request • jQuery.ajax() – Perform an asynchronous HTTP (Ajax) request – Uses an options object that configure the Ajax request
  • 9. Caching • Caching can make a service much more scalable – REST services can use the standard HTTP caching infrastructure • Some browsers cache results by default – Use $.ajax() with {cache: false} – Even better is to control caching. • set the response.Headers.CacheControl
  • 10. JavaScript Templates • Creating HTML elements in JavaScript can be tedious • Templates can make a rich UI much easier • JavaScript Micro-Templating – By John Resig, the inventor of jQuery • Underscore library template – _.template() • jQuery UI is working on a jQuery standard plugin
  • 11. HTTP Methods • GET and POST are no problem • PUT and DELETE are not supported in most browsers – When used as a <form> method – Not part of the HTML specifications – Works fine with $.ajax() with type: ‘put’ • Sometimes firewalls also block PUT and DELETE – Use HTTP Method tunneling – Pus the method in the X-HTTP-Method-Override HTTP header – Use the HttpMethodTunnelChannel from WCF Web API Contrib
  • 12. Authentication • Lots of different options – OAuth – Basic authentication – Intergrated autentication • Return a 401 – Unauthorized – When a client needs to provide credentials • The FormsAuthenticationModule intercepts the 401 – The browser receives a 307 - Redirect to the login page – See: Prevent Forms Authentication Login Page Redirect When You Don’t Want It by Phil Haack
  • 13. Useful resources 1 • jQuery http://jquery.com/ • jQuery UI http://jqueryui.com/ • JavaScript Micro-Templating http://ejohn.org/blog/javascript-micro-templating/ • Underscore.js http://documentcloud.github.com/underscore/ • Modernizr http://www.modernizr.com/
  • 14. Useful resources 2 • Essential Windows Communication Foundation 4 Training – http://www.develop.com/training-course/windows- communication-foundation-wcf • Hypertext Transfer Protocol -- HTTP/1.1 – http://tools.ietf.org/html/rfc2616 • The Atom Syndication Format – http://tools.ietf.org/html/rfc4287 • The Atom Publishing Protocol – http://tools.ietf.org/html/rfc5023 • Open Data Protocol (OData) – http://www.odata.org • WCF Web API Contrib – http://webapicontrib.codeplex.com • Fiddler – http://www.fiddler2.com
  • 15. Summary • HTML/JavaScript clients are important – You can no longer depend on Windows as the client • The browsers isn’t as smart as you would expect – Accepts anything as the source in an image element – Form elements only support GET and POST – Caching of requests depends on the browsers • Sometimes ASP.NET isn’t as smart as we would like – Changes a 401 – Unauthorized to a 307 – Redirect • jQuery and jQuery UI are extremely useful – Don’t forget about Underscore.js and Modernizr