www.rolandk.de
- Aktuelle Themen zu .Net -
Achtung: Hier handelt es sich um meine alte Seite.
Die aktuelle ist unter folgendem Link erreichbar: www.rolandk.de/wp/
Home Blog REST als Alternative zu Soap




















































REST als Alternative zu Soap
Dienstag, den 27. März 2012 um 21:05 Uhr

Oft versteht man unter dem Begriff Webservice nur Soap-Dienste, das heißt, man bekommt eine Wsdl-Datei, importiert sie in Visual Studio und bekommt sofort eine Klasse, mit der man die Funktionen des Dienstes aufrufen kann. In anderen Sprachen funktioniert es ähnlich einfach, auch wenn die Kopplung unterschiedlicher Sprach-Plattformen nicht immer so einfach bleibt. Die Welt der Webservices ist aber deutlich komplexer bzw. vielseitiger, so habe ich bereits vor einer ganzen Weile einen Artikel über Xml-Rpc geschrieben - eine ganz andere und einfachere Webservice Technologie. Ein anderes Thema, das ich zur Zeit sehr gerne nutze, sind REST basierte Dienste.

 

Das REST-Prinzip wird an anderen Stellen sehr umfangreich beschrieben, daher halte ich mich hier kurz. Ein gutes Beispiel ist der Artikel why REST based services?. Die Grundidee ist es, dass nur die Standardmittel des Http-Protokolls verwendet werden und keine nach irgendeinem komplexen Schema gebauten Xml-Anfragen. Nach REST soll man jede Ressource bzw. jede Funktion eindeutig über eine URL aufrufen können. Das Format des Ergebnisses legt der Aufrufer über den content-type fest (z. B. text/xml oder text/json). Nachfolgend ein einfaches Beispiel einer solchen Url und das Ergebnis durch einen Test-Dienst:

 

An diesem Beispiel sieht man auch den in meinen Augen größten Vorteil: Der Dienst kann auch einfach mit dem eigenen Browser aufgerufen werden. Der Server dahinter ist kein extrem komplexes Programm, sondern kann mit relativ einfachen Mitteln von WCF entwickelt werden. Nachfolgendes Coding stammt aus dem Server Programm und wurde gegen .Net 4.0 entwickelt.

  1. [ServiceContract]
  2. public interface ICustomerService
  3. {
  4. /// <summary>
  5. /// Gets a list containing all customers.
  6. /// </summary>
  7. [OperationContract]
  8. [WebGet(UriTemplate = "Customers")]
  9. CustomerList GetCustomers();
  10. }
  11.  
  12. [ServiceBehavior(
  13. Name = "CustomerService",
  14. InstanceContextMode = InstanceContextMode.Single)]
  15. public class CustomerService : ICustomerService
  16. {
  17. /// <summary>
  18. /// Initializes a new instance of the <see cref="CustomerService"/> class.
  19. /// </summary>
  20. public CustomerService()
  21. {
  22.  
  23. }
  24.  
  25. /// <summary>
  26. /// Gets a collection containing all customers.
  27. /// </summary>
  28. public CustomerList GetCustomers()
  29. {
  30. CustomerList result = new CustomerList();
  31. result.Add(new Customer() { Name = "Roland König", Country = "Germany" });
  32. return result;
  33. }
  34. }
  35.  
  36. /// <summary>
  37. /// Main method of the application.
  38. /// </summary>
  39. public static void Main()
  40. {
  41. //Create WebServiceHost object
  42. WebServiceHost host = new WebServiceHost(typeof(CustomerService), new Uri("http://127.0.0.1:30000"));
  43. WebHttpBinding httpBinding = new WebHttpBinding();
  44. host.AddServiceEndpoint(typeof(ICustomerService), httpBinding, "");
  45.  
  46. //Enable help page generation
  47. host.Description.Endpoints[0].Behaviors.Add(new WebHttpBehavior
  48. {
  49. HelpEnabled = true,
  50. FaultExceptionEnabled = true
  51. });
  52.  
  53. //Start host
  54. host.Open();
  55.  
  56. Console.WriteLine("Waiting for requests..");
  57. Console.ReadLine();
  58. }

Es wird das Interface definiert (ICustomerService), das Interface in einer Webservice-Klasse implementiert (CustomerService) und schließlich wird das alles in der Main-Methode unten gehostet. Konfigurationsdateien - wie sie bei WCF eigentlich üblich sind - wurden hier keine verwendet. Aktuell funktioniert das relativ gut. Für die Zukunft hätte die Plattform ursprünglich auf Basis von WCF weiterentwickelt werden sollen, allerdings geht es hier zunächst nicht weiter. Als Alternative wird es die ASP.Net WebAPI geben, welche das REST-Prinzip in Zukunft für .Net verfügbar machen soll - übrigens auch für Szenarien wir im Code oben, in denen kein IIS, sondern ein einfacher "Self-Host" verwendet wird. Nähere Infos dazu auf Codeplex oder direkt über ein Tutorial von Microsoft.

 

Kommentar hinzufügen

Ihr Name:
Kommentar: