Files
ihk-ausbildung/2-Ausbildungsjahr/LF8-Datenintegration/LF8-02-Schnittstellen.md

3.2 KiB

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

// 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 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

# 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)

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


Stand: 2024