Intel XDK: Web Services mit Visual Studio 2013 und dem Intel XDK (Hands-on-Lab)

Tags

Einführung in die Cross-Plattform Entwicklung

Web Services mit Visual Studio 2013 und dem Intel XDK

[ Video-Training und weitere Artikel ]

Dieser Kurs steht am Ende von diesem Artikel auch als PDF-Datei zur Verfügung.

Einführung

Dieses Hands-on-Lab (HOL) macht den Leser mit dem Intel XDK und dem Zugriff auf Web Services vertraut. Der Web Service wird über die ASP.NET Web API bereitgestellt. Es wird Schritt für Schritt ein Web-Service und eine Hybrid-App entwickelt und getestet.

Voraussetzungen

Die folgenden Voraussetzungen sind notwendig für die nächsten Schritte:

Was sind Web Services?

Die Web Services (Web Dienste) ermöglichen eine Datenkommunikation von Server und Client über HTTP. Der Vorteil hierbei ist, dass die Kommunikation über HTTP einfach und schnell bereitgestellt werden kann. Es wird in den meisten Fällen keine zusätzliche Firewall Konfiguration benötigt. Das Standard Datenformat war zudem Jahrelang XML, das den Zugriff Technologieneutral ermöglicht. Es spielt daher keine Rolle ob es sich bei dem Client um eine .NET-, Java- oder JavaScript-Abfrage handelt.

In den letzten Jahren hat sich bei den Web Services ein Architekturstiel mit REST (Representational State Transfer) durchgesetzt. Dieser ermöglicht eine zustandslose Kommunikation über HTTP und nutzt davon die enthaltenen GET, HEAD, PUT und DELETE Funktionen. So ein Aufruf würde dann zum Beispiel über eine URL wie: http://localhost/customer/1 ein Kunde mit der ID 1 zurückgeben.

Als Datenformat hat sich JSON (JavaScript Object Notation) stark durchgesetzt. Dieses ist gegenüber dem klassischen XML kompakter und immer noch für den Menschen lesbar. Erfolgt ein Aufruf über JavaScript, sind die Daten bereits dafür kompatibel. Es muss daher kein weiteres Mappen in eigene Objekte durchgeführt werden.

Microsoft hat ein leichtgewichtige Web Service API mit den Namen ASP.NET Web API veröffentlicht. Mit dessen ein Web Service in C# ganz einfach und schnell programmiert werden kann. Die ASP.NET Web API stellt den Web Serivce automatisch als REST mit dem Datenformat JSON zur Verfügung.

Weitere Informationen dazu unter: http://www.asp.net/web-api

Übung – Einen Web Service erzeugen und mit einer Hybrid-App darauf zugreifen

Als erstes wird ein Web Service benötigt der ein Beispieldatensatz zur Verfügung stellt. Dazu wird Visual Studio gestartet und ein neues Web-Projekt mit den Namen „CloudService“ angelegt.


Abbildung 1 – Ein neues Web-Projekt in Visual Studio 2013 anlegen

Nach dem anlegen vom Projekt erscheint ein Dialog mit der Auswahl von Projektvorlagen. In diesem Beispiel wird ein leeres (Empty) Projekt benötigt. Bei der Web API-CheckBox wird noch ein Haken gesetzt und anschließend mit dem OK-Button bestätigt.


Abbildung 2 – Eine Leere Projektvorlage mit der Web API auswählen

Nachdem das Projekt erzeugt wurde, wird eine neue Datenklasse benötigt. Dazu ein Rechtsklick auf das Models-Verzeichnis. Im Kontextmenü wählen wir „Hinzufügen“ – „Klasse“.


Abbildung 3 – Eine neue Klasse hinzufügen

Die Klasse bekommt den Namen „Product.cs“.


Abbildung 4 – Das Hinzufügen mit einem Namen bestätigen

Die neue Product-Klasse wird nach dem Anlegen automatisch im Code-Editor geöffnet. Wir schreiben jetzt noch die Eigenschaften Id, Name und Price. Listing 1 zeigt den dazu benötigten C#-Code.

public class Product
{
       public int Id { get; set; }
       public string Name { get; set; }
       public double Price { get; set; }
}

Listing 1 – Die Product- Datenklasse mit den dazugehörigen Eigenschaften

Bei der ASP.NET Web API wird eine Funktion über einen Controller bereitgestellt. Mit einem Rechtsklick auf das Controllers-Verzeichnis, wählen wir im Kontextmenü „Hinzufügen“ – „Controller“ aus.


Abbildung 5 – Einen neuen Controller hinzufügen

Ein Dialog frägt nach der benötigten Vorlage, die für das Erzeugen vom Controller verwendet werden soll. Es wird die „Web API 2-Controller-Leer“-Vorlage benötigt.


Abbildung 6 – Controller-Vorlage auswählen

Es öffnet sich ein weiterer Dialog mit der Abfrage des Controllernamens. Als Namen vergeben wir „ProductsController“. Die Namensendung mit „Controller“ sollte immer mit angegeben werden. Dieser dient als Namenskonvention und wird bei der späteren Verwendung zur Laufzeit ignoriert. Das bedeutet, dass die URL-Abfrage nur Products und nicht ProductsController beinhaltet.


Abbildung 7 – Controllername festlegen

