WHO AM I? REST? • Dissertation by Roy Fielding 2000 • “Architectural Styles and the Design of Network-based Software Architectures” • ReST = Representational State Transfer Architectural constraints • • • • • Client–server Stateless Cacheable Layered system Uniform Interface Scalability GET http://fabrikam.com/API/User/42 Guiding principles of REST-interfaces • Identification of resources • Manipulation of resources through representations of these resources • Self-descriptive messages • Hypermedia as the engine of application state HATEOAS Hypermedia as the engine of application state Example of hypermedia representation (Netflix) Richardsons maturity model Glory of REST Level 3: Hypermedia Controls Level 2: HTPP Verbs Level 1: Resources Level 0: The swamp of POX REST on Microsoft – some history • WCF pre-3.5: painful… • WCF 3.5: WebHttpBinding. • WCF REST Starter Kit (no longer supported) • WCF Data Services (OData) • WCF Web API - Preview 1 - 6 WCF ASP.NET Web API http://www.asp.net/web-api • Goal: One HTTP/ REST / Hypermedia API Fx • Integrated in ASP.NET: Best of both world WCF to ASP.NET Web API WCF Web API Service Operation Service contract Endpoint URI templates Message handlers Formatters Operation handlers ASP.NET Web API => => => => => => => => Web API controller Action n/a n/a ASP.NET Routing Same Same Filters, model binders DEMO – FILE NEW Media types & Media Formatters HTTP/1.1 200 OK Content-Length: 95267 Content-Type: image/png Accept: text/html,application/xhtml+xml,application/xml Media types & Media Formatters • Built in support for: – XML – JSON – form-urlencoded data • Can be extended with custom Media Formatters DEMO – MEDIA TYPE FORMATTER Web API on NuGet • Web API hosted in ASP.NET: – AspNetWebApi • Self-hosted Web API: – AspNetWebApi.Selfhost • HttpClient including XML and JSON formatters: – System.Net.Http.Formatting • JsonValue for navigating and manipulating JSON: – System.Json Newtonsoft.Json Node-style Web API? LiteWebServer server = new LiteWebServer("http://localhost"); server.Get("/Hello", (r) => new HttpResponseMessage() { Content = new StringContent("Hello World!") }); server.Post("/Echo", (r) => new HttpResponseMessage() { Content = new StringContent( r.Content.ReadAsStringAsync().Result) }); server.Open(); http://blogs.msdn.com/b/youssefm/archive/2012/02/24/ writing-a-lightweight-web-service-using-webapi-building-blocks.aspx DEMO – SELF HOSTING Web API can be used for all levels ASP.NET Web API Glory of REST Level 3: Hypermedia Controls Level 2: HTPP Verbs Level 1: Resources Level 0: The swamp of POX OAuth/Claims based security http://zamd.net/ Open Source: http://aspnetwebapi.codeplex.com Some good reading Thank you! Robert Folkesson | Active Solution robert.folkesson@activesolution.se | @rfolkes www.robertfolkesson.se