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.WebApiWebsite:
http://www.asp.net/web-apiStatus
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 Web
API 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; Web
API 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 HttpResponseException(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()
{
[…]
}
}