1
Prof. Dr. rer. nat. Claus Brell, Wirtschaftsinformatik, Forschungsinstitut GEMIT
(Geschäftsprozessmanagement & IT), Kompetenzzentrum CLAVIS
(Informationssicherheit) Hochschule Niederrhein.
Mail: claus.brell@hs-niederrhein,de , Twitter: https://twitter.com/clausbrell
Web: https://cbrell.de , https://cbrell.de/naturwatch , http://claus-brell.de
Webservices
2Motivation: Warum Webservices?
1 geheim: Algorithmen, die betriebswirtschaftliche wertvolles Know-How
enthalten, können vor dem Nutzer versteckt werden.
2 billiger betreiben: Wartung, Leistungsskalierung und Rollout sind für
Webservices einfach.
3 mehrfach nutzen: Webservices können ggf. in mehreren
Anwendungssystemen gemeinsam verwendet werden.
4 robust: Die Verteilung komplexer Anwendungen auf lose gekoppelte
Komponenten erhöht i.d.R. die Robustheit.
5 HR: Personen mit unterschiedlichen Kompetenzen können an der
Entwicklung beteiligt werden.
3z.B. AJAX: asynchrone Kommunikation mit Webservices
HTML
Browser, Client
CSS
Webserver
http
Java-
script
jQuery
PHP
node.js
Java-
script
.NETJava
.NET
JavaJEE
REST
SOAP
TCP / IP
Websockets
4z.B. AJAX: asynchrone Kommunikation mit Webservices
Asynchronous JavaScript and XML (AJAX) ist ein Konzept der asynchronen
Kommunikation zwischen Browser und Webserver über http.
XML kann, muss aber nicht.
Häufig: JSON.
Häufig: Webservice in PHP (79 % aller Internetseiten)
Client (Javasript-Programm im Browser) stellt eine Anfrage an den
Webservice (PHP-Programm auf dem Webserver).
Der Webservice „tut“ etwas (Berechnung oder Datenbankabfrage oder ...).
Das Ergebnis wird an den Client zurück übertragen.
Bei asynchroner Kommunikation: Client kann auf Eingaben reagieren,
während auf Antwort gewartet wird.
5
Java-
script
z.B. .NET Client: synchrone Kommunikation mit Webservices
HTML
Browser, Client
CSS
Webserver
http
jQuery
PHP
node.js
Java-
script
.NETJava
.NET
JavaJEE
REST
SOAP
TCP / IP
Websockets
6z.B. .NET Client: synchrone Kommunikation mit Webservices
Der gleiche Webservice wie für AJAX kann von einem .NET Client genutzt
werden.
Der Client (.NET-Konsolen-Programm) stellt eine Anfrage an den Webservice
(PHP-Programm auf dem Webserver).
Der Webservice „tut“ etwas (Berechnung oder Datenbankabfrage oder ...).
Das Ergebnis wird an den Client zurück übertragen.
Bei synchroner Kommunikation: Client wartet auf Rückmeldung des Servers
und reagiert nicht auf Eingaben.
7Anwendungsbeispiel BMI-Rechner
BMI (Body Mass Index) ist ein Indikator, ob eine Person normalgewichtig,
untergewichtig oder übergewichtig ist.
BMI wird berechnet aus der Körperlänge in m und dem Gewicht in kg mit
BMI=mit Körpergewicht/(Körperlänge zum Quadrat)
Typischerweise liegt der BMI zwischen 20 und 26.
Im Anwendungsbeispiel wird die Berechnung im Webservice ausgeführt.
Der Webservice wird in PHP programmiert.
Verwendet wird der Webservice von einem HTML-Formular und einem .NET-
Konsolenprogramm.
8Beispiel BMI-Rechner-Webservice in PHP
9Beispiel BMI-Rechner-Webservice in PHP
<?php
$cm=$_GET['cm']; //1
$m=$cm/100;
$kg=$_GET['kg'];
$bmi=$kg/$m/$m; //2
echo $bmi; //3
?>
//1 In der URI übergebener Parameter steht in der Servervariablen
$_GET. $_GET ist ein Array mit den Variablennamen als Keys. Der
Inhalt wird einer „normale“ Variable $cm zugewiesen.
//2 Der BMI wird berechnet mit Körpergewicht/Körperlänge^2 und der
Variablen $bmi zugewiesen.
// 3 mit echo wird der BMI zurückgegeben.
10bmirechnerWS.php mit dem Browser testen
11bmirechnerWS.php mit dem Browser testen
bmirechnerWS.php benötigt eine Laufzeitumgebung.
Ein Webserver mit PHP-Modul ist eine solche Laufzeitumgebung.
bmirechnerWS.php muss in das Dokumentenverzeichnis des Webservers
geladen werden.
bmirechnerWS.php kann dann im Browser direkt getestet werden mit
http://<serveradresse>/<verzeichnis>/bmirechnerWS.php?cm=190&kg=85
Die Aufrufparameter werden in der URI mit „cm=190“ festgelegt.
Mehrere Parameter werden durch „&“ getrennt.
Hinter dem Dateinamen des Webservices steht ein „?“ vor den Parametern.
12bmirechnerWS.php mit einem HTML-Formular testen
13bmirechnerWS.php mit einem HTML-Formular testen - Topologie
Webserver
bmiformular.htmlBrowser
bmirechnerWS.php
14bmirechnerWS.php mit einem HTML-Formular testen –
Use Case Diagramm
BMI-Rechner
Gewicht und Größe
eingeben
BMI ablesen
Nutzer
15bmirechnerWS.php mit einem HTML-Formular testen –
Ablauf aus Sicht des Nutzers (eEPK)
Nutzer möchte
BMI berechnen
Seite aufrufen
Seite geladen
Daten eintragen,
absenden
Skript ist
aufgerufen
BMI berechnen,
zurücksenden
BMI ist
berechnet
Nutzer
bmiformular.html
Nutzer
bmiformular.html
Nutzer
bmirechnerWS.php
16bmirechnerWS.php mit einem HTML-Formular testen
Der BMI-Rechner besteht aus zwei Komponenten: einem PHP-Skript und
einer HTML-Seite, mit der das Skript bequem aufgerufen werden kann.
Der Nutzer lädt die HTML-Datei von einem Webserver, trägt die Parameter
Gewicht und Körpergröße in das HTML-Formular ein und drückt den
„absenden“-Button.
Dadurch wird das PHP-Skript aufgerufen und die Parameter an das PHP
Skript übergeben.
Das Skript berechnet den BMI.
Die Ausgabe des Skriptes (der BMI als Fließkommazahl) wird an den
Browser zurückübertragen und angezeigt.
17Komponentenbasiertes System aus .NET-Client und PHP-Script –
Topologie
Webserver
.NET
Konsolen-
programm
bmirechnerWS.php
18Komponentenbasiertes System aus .NET-Client und PHP-Script –
Ansicht des Client-Bildschirms (Windows Konsole)
19C# Quelltext
20C# Quelltext
Rahmen
using System;
using System.Net;
using System.IO;
namespace bmiClient
{
class Program
{
static void Main(string[] args)
{
..... Inhalt der Methode Main
}
}
}
21C# Quelltext
Inhalt der Methode Main
WebClient myClient = new WebClient();
string url = "https://cbreXXXXXXXXXXXXXXXX/bmirechnerWS.php?";
Console.WriteLine("BMI Rechner Clientrn##################");
Console.WriteLine("Gewicht in kg eingeben:");
string kg=Console.ReadLine();
Console.WriteLine("Größe in cm eingeben:");
string cm = Console.ReadLine();
string parameter="kg="+kg+"&cm="+cm;
Stream data = myClient.OpenRead(url+parameter);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
data.Close();
reader.Close();
Console.WriteLine("Ihr BMI: "+s);
Console.ReadKey();
22C# Quelltext
Erläuterungen
Das Programm enthält nur den Code, der für das Funktionieren erforderlich
ist.
Es werden keine Fehler abgefangen.
Der Zugriff auf den Webservice erfolgt synchron.
1. Ein Objekt für den Internetzugriff wird erzeugt:
WebClient myClient = new WebClient();
Dazu wird der Namensraum using System.Net benötigt.
2. In der Variablen url wird die Internet-Adresse des Webservice gespeichert:
string url = "https:// .......
3. Programmzeilen der Form
Console.WriteLine("BMI .....
geben etwas auf dem Bildschirm aus.
23C# Quelltext
Erläuterungen
4. Mit ReadLine werden zeilenweise Eingaben eingelesen:
string kg=Console.ReadLine();
5. Für die Verbindung zum Webservice wird ein Handle data benötigt und
damit ein lesender Zugriff mit dem Handle reader eröffnet:
Stream data = myClient.OpenRead(url+parameter);
StreamReader reader = new StreamReader(data);
6. Die Rückgabe des Webservice wird in die Variable s gelesen:
string s = reader.ReadToEnd();
7. Alle Verbindungen werden wieder geschlossen:
data.Close();
reader.Close();
24C# Quelltext
Erläuterungen
8. Das Ergebnis wird mit Führungstext auf der Konsole ausgegeben:
Console.WriteLine("Ihr BMI: "+s);
9. Damit sich das Konsolenfenster nicht sofort schließt, wartet das Programm
auf einen Tastendruck:
Console.ReadKey();
25Noch nicht behandelt: asynchrone Zugriffe
Webservices sollten über synchrone Zugriffe angesprochen werden.
Ein asynchroner Zugriff kann insbesondere bei komplexeren
komponentenbasieren Anwendungssystemen die Robustheit erhöhen.
Asynchroner Zugriff auf einen Webservice über eine HTML-Seite mit
Javascript: AJAX.
Asynchroner Zugriff auf einen Webservice aus .NET: Webzugriff in einen
Arbeitsthread auslagern.
26Lesenswert
1. HTML lernen: de.selfhtml.org
2. PHP lernen: www.selfphp.de
3. Arbeiten mit der WebClient-Klasse: https://docs.microsoft.com/de-
de/dotnet/api/system.net.webclient?view=netframework-4.7.2
27(Verständnis-) Fragen
1. Warum kann es sinnvoll sein, Komponenten eines Anwendungssystems
auf Client-Rechner und Webservices zu verteilen?
2. Wie kann ein einfacher Webservice programmiert werden?
3. Was ist der Vorteil bei der Programmierung des Clients, wenn man
Webservices einsetzt?
4. Was ist der Unterschied zwischen synchronen und asynchronen Zugriffen
auf Webservices?

Webservices - was ist das und wie programmiert man sie

  • 1.
    1 Prof. Dr. rer.nat. Claus Brell, Wirtschaftsinformatik, Forschungsinstitut GEMIT (Geschäftsprozessmanagement & IT), Kompetenzzentrum CLAVIS (Informationssicherheit) Hochschule Niederrhein. Mail: claus.brell@hs-niederrhein,de , Twitter: https://twitter.com/clausbrell Web: https://cbrell.de , https://cbrell.de/naturwatch , http://claus-brell.de Webservices
  • 2.
    2Motivation: Warum Webservices? 1geheim: Algorithmen, die betriebswirtschaftliche wertvolles Know-How enthalten, können vor dem Nutzer versteckt werden. 2 billiger betreiben: Wartung, Leistungsskalierung und Rollout sind für Webservices einfach. 3 mehrfach nutzen: Webservices können ggf. in mehreren Anwendungssystemen gemeinsam verwendet werden. 4 robust: Die Verteilung komplexer Anwendungen auf lose gekoppelte Komponenten erhöht i.d.R. die Robustheit. 5 HR: Personen mit unterschiedlichen Kompetenzen können an der Entwicklung beteiligt werden.
  • 3.
    3z.B. AJAX: asynchroneKommunikation mit Webservices HTML Browser, Client CSS Webserver http Java- script jQuery PHP node.js Java- script .NETJava .NET JavaJEE REST SOAP TCP / IP Websockets
  • 4.
    4z.B. AJAX: asynchroneKommunikation mit Webservices Asynchronous JavaScript and XML (AJAX) ist ein Konzept der asynchronen Kommunikation zwischen Browser und Webserver über http. XML kann, muss aber nicht. Häufig: JSON. Häufig: Webservice in PHP (79 % aller Internetseiten) Client (Javasript-Programm im Browser) stellt eine Anfrage an den Webservice (PHP-Programm auf dem Webserver). Der Webservice „tut“ etwas (Berechnung oder Datenbankabfrage oder ...). Das Ergebnis wird an den Client zurück übertragen. Bei asynchroner Kommunikation: Client kann auf Eingaben reagieren, während auf Antwort gewartet wird.
  • 5.
    5 Java- script z.B. .NET Client:synchrone Kommunikation mit Webservices HTML Browser, Client CSS Webserver http jQuery PHP node.js Java- script .NETJava .NET JavaJEE REST SOAP TCP / IP Websockets
  • 6.
    6z.B. .NET Client:synchrone Kommunikation mit Webservices Der gleiche Webservice wie für AJAX kann von einem .NET Client genutzt werden. Der Client (.NET-Konsolen-Programm) stellt eine Anfrage an den Webservice (PHP-Programm auf dem Webserver). Der Webservice „tut“ etwas (Berechnung oder Datenbankabfrage oder ...). Das Ergebnis wird an den Client zurück übertragen. Bei synchroner Kommunikation: Client wartet auf Rückmeldung des Servers und reagiert nicht auf Eingaben.
  • 7.
    7Anwendungsbeispiel BMI-Rechner BMI (BodyMass Index) ist ein Indikator, ob eine Person normalgewichtig, untergewichtig oder übergewichtig ist. BMI wird berechnet aus der Körperlänge in m und dem Gewicht in kg mit BMI=mit Körpergewicht/(Körperlänge zum Quadrat) Typischerweise liegt der BMI zwischen 20 und 26. Im Anwendungsbeispiel wird die Berechnung im Webservice ausgeführt. Der Webservice wird in PHP programmiert. Verwendet wird der Webservice von einem HTML-Formular und einem .NET- Konsolenprogramm.
  • 8.
  • 9.
    9Beispiel BMI-Rechner-Webservice inPHP <?php $cm=$_GET['cm']; //1 $m=$cm/100; $kg=$_GET['kg']; $bmi=$kg/$m/$m; //2 echo $bmi; //3 ?> //1 In der URI übergebener Parameter steht in der Servervariablen $_GET. $_GET ist ein Array mit den Variablennamen als Keys. Der Inhalt wird einer „normale“ Variable $cm zugewiesen. //2 Der BMI wird berechnet mit Körpergewicht/Körperlänge^2 und der Variablen $bmi zugewiesen. // 3 mit echo wird der BMI zurückgegeben.
  • 10.
  • 11.
    11bmirechnerWS.php mit demBrowser testen bmirechnerWS.php benötigt eine Laufzeitumgebung. Ein Webserver mit PHP-Modul ist eine solche Laufzeitumgebung. bmirechnerWS.php muss in das Dokumentenverzeichnis des Webservers geladen werden. bmirechnerWS.php kann dann im Browser direkt getestet werden mit http://<serveradresse>/<verzeichnis>/bmirechnerWS.php?cm=190&kg=85 Die Aufrufparameter werden in der URI mit „cm=190“ festgelegt. Mehrere Parameter werden durch „&“ getrennt. Hinter dem Dateinamen des Webservices steht ein „?“ vor den Parametern.
  • 12.
    12bmirechnerWS.php mit einemHTML-Formular testen
  • 13.
    13bmirechnerWS.php mit einemHTML-Formular testen - Topologie Webserver bmiformular.htmlBrowser bmirechnerWS.php
  • 14.
    14bmirechnerWS.php mit einemHTML-Formular testen – Use Case Diagramm BMI-Rechner Gewicht und Größe eingeben BMI ablesen Nutzer
  • 15.
    15bmirechnerWS.php mit einemHTML-Formular testen – Ablauf aus Sicht des Nutzers (eEPK) Nutzer möchte BMI berechnen Seite aufrufen Seite geladen Daten eintragen, absenden Skript ist aufgerufen BMI berechnen, zurücksenden BMI ist berechnet Nutzer bmiformular.html Nutzer bmiformular.html Nutzer bmirechnerWS.php
  • 16.
    16bmirechnerWS.php mit einemHTML-Formular testen Der BMI-Rechner besteht aus zwei Komponenten: einem PHP-Skript und einer HTML-Seite, mit der das Skript bequem aufgerufen werden kann. Der Nutzer lädt die HTML-Datei von einem Webserver, trägt die Parameter Gewicht und Körpergröße in das HTML-Formular ein und drückt den „absenden“-Button. Dadurch wird das PHP-Skript aufgerufen und die Parameter an das PHP Skript übergeben. Das Skript berechnet den BMI. Die Ausgabe des Skriptes (der BMI als Fließkommazahl) wird an den Browser zurückübertragen und angezeigt.
  • 17.
    17Komponentenbasiertes System aus.NET-Client und PHP-Script – Topologie Webserver .NET Konsolen- programm bmirechnerWS.php
  • 18.
    18Komponentenbasiertes System aus.NET-Client und PHP-Script – Ansicht des Client-Bildschirms (Windows Konsole)
  • 19.
  • 20.
    20C# Quelltext Rahmen using System; usingSystem.Net; using System.IO; namespace bmiClient { class Program { static void Main(string[] args) { ..... Inhalt der Methode Main } } }
  • 21.
    21C# Quelltext Inhalt derMethode Main WebClient myClient = new WebClient(); string url = "https://cbreXXXXXXXXXXXXXXXX/bmirechnerWS.php?"; Console.WriteLine("BMI Rechner Clientrn##################"); Console.WriteLine("Gewicht in kg eingeben:"); string kg=Console.ReadLine(); Console.WriteLine("Größe in cm eingeben:"); string cm = Console.ReadLine(); string parameter="kg="+kg+"&cm="+cm; Stream data = myClient.OpenRead(url+parameter); StreamReader reader = new StreamReader(data); string s = reader.ReadToEnd(); data.Close(); reader.Close(); Console.WriteLine("Ihr BMI: "+s); Console.ReadKey();
  • 22.
    22C# Quelltext Erläuterungen Das Programmenthält nur den Code, der für das Funktionieren erforderlich ist. Es werden keine Fehler abgefangen. Der Zugriff auf den Webservice erfolgt synchron. 1. Ein Objekt für den Internetzugriff wird erzeugt: WebClient myClient = new WebClient(); Dazu wird der Namensraum using System.Net benötigt. 2. In der Variablen url wird die Internet-Adresse des Webservice gespeichert: string url = "https:// ....... 3. Programmzeilen der Form Console.WriteLine("BMI ..... geben etwas auf dem Bildschirm aus.
  • 23.
    23C# Quelltext Erläuterungen 4. MitReadLine werden zeilenweise Eingaben eingelesen: string kg=Console.ReadLine(); 5. Für die Verbindung zum Webservice wird ein Handle data benötigt und damit ein lesender Zugriff mit dem Handle reader eröffnet: Stream data = myClient.OpenRead(url+parameter); StreamReader reader = new StreamReader(data); 6. Die Rückgabe des Webservice wird in die Variable s gelesen: string s = reader.ReadToEnd(); 7. Alle Verbindungen werden wieder geschlossen: data.Close(); reader.Close();
  • 24.
    24C# Quelltext Erläuterungen 8. DasErgebnis wird mit Führungstext auf der Konsole ausgegeben: Console.WriteLine("Ihr BMI: "+s); 9. Damit sich das Konsolenfenster nicht sofort schließt, wartet das Programm auf einen Tastendruck: Console.ReadKey();
  • 25.
    25Noch nicht behandelt:asynchrone Zugriffe Webservices sollten über synchrone Zugriffe angesprochen werden. Ein asynchroner Zugriff kann insbesondere bei komplexeren komponentenbasieren Anwendungssystemen die Robustheit erhöhen. Asynchroner Zugriff auf einen Webservice über eine HTML-Seite mit Javascript: AJAX. Asynchroner Zugriff auf einen Webservice aus .NET: Webzugriff in einen Arbeitsthread auslagern.
  • 26.
    26Lesenswert 1. HTML lernen:de.selfhtml.org 2. PHP lernen: www.selfphp.de 3. Arbeiten mit der WebClient-Klasse: https://docs.microsoft.com/de- de/dotnet/api/system.net.webclient?view=netframework-4.7.2
  • 27.
    27(Verständnis-) Fragen 1. Warumkann es sinnvoll sein, Komponenten eines Anwendungssystems auf Client-Rechner und Webservices zu verteilen? 2. Wie kann ein einfacher Webservice programmiert werden? 3. Was ist der Vorteil bei der Programmierung des Clients, wenn man Webservices einsetzt? 4. Was ist der Unterschied zwischen synchronen und asynchronen Zugriffen auf Webservices?