Webservices zu programmieren kann ganz einfach sein. Und hat viele Vorteile gegenüber dem Programmieren "dicker" Programmpakete. Ohne Webservices wäre keine moderne Microservice-Architektur möglich. Welche Vorteile Webservices haben und wie man Webservices programmieren kann, zeigen diese Folien am Beispiel eines kleinen BMI-Rechners. BMI (Body Mass Index) ist eine Maßzahl aus dem eigenen Gewicht und der eigenen Körperlänge. BMI sagt etwas darüber aus, ob man normalgewichtig oder adipös ist.
Ein Beispiel eine Webservice-Architektur zu "nachprogrammieren" finden Sie bei dem Naturschutzprojekt:
https://cbrell.de/naturwatch/picam-einfaches-system-fuer-den-ersten-test-einer-webbasierten-raspberry-pi-kamera-naturwatch-lite/
Die Folien sind als Power Point downloadbar und dürfen "raub"kopiert werden. Wenn die eine oder andere Folie hilfreich ist, würde ich mich über feedback freuen.
Description in english:
Programming web services can be very easy. And has many advantages over programming "thicker" packages. Without web services, no modern microservice architecture would be possible. The advantages of web services and how to program web services are shown in these slides using the example of a small BMI computer. BMI (Body Mass Index) is a measure of your own weight and your own body length. BMI says something about being a normal weight or being obese.
An example of "reprogramming" a web service architecture can be found in the nature conservation project:
https://cbrell.de/naturwatch/picam-einfaches-system-fuer-den-ersten-test-einer-webbasierten-raspberry-pi-kamera-naturwatch-lite/
The slides are downloadable as Power Point and may be copied "robbery".
2. 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.
3. 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
4. 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. 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 (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.
9. 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.
11. 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.
13. 13bmirechnerWS.php mit einem HTML-Formular testen - Topologie
Webserver
bmiformular.htmlBrowser
bmirechnerWS.php
14. 14bmirechnerWS.php mit einem HTML-Formular testen –
Use Case Diagramm
BMI-Rechner
Gewicht und Größe
eingeben
BMI ablesen
Nutzer
15. 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
16. 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.
20. 20C# Quelltext
Rahmen
using System;
using System.Net;
using System.IO;
namespace bmiClient
{
class Program
{
static void Main(string[] args)
{
..... Inhalt der Methode Main
}
}
}
21. 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();
22. 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.
23. 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();
24. 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();
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. 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?