Initial commit: IHK Ausbildung materials
This commit is contained in:
185
2-Ausbildungsjahr/LF8-Datenintegration/LF8-02-Schnittstellen.md
Normal file
185
2-Ausbildungsjahr/LF8-Datenintegration/LF8-02-Schnittstellen.md
Normal file
@@ -0,0 +1,185 @@
|
||||
# 8.2 Schnittstellen
|
||||
|
||||
## API-Typen
|
||||
|
||||
### REST (Representational State Transfer)
|
||||
|
||||
```
|
||||
REST-Prinzipien
|
||||
├── Ressourcen-orientiert
|
||||
├── Stateless
|
||||
├── Einheitliche Schnittstelle
|
||||
├── Client-Server
|
||||
└── Cache-fähig
|
||||
```
|
||||
|
||||
### REST-Endpunkte
|
||||
|
||||
```
|
||||
Beispiel: Benutzer-API
|
||||
|
||||
GET /api/benutzer → Alle Benutzer
|
||||
GET /api/benutzer/123 → Ein Benutzer
|
||||
POST /api/benutzer → Erstellen
|
||||
PUT /api/benutzer/123 → Aktualisieren
|
||||
DELETE /api/benutzer/123 → Löschen
|
||||
```
|
||||
|
||||
### REST-Beispiel
|
||||
|
||||
```javascript
|
||||
// Express.js Server
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
|
||||
app.get('/api/benutzer/:id', async (req, res) => {
|
||||
const benutzer = await findBenutzer(req.params.id);
|
||||
res.json(benutzer);
|
||||
});
|
||||
|
||||
app.post('/api/benutzer', async (req, res) => {
|
||||
const neuerBenutzer = await createBenutzer(req.body);
|
||||
res.status(201).json(neuerBenutzer);
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## SOAP (Simple Object Access Protocol)
|
||||
|
||||
### Unterschiede zu REST
|
||||
|
||||
| Kriterium | REST | SOAP |
|
||||
|-----------|------|------|
|
||||
| Format | JSON, XML | Nur XML |
|
||||
| Transport | HTTP | HTTP, SMTP |
|
||||
| Stateless | Ja | Optional |
|
||||
| Größe | Klein | Groß |
|
||||
|
||||
### SOAP-Beispiel
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
|
||||
<soap:Header/>
|
||||
<soap:Body>
|
||||
<GetUserRequest xmlns="http://beispiel.de/api">
|
||||
<UserId>123</UserId>
|
||||
</GetUserRequest>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## GraphQL
|
||||
|
||||
### Konzepte
|
||||
|
||||
```
|
||||
GraphQL - Besonderheiten
|
||||
├── Eine Anfrage, viele Daten
|
||||
├── Client definiert benötigte Felder
|
||||
├── Stark typisiert (Schema)
|
||||
└── Keine Over- oder Underfetching
|
||||
```
|
||||
|
||||
### GraphQL-Beispiel
|
||||
|
||||
```graphql
|
||||
# Anfrage
|
||||
query {
|
||||
user(id: "123") {
|
||||
name
|
||||
email
|
||||
orders {
|
||||
id
|
||||
total
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Antwort
|
||||
{
|
||||
"data": {
|
||||
"user": {
|
||||
"name": "Max",
|
||||
"email": "max@example.com",
|
||||
"orders": [
|
||||
{ "id": "1", "total": 99.99 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API-Design Best Practices
|
||||
|
||||
### URL-Design
|
||||
|
||||
```
|
||||
Richtlinien
|
||||
├── Ressourcen plural (benutzer nicht benutzer)
|
||||
├── Bindestrich für Wörter (benutzer-profil)
|
||||
├── Kleinbuchstaben
|
||||
├── Keine Verben im Pfad
|
||||
└── Query-Parameter für Filter
|
||||
```
|
||||
|
||||
### HTTP-Statuscodes
|
||||
|
||||
| Code | Bedeutung | Verwendung |
|
||||
|------|-----------|------------|
|
||||
| 200 | OK | Erfolgreich |
|
||||
| 201 | Created | Erstellt |
|
||||
| 400 | Bad Request | Ungültige Anfrage |
|
||||
| 401 | Unauthorized | Nicht angemeldet |
|
||||
| 404 | Not Found | Nicht gefunden |
|
||||
| 500 | Server Error | Fehler |
|
||||
|
||||
---
|
||||
|
||||
## API-Dokumentation
|
||||
|
||||
### OpenAPI (Swagger)
|
||||
|
||||
```yaml
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: Meine API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/benutzer:
|
||||
get:
|
||||
summary: Alle Benutzer
|
||||
responses:
|
||||
'200':
|
||||
description: Erfolgreich
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Benutzer'
|
||||
```
|
||||
|
||||
### Tools
|
||||
|
||||
| Tool | Beschreibung |
|
||||
|------|-------------|
|
||||
| Swagger UI | Interaktive Dokumentation |
|
||||
| Postman | API-Testing |
|
||||
| Insomnia | API-Client |
|
||||
|
||||
---
|
||||
|
||||
## Querverweise
|
||||
|
||||
- [[LF8-01-Datenquellen|Zurück: Datenquellen]]
|
||||
- [[LF8-03-Datenformate|Nächstes Thema: Datenformate]]
|
||||
|
||||
---
|
||||
|
||||
*Stand: 2024*
|
||||
Reference in New Issue
Block a user