excellent rest met de web api
DESCRIPTION
TRANSCRIPT
![Page 1: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/1.jpg)
![Page 2: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/2.jpg)
Excellent REST met de WebAPI
Maurice de Beijer
![Page 3: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/3.jpg)
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]
![Page 4: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/4.jpg)
Agenda• Wat is REST?• Wat is de ASP.NET WebAPI• Hypermedia
![Page 5: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/5.jpg)
Wat is REST?
REpresentational State Transfer (REST) is een software-architectuur
voor gedistribueerde mediasystemen zoals het World wide web.
Wikipedia
![Page 6: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/6.jpg)
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
![Page 7: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/7.jpg)
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
![Page 8: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/8.jpg)
Richardson Maturity Model
![Page 9: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/9.jpg)
ASP.NET WebAPIASP.NET Web API is een framework dat het makkelijk maakt om HTTP
en REST services te bouwen op het .NET framework.
![Page 10: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/10.jpg)
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
![Page 11: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/11.jpg)
WebAPI Controllers• Veel controle over data naar de
client– HttpResponseMessage– Content negotiation
• Kan ook HTTP headers zetten– Caching– Optimistic concurrency
![Page 12: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/12.jpg)
WebAPI Controllerspublic class DemoController : ApiController{ // GET api/demo public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }}
![Page 13: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/13.jpg)
WebAPI Routes• Routes koppelen URL aan
Controller– Net als in ASP.NET MVC
• Je kan er meerdere hebben– De volgorde is van belang
![Page 14: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/14.jpg)
WebAPI Routespublic static void Register(HttpConfiguration config){ config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );}
![Page 15: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/15.jpg)
demoWebAPI
![Page 16: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/16.jpg)
Content negotiation• Wat we versturen != hoe we het
weergeven– JSON of XML: een boek blijft een
boek
![Page 17: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/17.jpg)
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
![Page 18: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/18.jpg)
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) { // ... }}
![Page 19: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/19.jpg)
demoContent Negotiation
![Page 20: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/20.jpg)
HTTP Methods• HTTP ondersteunt veel methodes– Binnen HTML gebruiken we er maar
twee
• HTTP methodes geven het doel aan– Vertaalt goed naar CRUD acties
![Page 21: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/21.jpg)
HTTP MethodsAktie HTTP Method
Create POST
Read GET
Update (helemaal vervangen) PUT
Update (gedeeltelijk) PATCH
Delete DELETE
![Page 22: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/22.jpg)
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)}
![Page 23: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/23.jpg)
demoCRUD operaties
![Page 24: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/24.jpg)
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
![Page 25: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/25.jpg)
Richardson Maturity Model
![Page 26: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/26.jpg)
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
![Page 27: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/27.jpg)
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
![Page 28: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/28.jpg)
demoOData
![Page 29: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/29.jpg)
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
![Page 30: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/30.jpg)
OData queriespublic class CustomerController : ApiController{ private NorthwindEntities db = new NorthwindEntities();
// GET api/Default2 [Queryable(PageSize=10)] public IQueryable<Customers> GetCustomers() { return db.Customers; }}
![Page 31: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/31.jpg)
demoOData queries
![Page 32: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/32.jpg)
![Page 33: Excellent rest met de web api](https://reader033.vdocuments.us/reader033/viewer/2022061214/549a449fb47959794d8b5911/html5/thumbnails/33.jpg)
Conclusie• ASP.NET WebAPI maakt REST
gemakkelijk–Maar soms is MVC al genoeg
• Denk aan hypermedia– Zeker als het een publieke service is