SlideShare a Scribd company logo
1 of 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

More Related Content

Viewers also liked

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.
 

Viewers also liked (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
 

More from Maurice De Beijer [MVP]

More from 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
 

Recently uploaded

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
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
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
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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...
 
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...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

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