Download presentation
Presentation is loading. Please wait.
Published byJalyn Wick Modified over 10 years ago
1
REST &.NET James Crisp.NET Practice Lead ThoughtWorks Australia
2
James Crisp
4
The Web
5
*-ilities
6
Scalability
7
Recoverability & Reliability
8
Security
9
Discoverability
11
How to bring to Web services?
12
Tunneling RPC URLs POX SOAP & WS-*
13
REpresentational State Transfer
15
REST contributes... the rationale behind the modern Web's software architecture... -- Roy Fielding
16
Resources e.g. Person, Car, Post
17
Representations Bill Gates m
19
Addressability http://mysite.com/people/joe_citizen http://mysite.com/people/joe_citizen/friends
20
Uniform Interface
21
GET POST HEAD PUT DELETE OPTIONS Support
22
GET GET /people/joe_citizen HTTP/1.1 Host: mysite.com Accept: application/xml
23
Response 200 OK Content-Type: application/xml Last-Modified: 2008-1-1 15:00.. Joe Citizen 42 m
24
HEAD HEAD /people/joe_citizen HTTP/1.1 Host: mysite.com 200 OK Content-Type: application/xml Last-Modified: 2008-1-1 15:00.. ETag: a32daf15-b33da2a4d Response
25
POST POST /people HTTP/1.1 Content-Type: text/xml Host: mysite.com.... Tina Jones 25 F
26
Response 201 CREATED Location: /people/tina_jones (optionally with body)
27
PUT PUT /people/tina_jones HTTP/1.1 Content-Type: text/xml Host: mysite.com.... Tina Jones 24 F
28
Response 200 OK Location: /people/tina_jones (optionally with body)
29
DELETE DELETE /people/joe_citizen HTTP/1.1 Host: mysite.com 200 OK Content-Type: application/xml joe_citizen Response
30
OPTIONS OPTIONS /people HTTP/1.1 Host: mysite.com 200 OK Allowed: GET,HEAD,POST Response
31
Status Codes
32
2xx = All good 200 – OK 201 – Created
33
3xx = Redirect 301 – Moved permanently 307 – Temporary redirect 304 – Not modified (ie, see cache)
34
4xx = Client error 400 – Bad request 401 – Unauthorized 403 – Forbidden 405 – Method not allowed 409 – Conflict
35
5xx = Server error 500 – Internal server error
36
Headers
37
Content-Type: text/html application/xml image/jpeg....
38
WWW-Authenticate: Authorization:
39
Last-Modified: If-Modified-Since: ETag: If-None-Match:
40
Location:
41
Describe your services?
42
URI Templates http://s3.amazon.com/{bucket-name}/{object-name} http://mysite.com/users/{user-name}/photos http://google.com/search?q={search-query}
43
Start URL + Links https://bank.com/accounts/345095 Tina Jones <link rel="history" href="/tjones/account_history"> <link rel="close" verb="delete" href="/tjones">
44
Microformats Tina Jones <link rel="transaction-search" href="account_history? from={date-from}& to={date-to}">
45
State Management http://google.com Search google.com/ search?q=rest google.com/search?q=rest& start=10 Next Page Searching Searched More Results
46
Data Format?
47
XHTML Accounts <a rel="account_details" href="/tjones">Tina Jones.....
48
JSON { "account_name": "Tina Jones", "links": {"history": "/tjones/history"} }
50
Framework
51
Ordering Pizza
52
http://epizza.com GET / HTTP/1.1 Host: epizza.com Content-Type: application/xml
53
Response 200 OK Location: http://epizza.com Content-Type: application/xml Content-Length:... Welcome! <link rel="place-order" href="/orders" />
54
Let's see the menu! GET /menu HTTP/1.1 Host: epizza.com Content-Type: application/xml
55
200 OK Location:......... <link rel="place-order" href="/orders" /> Menu Response
56
Ordering time! POST /orders HTTP/1.1 Host: epizza.com Content-Type: application/xml Content-Length:...
57
201 Created Location: http://epizza.com/orders/413 Content-Type:... <link rel="destination" href="/orders/413/address"> Place Order Response
58
Beer with that?
59
OPTIONS /orders/413 HTTP/1.1 Host: epizza.com 200 OK Allowed: GET, HEAD, POST, PUT
60
Add Beer POST /orders/413 HTTP/1.1 Host: epizza.com Content-Type: application/xml Content-Length:...
61
200 OK Location: http://epizza.com/orders/413 Content-Type:... <link rel="destination" href="/orders/413/destination"> Response
62
Destination Address PUT /orders/413/address HTTP/1.1 Host: epizza.com Content-Type: application/xml Content-Length:... 35 Rue Rd Potts Point
63
Destination Response 200 OK Host: epizza.com Content-Type: application/xml Content-Length:... 35 Rue Rd Potts Point
64
200 OK Location: http://epizza.com/orders/413 Content-Type:... GET /orders/413
66
Can we? OPTIONS /orders/413 HTTP/1.1 Host: epizza.com 200 OK Allowed: GET, HEAD
67
Too late!
69
Back at the ePizza Kitchen..
70
GET /orders
71
Implementation
72
Client var request = (HttpWebRequest) WebRequest.Create(URL); request.Method request.ContentType request.GetRequestStream() var response = (HttpWebResponse)request.GetResponse(); response.StatusCode response.Headers response.GetResponseStream()
74
Server
75
IHttpHandler public class RestHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/xml"; if (context.Request.HttpMethod == "GET") { context.Response.Write("... "); }
76
WCF REST [ServiceContract] public interface IPizzaService { [WebGet(UriTemplate="/orders/{orderId}")] [OperationContract] Order GetOrder(int orderId); }
77
Status codes? Headers? Links? Microformats?
78
ASP.NET MVC
79
Routing Table Controller Method ModelView
80
Routes In GlobalApplication : HttpApplication void RegisterRoutes(RouteCollection routes) { routes.MapRoute( "AddToOrder", "orders/{id}", new { controller = "Orders", action = "AddToOrder" }, new { httpMethod = new HttpMethodConstraint("POST")});... }
81
Controller public class OrdersController : Controller { public ActionResult AddToOrder(int id) { var order = Order.Load(id); var itemToAdd = CreateMenuItemFromRequest(); order.Items.Add(itemToAdd); order.Save(); // response.StatusCode = 200; return View(order); }
82
Model public class Order { public MenuItem[] Items { get {... }; } public Address DeliveryAddress { get; set; } }
83
View " /> <link rel="destination" href=...
84
MVC REST Wrinkles
86
See also... Slides & Code http://www.jamescrisp.org MVC http://www.asp.net/mvc/ RESTful Web Services
87
http://flickr.com/photos/misserion/2190827125/ - web http://flickr.com/photos/hyougushi/412600118/ - bridge http://en.wikipedia.org/wiki/Image:Internet_map_1024.jpg - web http://flickr.com/photos/gradin/3361527/ - defibrillator http://flickr.com/photos/keoki/1418303458/ - padlocks http://roadmap.cbdiforum.com/reports/protocols/ - ws* stack http://flickr.com/photos/chainsawpanda/1528894/ - tunnel http://flickr.com/photos/psd/421186578/ - fielding http://flickr.com/photos/esparta/187132368/ - bill gates http://flickr.com/photos/acme_explosives/117276632/ - network plugs http://flickr.com/photos/walterhertman/101489766/ - speedometers http://flickr.com/photos/sis/5908199/ - Petco explosion http://flickr.com/photos/pleasewait/476776136/ - letter http://flickr.com/photos/bigpinkcookie/108895725/ - Eiffel tower http://flickr.com/photos/bala_/2077047513/ - pizza restaurant http://flickr.com/photos/57231735@N00/201482385/ - pepperoni pizza http://flickr.com/photos/sheeshoo/10321250/ - corona http://flickr.com/photos/freddy/39340695/ - salad http://flickr.com/photos/huthfamily/1304336305/ - 42 pizza boxes http://www.crummy.com/writing/RESTful-Web-Services/cover.png – REST book Image References
88
Questions?
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.