3. 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: mauricedb@computer.org
4. Agenda
• Wat is REST?
• Wat is de ASP.NET WebAPI
• Hypermedia
5. Wat is REST?
REpresentational State Transfer (REST) is
een software-architectuur voor
gedistribueerde mediasystemen zoals het
World wide web.
Wikipedia
6. 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
7. Hypertext Transfer Protocol
The 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
9. ASP.NET WebAPI
ASP.NET Web API is een framework dat
het makkelijk maakt om HTTP en REST
services te bouwen op het .NET
framework.
10. 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
11. WebAPI Controllers
• Veel controle over data naar de client
– HttpResponseMessage
– Content negotiation
• Kan ook HTTP headers zetten
– Caching
– Optimistic concurrency
12. WebAPI Controllers
public class DemoController : ApiController
{
// GET api/demo
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
13. WebAPI Routes
• Routes koppelen URL aan Controller
– Net als in ASP.NET MVC
• Je kan er meerdere hebben
– De volgorde is van belang
14. WebAPI Routes
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
16. Content negotiation
• Wat we versturen != hoe we het
weergeven
– JSON of XML: een boek blijft een boek
17. 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
18. MediaTypeFormatter
public 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)
{
// ...
}
}
20. HTTP Methods
• HTTP ondersteunt veel methodes
– Binnen HTML gebruiken we er maar twee
• HTTP methodes geven het doel aan
– Vertaalt goed naar CRUD acties
21. HTTP Methods
Aktie HTTP Method
Create POST
Read GET
Update (helemaal vervangen) PUT
Update (gedeeltelijk) PATCH
Delete DELETE
22. WebAPI HTTP Methods
public 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)
}
24. 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
26. 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
27. OData metadata
• Een OData service kan metadata
teruggeven
– http://odata.netflix.com/v2/Catalog/$metadata
• Maakt generieke browsers als SQL
Server PowerPivot for Excel mogelijk
29. 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
30. OData queries
public class CustomerController : ApiController
{
private NorthwindEntities db = new NorthwindEntities();
// GET api/Default2
[Queryable(PageSize=10)]
public IQueryable<Customers> GetCustomers()
{
return db.Customers;
}
}