Der ProductsController wurde nun erzeugt und wird automatisch im Code-Editor angezeigt. Die ASP.NET Web API Controller leiten immer von der ApiController-Basisklasse ab, das die wesentlichsten Funktionalitäten bietet.

Jetzt benötigen wir zwei Beispieldatensätze, die mit einem Product-Array als Feld innerhalb vom Controller hinzugefügt wird. Anschließend wird eine öffentliche Methode mit dem Namen „GetAllProducts“ implementiert. Auch hier gilt eine Namenskonvention zu beachten. Wenn ein Methodennamen mit „Get“ beginnt, weiß der ASP.NET Web API Controller das er etwas zurückgeben muss. Der Rest vom Namen ist bei der späteren Verwendung vom Web Service nicht relevant. Es kann auch mehrere Get-Methoden geben, die sich allerdings dann durch zusätzliche Methoden-Parameter unterscheiden müssen. Der Beispielcode für die Implementierung, steht unter Listing 2.

public class ProductsController : ApiController
{
       private readonly Product[] _products = new Product[]
       {
           new Product { Id = 1, Name = “Windows Phone”, Price = 99.0 },
           new Product { Id = 2, Name = “Windows 8.1”, Price = 29.0 }
       };

       public IEnumerable<Product> GetAllProducts()
       {
            return _products;
       }
}

Listing 2 – Controller-Logik

Der Web Service ist jetzt fertig und kann ganz einfach per F5-Taste gestartet werden. Es öffnet sich der Browser mit der URL http://localhost:xx. Wobei xx eine automatisch generierte Port-Nummer ist. Der Browser zeigt eine Fehlseite an. Das liegt daran das auch keine HTML-Datei als Startdatei hinterlegt wurde. Es ist auch nicht relevant für uns. Die ASP.NET Web API wird durch eine weitere URL deklarion names /api/ erreicht. Dann folgt der Name vom Controller ohne den Namenszusatz. Die komplette URL ist dann wie folgt aufgebaut: http://localhost:xx/api/products.

Wenn die URL eingegeben wurde, stellt der Browser automatisch eine products.json-Datei als Download zur Verfügung. Wird diese heruntergeladen und geöffnet, befindet sich nichts anderes als der Beispieldatensatz aus Listing 2 im JSON-Datenformat.

Wichtig! Der Browser darf jetzt für die weitere Entwicklung nicht geschlossen werden. Der lokale Webhoster IIS Express würde schließen und die Hybrid-App kann nicht mehr den Web Service verwenden.

Mit dem Intel XDK auf Web Services zugreifen

Jetzt geht es mit dem Intel XDK weiter. Es soll nun eine Hybrid-App auf den Web Service zugreifen und die Daten anzeigen. Für die Übung wählen wir die „Start with App Designer“-Vorlage aus und geben „WebServiceBeispiel“ als Projektnamen ein. Wir erzeugen das Projekt per Klick auf den blauen Create-Button.


Abbildung 8 – Ein neues Projekt mit „WebServiceBeispiel“ erzeugen

Es öffnet sich anschließend der App Designer mit einem Dialog. Dieses fragt welches JavaScript UI-Framework verwendet werden soll. In dieser Übung wird mit dem App Framework gearbeitet und wird mit einem Klick auf den Select-Button bestätigt.


Abbildung 9 – JavaScript UI-Framework auswählen

Mit Drag-and-Drop wird jetzt ein Listview-Steuerelement auf die Oberfläche platziert. Bei der Id unter den Eigenschaften, wird der Wert „productsBox“ geschrieben.


Abbildung 10 – Listview auf der Oberfläche platzieren und Id festlegen

Wir wechseln nun zum HTML Code-Editor via Code-Button im Menü. In der Regel sollte passend zur Oberfläche die Index.html-Datei geöffnet sein. Innerhalb der onDeviceReady-Funktion erfolgt nun der nötige JavaScript-Code für die Web Service Datenabfrage.

Die getJSON-Funktion stellt die nötige Funktionalität zur Web Service Datenabfrage zur Verfügung. Mit einem String-Wert wird die nötige URL durchgereicht, ist die asynchrone Datenabfrage erfolgt, wird die done-Funktion aufgerufen und überreicht die products.json-Datei über ein data-Parameter.

Die Listview wird dann erstmal komplett geleert und der empfangene Datensatz wird dann mit einer Schleife eingetragen. Der Source Code dazu steht unter Listing 3.

<script type="text/javascript">

/* This code is used to run as soon as Intel activates */
var onDeviceReady=function(){

//hide splash screen
intel.xdk.device.hideSplashScreen();

$.getJSON("http://localhost:xx/api/products").done(function(data){

                       $("#productsBox").html("");

                       for(var index in data){

                              $("#productsBox").append("<li>" + data[index].Name + ": " + data[index].Price + " €</li>");

                       }
});

};

document.addEventListener("intel.xdk.device.ready",onDeviceReady,false);

</script>

Listing 3 – JavaScript Web Service Aufruf

Die App kann nun innerhalb vom Emulator getestet werden. Sobald die Hybrid-App geladen wurde, stehen bereits in wenigen Sekunden die Daten von unseren Web Service auf der Oberfläche. Wie Abbildung 11 veranschaulicht.


Abbildung 11 – Die fertige Hybrid-App im Emulator testen

 

Programmiersprache

C#

Zone

Format

Publikum

Betriebssysteme