Excellent REST met de WebAPI
Maurice de Beijer
Wie ben ik
• Maurice de Beijer• The Problem Solver• Microsoft Integration MVP• DevelopMentor instructor• Twitter: @mauricedb• Blog: http://msmvps.com/blogs/theproblemsolver/
• Web: http://www.HTML5Support.nl• E-mail: [email protected]
Agenda• Wat is REST?• Wat is de ASP.NET WebAPI• Hypermedia
Wat is REST?
REpresentational State Transfer (REST) is een software-architectuur
voor gedistribueerde mediasystemen zoals het World wide web.
Wikipedia
Wat is REST?• Bedacht door Roy Thomas Fielding– Onderdeel van zijn doctoraalstudie
uit 2000– Een van de drie auteurs van de
Hypertext Transfer Protocol -- HTTP/1.0
• Een manier om web services te maken– Op basis van de HTTP standaard
Hypertext Transfer ProtocolThe Hypertext Transfer Protocol (HTTP) is
an application-level protocol for distributed, collaborative,
hypermedia information systems. It is a generic, stateless, protocol which
can be used for many tasks beyond its use for hypertext.
The Internet Engineering Task Force
Richardson Maturity Model
ASP.NET WebAPIASP.NET Web API is een framework dat het makkelijk maakt om HTTP
en REST services te bouwen op het .NET framework.
WebAPI Controllers• In een ApiController gebeurt het
werk– Toegang tot het Request en
Response
• ModelBinding maakt het werken met binnenkomende data gemakkelijk– Kan ook met een
HttpRequestMessage werken
WebAPI Controllers• Veel controle over data naar de
client– HttpResponseMessage– Content negotiation
• Kan ook HTTP headers zetten– Caching– Optimistic concurrency
WebAPI Controllerspublic class DemoController : ApiController{ // GET api/demo public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }}
WebAPI Routes• Routes koppelen URL aan
Controller– Net als in ASP.NET MVC
• Je kan er meerdere hebben– De volgorde is van belang
WebAPI Routespublic static void Register(HttpConfiguration config){ config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );}
demoWebAPI
Content negotiation• Wat we versturen != hoe we het
weergeven– JSON of XML: een boek blijft een
boek
MediaTypeFormatter• Een media type geeft het formaat
aan– JSON, XML, Word, PDF, VCard etc
• Een MediaTypeFormatter converteert– HTTP <> CLR type
• Content negotiation bepaalt het type– De client gebruikt de Accept header
MediaTypeFormatterpublic class CustomersTextFormatter : BufferedMediaTypeFormatter{ public CustomersTextFormatter() { SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/text")); }
public override bool CanWriteType(Type type) { return typeof(IEnumerable<Customer>).IsAssignableFrom(type); }
public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content) { // ... }}
demoContent Negotiation
HTTP Methods• HTTP ondersteunt veel methodes– Binnen HTML gebruiken we er maar
twee
• HTTP methodes geven het doel aan– Vertaalt goed naar CRUD acties
HTTP MethodsAktie HTTP Method
Create POST
Read GET
Update (helemaal vervangen) PUT
Update (gedeeltelijk) PATCH
Delete DELETE
WebAPI HTTP Methodspublic class DemoController : ApiController { // GET api/demo public IEnumerable<string> Get()
// GET api/demo/5 public string Get(int id)
// POST api/demo public void Post([FromBody]string value)
// PUT api/demo/5 public void Put(int id, [FromBody]string value)
// DELETE api/demo/5 public void Delete(int id)}
demoCRUD operaties
Hypermedia - Roy T. Fielding
Hypermedia is defined by the presence of application control information
embedded within, or as a layer above, the presentation of information.
Distributed hypermedia allows the presentation and control information to
be stored at remote locations.Roy T. Fielding
Richardson Maturity Model
Het OData Protocol• Open Data Protocol (OData)– Een web protocol voor het zoeken
naar en bijwerken van data.– Gebaseerd op de W3C AtomPub
standaard
• Kan ook metadata bevatten• Zie ook WCF Data Services
OData metadata• Een OData service kan metadata
teruggeven– http://odata.netflix.com/v2/Catalog/$metad
ata
• Maakt generieke browsers als SQL Server PowerPivot for Excel mogelijk
demoOData
ASP.NET WebAPI en OData• Er is een NuGet package
– Install-Package Microsoft.AspNet.WebApi.OData –pre
• Op dit moment is er ondersteuning voor filter en sorteren– Er wordt gewerkt aan het OData
formaat
OData queriespublic class CustomerController : ApiController{ private NorthwindEntities db = new NorthwindEntities();
// GET api/Default2 [Queryable(PageSize=10)] public IQueryable<Customers> GetCustomers() { return db.Customers; }}
demoOData queries
Conclusie• ASP.NET WebAPI maakt REST
gemakkelijk–Maar soms is MVC al genoeg
• Denk aan hypermedia– Zeker als het een publieke service is
Top Related