ReST-ful Resource Management
Upcoming SlideShare
Loading in...5
×
 

ReST-ful Resource Management

on

  • 2,880 views

This presentation was given on 11/30/2009 at the North Idaho .NET User Group meeting in Sandpoint, Idaho by Joe Davis.

This presentation was given on 11/30/2009 at the North Idaho .NET User Group meeting in Sandpoint, Idaho by Joe Davis.

Statistics

Views

Total Views
2,880
Views on SlideShare
2,868
Embed Views
12

Actions

Likes
4
Downloads
31
Comments
0

2 Embeds 12

http://www.slideshare.net 9
http://www.linkedin.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

ReST-ful Resource Management ReST-ful Resource Management Presentation Transcript

  • ReST-ful .NET Data Services Presented By: Joe Davis http://stygma.com Twitter: @stygz Facebook: http://www.facebook.com/joe.davis
  • HTTP Request Structure
    • Method URI Protocol
    • Header1: Value1
    • Header2: Value2
    • <empty line>
    • Body
  • HTTP GET Request
    • GET http://www.sample.com/page.aspx?myname=Joe+Davis HTTP/1.1
    • Host: www.sample.com
    • User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
  • HTTP POST Request
    • POST http://www.sample.com/page.html HTTP/1.1
    • Host: www.sample.com
    • User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
    • myname=Joe+Davis
  • HTTP Response
    • HTTP/1.1 200 OK
    • Content-Type: text/html
    • Content-length: 95
    • <html>
    • <head>
    • <title>Sample HTML Document</title>
    • </head>
    • <body>
    • Hello, Nurse!
    • </body>
    • </html>
  • Quick Web Proxy Demo
    • WebScarab
  • Semantics Structure (HTML) Presentation (Style) Behavior (Script) Perform Action Supply Context Specify Resource
  • The Web IS ReST
    • URI = Uniform RESOURCE Identifier
    • The HTML document is a “Representation” of a resource in its current “State”
    • Resource representations can exist in any combination of any digital format (HTML, XML, JSON, RDF, RSS, ??)
  • Identify the Resource
    • <PROTOCOL>://<HOST><PATH>?<QUERYSTRING>
    • http://www.sample.com/default.html
    • http://www.sample.com/category/widgets.html
    • <link rel=“alternate” type=“application/atom+xml” href=“http://www.sample.com/category/widgets.atom” >
    • http://www.sample.com/product/Super-Widget.html
    • <link rel=“alternate” type=“application/json” href=“http://www.sample.com/product/Super-Widget.json” >
  • HTTP Methods Deletes resource DELETE Create or Update resource (returns current state after update) PUT Create resource (returns current state after creation—handy if server-generated resource ID is required) POST Retrieve resource HEADERS ONLY HEAD Retrieve resource headers and body GET
  • ReST GET Request/Response
    • GET http://www.mystore.com/product/Super-Widget.json HTTP/1.1
    • HOST: www.mystore.com
    HTTP/1.1 200 OK Content-Type: application/json Content-Length: 53 {“ProductID”:123,”Name”:”Super Widget”,”Price”:49.99}
  • ReST POST Request/Response
    • POST http://www.mystore.com/product/Ultra-Widget.json HTTP/1.1
    • HOST: www.mystore.com
    • Content-Type: application/json
    • Content-Length: 53
    • {”Name”:”Ultra Wigdet”,”Price”:59.99}
    HTTP/1.1 201 CREATED Content-Type: application/json Content-Length: 53 {“ProductID”:456,”Name”:”Ultra Wigdet”,”Price”:59.99}
  • ReST PUT Request/Response
    • PUT http://www.mystore.com/product/Ultra-Widget.json HTTP/1.1
    • HOST: www.mystore.com
    • Content-Type: application/json
    • Content-Length: 53
    • {“ProductID”:456,”Name”:”Ultra Widget”,”Price”:59.99}
    HTTP/1.1 202 ACCEPTED Content-Type: application/json Content-Length: 53 {“ProductID”:456,”Name”:”Ultra Widget”,”Price”:59.99}
  • HTTP Success Status Codes Partial Content 206 No Content 204 Accepted 202 Created 201 OK 200
  • HTTP Redirection Status Codes Found (Temporary Redirection) 302 Moved Permanently 301 Multiple Choices 300
  • HTTP Error Status Codes Request entity too large 413 Conflict 409 Request timeout 408 Method not allowed 405 Resource not found 404 Forbidden 403 Unsupported media type 415 Unauthorized 401 Bad Request 400
  • HTTP Server Error Status Codes HTTP version not supported 505 Service Unavailable 503 Not Implemented 501 Internal Server Error 500
  • Isn’t this SOAP?
    • No.
  • SOAP vs. ReST
    • GET http://my.sample.com/stock/MSFT.json HTTP/1.1
    • HOST: my.sample.com
    POST http://my.sample.com/stock HTTP/1.1 HOST: my.sample.com Content-Type: application/soap+xml Content-Length: 308 <?xml version=&quot;1.0&quot;?> <soap:Envelope xmlns:soap=“http://www.w3.org/2001/12/soap-envelope” soap:encodingStyle=&quot;http://www.w3.org/2001/12/soap-encoding&quot;> <soap:Body xmlns:m=&quot;http://my.sample.com/stock&quot;>   <m:GetStock>     <m:StockName>MSFT</m:StockName>   </m:GetStock> </soap:Body> </soap:Envelope>
  • So what’s RDF?
    • Resource Description Framework
    • Doesn’t require fore-knowledge of type
    • Applies common ontology
    • High discoverability
    • Great framework. Terrible metaphor.
      • Subject/Predicate/Object ??
      • Entity/Attribute/Value !!
    • .NET 4.0 supports tuples and dynamic types
  • Sample RDF Request/Response
    • GET http://my.sample.com/product#Super-Widget HTTP/1.1
    • HOST: my.sample.com
    HTTP/1.1 200 OK Content-Type: text/rdf Content-Length: 389 <?xml version=&quot;1.0&quot;?> <rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot; xmlns:product=&quot;http://my.sample.com/product#&quot;> <product:Widget rdf:about=&quot;http://my.sample.com/product#Super-Widget&quot;> <product:ProductID>123</product:ProductID> <product:Name>Super Widget</product:Name> <product:Price>49.99</product:Price> </product:Widget > </rdf:RDF>
  • More Info….
    • “ How I Explained ReST to my Wife” – Ryan Tomayko ( http:// tomayko.com /writings/rest-to-my-wife )
    • ReSTful .NET: Build and Consume ReSTful Web Services with .NET 3.5 - Jon Flanders ( http://www.amazon.com/RESTful-NET-Build-Consume-Services/dp/0596519206/ref=sr_1_1?ie=UTF8&s= books&qid =1259709396&sr=8-1 )
    • PluralSight Screencast – Aaron Skonnard ( http://channel9.msdn.com/shows/Endpoint/endpointtv-Screencast-Consuming-REST-services-with-HttpClient/ )
    • WebScarab Web Proxy Tool ( http:// www.owasp.org/index.php/Category:OWASP_WebScarab_Project )
    • Fiddler Web Proxy Tool ( http://fiddler2.com/fiddler2/ )
    • WCF ReST Starter Kit ( http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId =24644 )