ASP.NET Web API
Eintrag zuletzt aktualisiert am: 19.02.2015
Das ASP.NET
Web API ist eine .NET-basierte Bibliothek von Microsoft zur Erstellung
REST-basierter
Webservices mit HTTP und
XML/
JSON. Das ASP.NET
Web API ist eine Alternative zur
Windows Communication Foundation (
WCF).
Links
Paket:
https://www.nuget.org/packages/Microsoft.AspNet.WebApi
Website:
http://www.asp.net/web-api
Status
ASP.NET
Web API galt immer schon als Teil von ASP.NET MVC, auch wenn es technisch einige Unterschiede gab, die auf die Implementierung durch verschiedene Entwicklungsteams zurückzuführen sind. Ab Version 6 ist WebAPI ist nun in ASP.NET MVC 6 komplett integriert wird.
Erscheinungstermine
Version 1: 11.08.2012 zusammen mit ASP.NET MVC 4
Version 2: 17.10.2013 zusammen mit
ASP.NET MVC 5
Version 2.1: 17.01.2014
Version 2.1: 01.07.2014
Version 6: erscheint 2015; WebAPI ist nun in ASP.NET MVC 6 komplett integriert wird.
Hintergründe zu ASP.NET Web API von Manfred Steyer
Die neue ASP.NET
Web API wird die Erstellung von
REST-basierten Services, welche auf so gut wie allen Plattformen konsumiert werden können, erheblich vereinfachen. Anders als beim Einsatz der
WCF werden Details des darunterliegenden Protokolls nicht abstrahiert, weswegen der Entwickler volle Kontrolle über die auf HTTP-basierende Kommunikation hat.
Egal ob auf mobilen Geräten, in Web-Browsern oder bei Cloud-Services, egal ob auf der
Java-Plattform, unter
PHP oder .NET: HTTP wird überall unterstützt. Dies ist auch der Grund dafür, warum die
REST-Bewegung, die den puren Einsatz von HTTP ohne zusätzliche Transportprotokolle wie
SOAP oder WS-* fordert, in den letzten Jahren zunehmend an Bedeutung gewinnt.
Die ASP.NET
Web API, welche im Rahmen von ASP.NET MVC 4 genutzt werden kann, wird in Zukunft die Entwicklung
REST-basierter Services erheblich vereinfachen. Anders als
WCF wird dabei das darunter liegende Protokoll nicht verborgen und abstrahiert, sondern ein direkter Zugriff auf die Möglichkeiten von HTTP gewährt. Ursprünglich sollte die
Web API gemeinsam mit
WCF verteilt werden. Allerdings entschied man sich bei Microsoft, dass sich ASP.NET MVC als übergeordnetes Framework besser eignet. Deswegen wurde sie von
WCF Web API in ASP.NET
Web API umbenannt. Ausgeliefert wird sie mit ASP.NET MVC 4.
Einen einfachen REST-Service erstellen
Möchte man
REST-Services über einen Web-Server zur Verfügung stellen, sind diese in einem ASP.NET MVC 4-Projekt anzulegen. Alternativ dazu kann sich der Entwickler auch, wie weiter unten beschrieben, selbst um das Hosting kümmern. In diesen Fällen wird ein eigener Web-Server, der im Lieferumfang der
Web API enthalten ist, in einer benutzerdefinierten Anwendung gestartet.
REST-Services leiten von ApiController ab (siehe Listing 1). Die vom Entwickler bereitgestellten
Methoden dieser Klassen stellt
Web API unter Verwendung von Konventionen via HTTP bereit. Beginnt der Name einer
Methode zum Beispiel mit Get, kann sie über das HTTP-Verb GET erreicht werden. Dasselbe gilt analog für POST, PUT und DELETE. Weicht der Name einer
Methode von dieser Konvention ab, kann diese mit den
Attributen HttpGet, HttpPost, HttpPut und HttpDelete mit diesen Verben assoziiert werden (siehe FindHotelsBySterne in Listing 1).
Weitere Verben können mit dem
Attribut AcceptVerbs zugewiesen werden. Beispiele dafür finden sich in Listing 2, wo unter anderem das benutzerdefinierte Verb X-ECHO zur
Methode Echo zugewiesen wird. In der aktuellen BETA verhindert der Einsatz von AcceptVerbs jedoch nicht, dass
Web API zusätzlich auch die erwähnten Konventionen anwendet. Aus diesem Grund könnte der Aufrufer die
Methode GetImplementationInfo in Listing 2 sowohl über X-INFO als auch über GET erreichen. Damit GET per Konvention nicht automatisch zugewiesen wird, wird hier jedoch unter Verwendung des
Attributes ActionName angegeben, dass intern der Name ImplementationInfo anstatt von GetImplementationInfo zu verwenden ist.
Listing 1
public class HotelsController : ApiController
{
public Hotel GetHotel(int id)
{
var rep = new HotelRepository();
var hotel = rep.FindById(id);
if (hotel == null) throw new HttpResponse
Exception(HttpStatusCode.NotFound);
return hotel;
}
public Hotel PostHotel(Hotel hotel)
{
var rep = new HotelRepository();
rep.Create(hotel);
return hotel;
}
[HttpGet]
public List<Hotel> FindHotelsBySterne(int minSterne)
{
var rep = new HotelRepository();
var hotels = rep.FindBySterne(minSterne);
return hotels;
}
[…]
}
Listing 2
public class HotelsController : ApiController
{
[…]
[AcceptVerbs("X-ECHO")]
public List<Hotel> EchoHotels(List<Hotel> hotels)
{
return hotels;
}
[AcceptVerbs("X-INFO")]
[ActionName("ImplementationInfo")]
public string GetImplementationInfo()
{
[…]
}
}