From bc232f56770811536359de99447e1083d968cbe5 Mon Sep 17 00:00:00 2001
From: Tobias Jordine <jordine@hdm-stuttgart.de>
Date: Sun, 22 May 2022 21:51:05 +0200
Subject: [PATCH] Vorbereitung Schnittstellen

---
 website/assignments/Schnittstellen.md    |  19 ++
 website/assignments/bewertungsbogen.xlsx | Bin 19115 -> 19294 bytes
 website/index.html                       |   3 +
 website/lecturenotes/20220523.md         |   7 +
 website/schnittstellen.html              | 328 +++++++++++++++++++++++
 5 files changed, 357 insertions(+)
 create mode 100644 website/assignments/Schnittstellen.md
 create mode 100644 website/lecturenotes/20220523.md
 create mode 100644 website/schnittstellen.html

diff --git a/website/assignments/Schnittstellen.md b/website/assignments/Schnittstellen.md
new file mode 100644
index 0000000..a355973
--- /dev/null
+++ b/website/assignments/Schnittstellen.md
@@ -0,0 +1,19 @@
+# Übungen Software-Entwicklung 3: Schnittstellen (Vorläufig)
+
+## Ausgangslage
+Nachdem wir besprochen haben, wie Sie Ihre Programmdaten persistent speichern können, können Sie nun Ihrem Projekt Schnittstellen hinzufügen, sodass Sie Daten nach "außen" zur Verfügung stellen bzw. von dort empfangen können.
+
+## Aufgabe
+* Entscheiden Sie sich, welche Schnittstellenart (synchron/asynchron) für Ihr Projekt am besten geeignet ist.
+* Erstellen Sie eine Komponente, die für die Außenschnittstelle Ihrer Anwendung zuständig ist. 
+  * Welche Daten werden bereitgestellt? 
+  * Welche Daten können modifiziert werden?
+  * Welche Daten können gesendet werden?
+* Erstellen Sie die geeigneten `CRUD`-Operationen für Ihre Schnittstelle.
+* Sofern Sie sich für eine REST-Schnittstelle entscheiden: Denken Sie an die korrekte Wahl der [HTTP-Verben](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) und [HTTP-Status-Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status).
+
+## Tipps
+* Für REST-APIs: Die Verwendung eines REST-Clients (z.B. Browser-Extensions, [Postman](https://www.postman.com), [Swagger Editor](https://editor.swagger.io), [IntelliJ](https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html#converting-curl-requests)) macht das Testen der Schnittstelle einfacher.
+
+## Ziele
+* Ihr Projekt verfügt über eine gekapselte Schnittstellenschicht, mit der von außen auf Ihr Programm zugegriffen werden kann.
\ No newline at end of file
diff --git a/website/assignments/bewertungsbogen.xlsx b/website/assignments/bewertungsbogen.xlsx
index 6c9225c770a67f56f72236a67395e0340e0678da..677dfe51b40e5f9240dd553c1f37979203a92a98 100644
GIT binary patch
delta 4125
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
H{+a&=&)UBj

delta 3908
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
C<x*<^

diff --git a/website/index.html b/website/index.html
index 2f26f96..7ddda93 100644
--- a/website/index.html
+++ b/website/index.html
@@ -17,6 +17,7 @@
         <li><a href="maven-testing.html" target="_blank">Maven & Testing</a></li>
         <li><a href="container-ci-cd.html" target="_blank">Container & CI/CD</a></li>
         <li><a href="sql-nosql.html" target="_blank">SQL, NoSQL</a></li>
+        <li><a href="schnittstellen.html" target="_blank">Schnittstellen</a></li>
     </ul>
 
     <h3>Vorlesungnotizen</h3>
@@ -27,6 +28,7 @@
         <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/lecturenotes/20220411.md" target="_blank">Vorlesungsnotizen - 11.04.2022</a></li>
         <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/lecturenotes/20220509.md" target="_blank">Vorlesungsnotizen - 09.05.2022</a></li>
         <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/lecturenotes/20220516.md" target="_blank">Vorlesungsnotizen - 16.05.2022</a></li>
+        <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/lecturenotes/20220523.md" target="_blank">Vorlesungsnotizen - 23.05.2022</a></li>
     </ul>
 
     <h3>Projekt</h3>
@@ -42,6 +44,7 @@
         <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/assignments/Maven-Testing.md" target="_blank">Ãœbung: Build Management & Testing</a> </li>
         <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/assignments/Container-CI_CD.md" target="_blank">Ãœbung: Container & CI/CD</a> </li>
         <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/assignments/sql-nosql.md" target="_blank">Ãœbung: SQL, NoSQL</a> </li>
+        <li><a href="https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022vorlesung/-/blob/main/website/assignments/Schnittstellen.md" target="_blank">Ãœbung: Schnittstellen</a> </li>
     </ul>
 
     <h3>Organisatorisches</h3>
diff --git a/website/lecturenotes/20220523.md b/website/lecturenotes/20220523.md
new file mode 100644
index 0000000..897fbb3
--- /dev/null
+++ b/website/lecturenotes/20220523.md
@@ -0,0 +1,7 @@
+# Vorlesungsnotizen - 23.05.2022
+
+## SQL
+
+## NoSQL
+
+## Schnittstellen
\ No newline at end of file
diff --git a/website/schnittstellen.html b/website/schnittstellen.html
new file mode 100644
index 0000000..80cb67c
--- /dev/null
+++ b/website/schnittstellen.html
@@ -0,0 +1,328 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Schnittstellen</title>
+    <meta charset="utf-8">
+      <link href="css/hdm.css" rel="stylesheet"></link>
+      <style>
+          /* yanone-kaffeesatz-regular - latin */
+          @font-face {
+              font-family: 'Yanone Kaffeesatz';
+              font-style: normal;
+              font-weight: 400;
+              src: url('fonts/yanone-kaffeesatz-v22-latin-regular.eot'); /* IE9 Compat Modes */
+              src: local(''),
+              url('fonts/yanone-kaffeesatz-v22-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+              url('fonts/yanone-kaffeesatz-v22-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
+              url('fonts/yanone-kaffeesatz-v22-latin-regular.woff') format('woff'), /* Modern Browsers */
+              url('fonts/yanone-kaffeesatz-v22-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
+              url('fonts/yanone-kaffeesatz-v22-latin-regular.svg#YanoneKaffeesatz') format('svg'); /* Legacy iOS */
+          }
+          /* noto-serif-regular - latin */
+          @font-face {
+              font-family: 'Noto Serif';
+              font-style: normal;
+              font-weight: 400;
+              src: url('fonts/noto-serif-v20-latin-regular.eot'); /* IE9 Compat Modes */
+              src: local(''),
+              url('fonts/noto-serif-v20-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+              url('fonts/noto-serif-v20-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
+              url('fonts/noto-serif-v20-latin-regular.woff') format('woff'), /* Modern Browsers */
+              url('fonts/noto-serif-v20-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
+              url('fonts/noto-serif-v20-latin-regular.svg#NotoSerif') format('svg'); /* Legacy iOS */
+          }
+          /* ubuntu-mono-regular - latin */
+          @font-face {
+              font-family: 'Ubuntu Mono';
+              font-style: normal;
+              font-weight: 400;
+              src: url('fonts/ubuntu-mono-v14-latin-regular.eot'); /* IE9 Compat Modes */
+              src: local(''),
+              url('fonts/ubuntu-mono-v14-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+              url('fonts/ubuntu-mono-v14-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
+              url('fonts/ubuntu-mono-v14-latin-regular.woff') format('woff'), /* Modern Browsers */
+              url('fonts/ubuntu-mono-v14-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
+              url('fonts/ubuntu-mono-v14-latin-regular.svg#UbuntuMono') format('svg'); /* Legacy iOS */
+          }
+          /* ubuntu-mono-italic - latin */
+          @font-face {
+              font-family: 'Ubuntu Mono';
+              font-style: italic;
+              font-weight: 400;
+              src: url('fonts/ubuntu-mono-v14-latin-italic.eot'); /* IE9 Compat Modes */
+              src: local(''),
+              url('fonts/ubuntu-mono-v14-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+              url('fonts/ubuntu-mono-v14-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */
+              url('fonts/ubuntu-mono-v14-latin-italic.woff') format('woff'), /* Modern Browsers */
+              url('fonts/ubuntu-mono-v14-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */
+              url('fonts/ubuntu-mono-v14-latin-italic.svg#UbuntuMono') format('svg'); /* Legacy iOS */
+          }
+          /* ubuntu-mono-700 - latin */
+          @font-face {
+              font-family: 'Ubuntu Mono';
+              font-style: normal;
+              font-weight: 700;
+              src: url('fonts/ubuntu-mono-v14-latin-700.eot'); /* IE9 Compat Modes */
+              src: local(''),
+              url('fonts/ubuntu-mono-v14-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+              url('fonts/ubuntu-mono-v14-latin-700.woff2') format('woff2'), /* Super Modern Browsers */
+              url('fonts/ubuntu-mono-v14-latin-700.woff') format('woff'), /* Modern Browsers */
+              url('fonts/ubuntu-mono-v14-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */
+              url('fonts/ubuntu-mono-v14-latin-700.svg#UbuntuMono') format('svg'); /* Legacy iOS */
+          }
+
+          body { font-family: 'Noto Serif'; }
+          h1, h2, h3 {
+              font-family: 'Yanone Kaffeesatz';
+              font-weight: normal;
+          }
+          .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
+      </style>
+  </head>
+  <body>
+    <textarea id="source">
+
+class: center, middle, first
+
+# Software-Entwicklung 3
+
+## Schnittstellen
+
+---
+
+# Agenda
+
+1. Recap
+2. Synchrone Schnittstellen
+3. Asynchrone Schnittstellen
+
+---
+
+# Recap: Was haben wir in der letzten Vorlesung besprochen?
+
+* SQL
+* NoSQL
+
+> Blick ins [Repository](https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022projekt)
+
+---
+class: center, middle
+# Welche Formen der Kommunikationsbeziehungen kennen Sie in der (objektorientierten) Programmierung?
+
+---
+# Kommunikationsbeziehungen
+
+Beispiele:
+
+* lokale Schnittstellen
+    * API (lokal)
+* Remote Schnittstellen
+  * RPC
+  * RESTful-APIs
+  * SOAP-APIs
+  * Messaging-APIs/Event-based APIs
+
+---
+# Gruppierung der Schnittstellenarten
+
+## Synchrone Schnittstellen
+
+## Asynchrone Schnittstellen
+
+---
+# Ablauf synchrone Schnittstelle (vereinfacht)
+
+## Sender
+1. Verfassen einer Nachricht
+2. Verpacken der Nachricht (_Marshalling_)
+3. Absenden der Nachricht
+4. _Warten auf Antwort_
+5. Empfangen der Antwort-Nachricht
+6. Auspacken der Antwort-Nachricht
+7. Verarbeiten der Antwort-Nachricht
+
+---
+# Ablauf synchrone Schnittstelle (vereinfacht)
+
+## Empfänger
+1. _Warten auf eingehende Nachrichten_
+2. Empfangen der Nachricht
+3. Auspacken der Nachricht
+4. Verarbeiten der Nachricht
+5. Verfassen der Antwort-Nachricht
+6. Verpacken der Antwort-Nachricht
+7. Verschicken der Antwort-Nachricht
+
+---
+# Beispiele für synchrone Kommunikation
+
+* HTTP
+* SOAP
+* GraphQL
+* RPC (z.B. RMI, gRPC)
+* REST
+
+---
+# Was ist REST?
+
+> REST: Representational State Transfer
+
+Softwarearchitekturstil
+
+---
+# Grundprinzipien
+
+_nach [Wikipedia, 2022](https://de.wikipedia.org/wiki/Representational_State_Transfer)_
+
+* Client/Server
+* Zustandslosigkeit
+* Caching
+* Einheitliche Schnittstelle
+  * Adressierbarkeit von Ressourcen
+  * Repräsentationen zur Veränderung von Ressourcen
+  * Selbstbeschreibende Nachrichten
+  * „Hypermedia as the Engine of Application State“ (HATEOAS)
+* Mehrschichtige Systeme
+* Code on Demand (optional)
+---
+# REST-URIs
+
+> URI: Uniform Resource Identifier
+
+Mögliche URI-Muster:
+* `<protocol>://<service-name>/<resource-type>/<resource-id>`
+* `<resource-type>/<resource-id>`
+* `<protocol>://<service-name>/<resource-type>/<resource-id>/<resource-details>`
+* `<protocol>://<service-name>/<api-version>/<resource-type>/<resource-id>`
+
+Beispiele:
+* `https://music-mamager.app/songs/112233`
+* `https://music-mamager.app/songs/112233/play`
+* `https://music-mamager.app/songs/112233/artist`
+* `/v3/songs/112233/artist/json`
+
+---
+# REST im Einsatz
+
+* Verwendung auf Basis von HTTP/HTTPS
+* Nutzen der [HTTP-Verben](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
+  * `POST`
+  * `GET`
+  * `DELETE`
+  * `PUT` (entspricht einem Update)
+  * ...
+* Nutzen der HTTP-Status-Codes für Antworten
+  * [Ãœbersicht der HTTP-Status-Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)
+---
+# REST-APIs mit OpenAPI 3/Swagger
+
+* API-Spezifikation 
+* API-Dokumentation
+* API-Generierung
+* Testumgebung
+
+[Petstore Demo Projekt](https://petstore.swagger.io/)
+
+---
+# REST mit Spring Boot (I)
+
+* Alternative zu `JAX-WS`
+* Maven-Dependency hinzufügen (`spring-boot-starter-web`)
+
+```xml
+<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-web</artifactId>
+    <version>2.7.0</version>
+</dependency>
+```
+* Erstellen einer Klasse, die mit `@RestController` annotiert wird
+* Annotieren der Methoden mit geeigneter HTTP-Verb Annotation (z.B. `@GetMapping`) und zuweisen des Resource-Pfads (z.B. `/songs`)
+* Mapping der URL-Parameter zu Java-Parametern mit der `@RequestParam(value = "name", defaultValue = "Song 2")`
+
+---
+# REST mit Spring Boot (II)
+
+Start der Anwendung:
+
+```java
+@SpringBootApplication
+public class RestServiceApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(RestServiceApplication.class, args);
+	}
+
+}
+```
+---
+# REST mit Spring Boot (III)
+
+_Quelle: [spring.io, "Building a RESTful Web Service", 2022](https://spring.io/guides/gs/rest-service/)_
+
+```java
+package com.example.restservice;
+
+public class Greeting {
+
+	private final long id;
+	private final String content;
+
+	public Greeting(long id, String content) {
+		this.id = id;
+		this.content = content;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public String getContent() {
+		return content;
+	}
+}
+```
+
+---
+# REST mit Spring Boot (IV)
+
+```java
+package com.example.restservice;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class GreetingController {
+
+	private static final String template = "Hello, %s!";
+	private final AtomicLong counter = new AtomicLong();
+
+	@GetMapping("/greeting")
+	public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
+		return new Greeting(counter.incrementAndGet(), String.format(template, name));
+	}
+}
+```
+---
+# REST-Demo im Projekt
+
+> Blick ins [Repository](https://gitlab.mi.hdm-stuttgart.de/jordine/se3sose2022projekt)
+
+---
+class: center, middle
+
+# Asynchrone Kommunikationsbeziehungen
+
+
+    </textarea>
+    <script src="js/remark.min.js">
+    </script>
+    <script>
+      var slideshow = remark.create();
+    </script>
+  </body>
+</html>
\ No newline at end of file
-- 
GitLab