REST and Web API

2,444 views
2,292 views

Published on

Why we need REST?
Why speak about it?

Roman Kalita

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,444
On SlideShare
0
From Embeds
0
Number of Embeds
119
Actions
Shares
0
Downloads
86
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

REST and Web API

  1. 1. IREST and Web APIRoman Kalitakalita.roman@gmail.com@rkregforSkype: kalita_roman
  2. 2. IWhy we need REST?Why speak about it?
  3. 3. From web sites to web ApisFrom mobile to data
  4. 4. RepresentationalStateTransfer Architectural style based on HTTP protocol usage and principles of The Web Tightly coupled to HTTP protocol Lightweight Stateless Simple caching “from the box” Easy to consume (e.g. mobile devices, JavaScript etc.) Goal: scaling, loose coupling and compose functionality across service boundaries
  5. 5. Richardson Maturity Model I Level3: Hypermedia controls Level2: HTTP Verbs Level1: Resources Level0: POX, Single URI
  6. 6. Level0POX, Single URI, Transport The systems focus are service end point URI and one HTTP verb (likely POST verb) for communication. AppointmentService GetOpenTimeSlot TimeSlotsList ServicClient e MakeAppointment ReservationResult
  7. 7. Level1Resources Introduces resources, URIs per resource, but one HTTP ve Handling complexity by using divide and conquer, breaking a large endpoint down into multiple resources. http://klinik.com/ POST doctors/eberwein Doctor s TimeSlotsListClient POST slots/15092012 Slots ReservationResult
  8. 8. Level2 HTTP Verbs The system relies on more HTTP verbs and HTTP response codes on each resource. http://klinik.com/ doctors/eberwein GET ?date=…&open=1 Doctor s 200 OK TimeSlotsListClient POST slots/15092012 Slots 204 CREATED ReservationResult
  9. 9. Level3 Hypermedia Introduces discoverability, providing a way of making a protocol more self-documenting. http://klinik.com/ doctors/eberwein GET ?date=…&open=1 Doctor 200 OK TimeSlotsList s <link rel = "/linkrels/slot/book"Client uri = "/slots/5678"/> POST slots/15092012 Slots 204 CREATED ReservationResult
  10. 10. Cooking REST on .NET – Web API URL Routing to produce clean URLs Content Negotiation based on Accept headers for request and response serialization Support for a host of supported output formats including JSON, XML, ATOM Extensible (easy to add new formats, custom handlers, routing, error handlers) Self-hostable in non-Web applications Testable using testing concepts similar to MVC
  11. 11. Web API Routing  Routing “à la” ASP.NET MVC  Register your routs from Application_Start in Global.asax.csRouteTable.Routes.MapHttpRoute( name: "UploadDownlaodOnlyTrhougthTransport", routeTemplate: "api/transports/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = "uploads|downloads" });RouteTable.Routes.MapHttpRoute( name: "AllExceptUploadaDownload", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = @"^((?!(downloads|uploads)).)*$" });
  12. 12. Web API Controller  Derived from ApiController  Actions are mapped to URIs via naming convention or attributes  Deep support for more advanced HTTP features via HttpResponseMessage and HttpRequestMessage.public class ProductsController : ApiController{ public IEnumerable<Product> GetAllProducts(){} public Product GetProduct(int id) {} public HttpResponseMessage PostProduct(Product item) {} public void PutProduct(int id, Product contact) {} [AcceptVerbs("GET", "HEAD")] public Product FindProduct(id) {} [HttpGet] public Product FindProduct(id) {}}
  13. 13. OData support Support “in the box” for OData $top, $skip, $filter, $orderby, advanced support in pre-release Install-Package Microsoft.AspNet.WebApi.OData -Pre Till release - as alternative use of WCF Data Services Queryable attribute to enable OData querieshttp://localhost:38856/api/products?$filter=category+eq+Toys[Queryable]public IQueryable<Product> GetAllProducts(){ return repository.GetAll().AsQueryable();}
  14. 14. Web API extensiblity Message handlers to handle request and responses Action filters for custom logic before and after action execution Custom formatters to add custom media type formats Dependency resolver to enable dependency injection for controllers
  15. 15. Things that helpHTTP debugging proxies Fiddler fiddler2.com Curl, for cmd-line fans curl.haxx.se Httpie, for cmd-line fans github.com/jkbr/httpieDebugging Wireshark Remote debugService things REST service help page Test web client
  16. 16. Read more and references RFCs ietf.org/rfc/... URI …/rfc3986.txt, URL …/rfc1738.txt HTTP, …/rfc2616.txt Web API bloggers  webapibloggers.com ASP.NET Web API  asp.net/webapi  aspnetwebstack.codeplex.com Alternatives to Web API  servicestack.net Martin Fowler’s article about Richardson Maturity Model  martinfowler.com/articles/richardsonMaturityModel.ht ml
  17. 17. http://www.flickr.com/photos/f-oxymoron/5005673112

×