REST-baserade tjänster med WCF ASP.NET Web APIRobert Folkesson
Active Solution
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
HATEOASHypermedia as the engine of application state
Example of hypermedia representation (Netflix)
Richardsons maturity model
Level 0: The swamp of POX
Level 1: Resources
Level 2: HTPP Verbs
Level 3: Hypermedia Controls
Glory of REST
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 APIWCF Web APIASP.NET Web API
Service => Web API controllerOperation => ActionService contract => n/aEndpoint => n/aURI templates => ASP.NET RoutingMessage handlers => SameFormatters => SameOperation handlers => 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
Level 0: The swamp of POX
Level 1: Resources
Level 2: HTPP Verbs
Level 3: Hypermedia Controls
Glory of REST
ASP.
NET
Web
API
OAuth/Claims based security
http://zamd.net/
Open Source: http://aspnetwebapi.codeplex.com
Some good reading
Top Related