|
| 1 | +# 📚 IBM MQ Integration API Documentation |
| 2 | + |
| 3 | +Diese Anwendung bietet sowohl **synchrone REST APIs** als auch **asynchrone Message-Flows** für die IBM MQ Integration. Beide API-Typen sind vollständig spezifiziert und dokumentiert. |
| 4 | + |
| 5 | +## 🚀 Schnellstart |
| 6 | + |
| 7 | +Nach dem Start der Anwendung sind die API-Dokumentationen verfügbar unter: |
| 8 | + |
| 9 | +### 📊 REST API Dokumentation (OpenAPI 3.0) |
| 10 | +- **📱 Swagger UI**: [http://localhost:8080/api/docs/swagger-ui](http://localhost:8080/api/docs/swagger-ui) |
| 11 | +- **📄 OpenAPI YAML**: [http://localhost:8080/api/docs/openapi.yaml](http://localhost:8080/api/docs/openapi.yaml) |
| 12 | +- **📋 OpenAPI JSON Info**: [http://localhost:8080/api/docs/openapi.json](http://localhost:8080/api/docs/openapi.json) |
| 13 | + |
| 14 | +### ⚡ Message Flows Dokumentation (AsyncAPI 3.0) |
| 15 | +- **🎨 AsyncAPI Studio**: [http://localhost:8080/api/docs/asyncapi-studio](http://localhost:8080/api/docs/asyncapi-studio) |
| 16 | +- **📄 AsyncAPI YAML**: [http://localhost:8080/api/docs/asyncapi.yaml](http://localhost:8080/api/docs/asyncapi.yaml) |
| 17 | +- **📋 AsyncAPI JSON Info**: [http://localhost:8080/api/docs/asyncapi.json](http://localhost:8080/api/docs/asyncapi.json) |
| 18 | + |
| 19 | +### 🏠 Dokumentations-Übersicht |
| 20 | +- **📖 Alle Dokumentationen**: [http://localhost:8080/api/docs/](http://localhost:8080/api/docs/) |
| 21 | + |
| 22 | +## 📖 API-Übersicht |
| 23 | + |
| 24 | +### REST APIs (OpenAPI) |
| 25 | + |
| 26 | +Die REST APIs bieten synchrone HTTP-Endpunkte für: |
| 27 | + |
| 28 | +#### 🔄 Message Operations (`/api/mq`) |
| 29 | +- `POST /api/mq/send` - Nachricht an Standard-Queue senden |
| 30 | +- `POST /api/mq/send/{queue}` - Nachricht an spezifische Queue senden |
| 31 | +- `GET /api/mq/receive` - Nachricht von Standard-Queue empfangen |
| 32 | +- `GET /api/mq/receive/{queue}` - Nachricht von spezifischer Queue empfangen |
| 33 | +- `POST /api/mq/sendreceive` - Request-Response Pattern (Nachricht senden und auf Antwort warten) |
| 34 | +- `GET /api/mq/health` - IBM MQ Service Health Check |
| 35 | + |
| 36 | +#### 📋 Message Repository (`/api/messages`) |
| 37 | +- `GET /api/messages` - Alle Nachrichten abrufen |
| 38 | +- `GET /api/messages/{id}` - Spezifische Nachricht abrufen |
| 39 | +- `DELETE /api/messages/{id}` - Nachricht löschen |
| 40 | +- `GET /api/messages/by-status/{status}` - Nachrichten nach Status filtern |
| 41 | +- `GET /api/messages/by-queue/{queueName}` - Nachrichten nach Queue filtern |
| 42 | +- `GET /api/messages/count/by-status/{status}` - Nachrichten zählen nach Status |
| 43 | +- `POST /api/messages/cleanup` - Alte Nachrichten aufräumen |
| 44 | +- `GET /api/messages/health` - Repository Health Check |
| 45 | + |
| 46 | +#### ⚙️ Batch Jobs (`/api/batch`) |
| 47 | +- Batch-Job Management und Monitoring |
| 48 | + |
| 49 | +#### 📊 Metrics (`/api/metrics`) |
| 50 | +- Performance- und Monitoring-Daten |
| 51 | + |
| 52 | +### Message Flows (AsyncAPI) |
| 53 | + |
| 54 | +Die AsyncAPI-Spezifikation dokumentiert asynchrone Message-Patterns: |
| 55 | + |
| 56 | +#### 📨 Queue Channels |
| 57 | +- **Request Queue** (`DEV.QUEUE.1`) - Eingehende Nachrichten |
| 58 | +- **Response Queue** (`DEV.QUEUE.2`) - Ausgehende Antworten |
| 59 | +- **Batch Processing Queue** (`DEV.BATCH.QUEUE`) - Batch-Verarbeitung |
| 60 | +- **Dead Letter Queue** (`DEV.QUEUE.DLQ`) - Fehlgeschlagene Nachrichten |
| 61 | +- **Backout Queue** (`DEV.QUEUE.1.BACKOUT`) - Backout-Nachrichten |
| 62 | +- **Health Check Queue** (`DEV.HEALTH.QUEUE`) - Health Monitoring |
| 63 | + |
| 64 | +#### ⚡ Operations |
| 65 | +- **Send Message** - Nachricht senden |
| 66 | +- **Receive Message** - Nachricht empfangen |
| 67 | +- **Send Response** - Antwort senden |
| 68 | +- **Process Batch Messages** - Batch-Verarbeitung |
| 69 | +- **Handle Failed Messages** - Fehlerbehandlung |
| 70 | +- **Handle Backout Messages** - Backout-Handling |
| 71 | +- **Health Check** - Gesundheitsprüfung |
| 72 | + |
| 73 | +#### 📋 Message Types |
| 74 | +- **Incoming Messages** - Eingehende Textnachrichten |
| 75 | +- **Outgoing Messages** - Verarbeitete Nachrichten |
| 76 | +- **Response Messages** - Antwort-Nachrichten mit Correlation ID |
| 77 | +- **Batch Messages** - Batch-Verarbeitungs-Nachrichten |
| 78 | +- **Failed Messages** - Fehlgeschlagene Nachrichten mit Fehlerinformationen |
| 79 | +- **Backout Messages** - Backout-Nachrichten |
| 80 | +- **Health Messages** - Health-Check-Nachrichten |
| 81 | + |
| 82 | +## 🔧 Verwendung der Spezifikationen |
| 83 | + |
| 84 | +### OpenAPI/Swagger UI verwenden |
| 85 | + |
| 86 | +1. Öffnen Sie [http://localhost:8080/api/docs/swagger-ui](http://localhost:8080/api/docs/swagger-ui) |
| 87 | +2. Erkunden Sie die verfügbaren Endpunkte |
| 88 | +3. Testen Sie APIs direkt in der Benutzeroberfläche |
| 89 | +4. Exportieren Sie Client-Code für verschiedene Sprachen |
| 90 | + |
| 91 | +### AsyncAPI Studio verwenden |
| 92 | + |
| 93 | +1. Öffnen Sie [http://localhost:8080/api/docs/asyncapi-studio](http://localhost:8080/api/docs/asyncapi-studio) |
| 94 | +2. Klicken Sie auf "Open AsyncAPI Studio" |
| 95 | +3. Fügen Sie die URL ein: `http://localhost:8080/api/docs/asyncapi.yaml` |
| 96 | +4. Erkunden Sie die Message-Flows und Queue-Strukturen |
| 97 | + |
| 98 | +### Spezifikationen herunterladen |
| 99 | + |
| 100 | +```bash |
| 101 | +# OpenAPI YAML herunterladen |
| 102 | +curl -o openapi.yaml http://localhost:8080/api/docs/openapi.yaml |
| 103 | + |
| 104 | +# AsyncAPI YAML herunterladen |
| 105 | +curl -o asyncapi.yaml http://localhost:8080/api/docs/asyncapi.yaml |
| 106 | +``` |
| 107 | + |
| 108 | +## 🛠️ Code-Generierung |
| 109 | + |
| 110 | +### Client-Code aus OpenAPI generieren |
| 111 | + |
| 112 | +```bash |
| 113 | +# JavaScript/TypeScript Client |
| 114 | +npx @openapitools/openapi-generator-cli generate \ |
| 115 | + -i http://localhost:8080/api/docs/openapi.yaml \ |
| 116 | + -g typescript-fetch \ |
| 117 | + -o ./generated-client |
| 118 | + |
| 119 | +# Java Client |
| 120 | +openapi-generator generate \ |
| 121 | + -i http://localhost:8080/api/docs/openapi.yaml \ |
| 122 | + -g java \ |
| 123 | + -o ./java-client |
| 124 | + |
| 125 | +# Python Client |
| 126 | +openapi-generator generate \ |
| 127 | + -i http://localhost:8080/api/docs/openapi.yaml \ |
| 128 | + -g python \ |
| 129 | + -o ./python-client |
| 130 | +``` |
| 131 | + |
| 132 | +### Message Schemas aus AsyncAPI generieren |
| 133 | + |
| 134 | +```bash |
| 135 | +# JSON Schema für Messages generieren |
| 136 | +asyncapi generate models typescript ./asyncapi.yaml |
| 137 | + |
| 138 | +# Java POJOs für Messages generieren |
| 139 | +asyncapi generate models java ./asyncapi.yaml |
| 140 | +``` |
| 141 | + |
| 142 | +## 📊 Beispiele |
| 143 | + |
| 144 | +### REST API Beispiele |
| 145 | + |
| 146 | +```bash |
| 147 | +# Nachricht senden |
| 148 | +curl -X POST http://localhost:8080/api/mq/send \ |
| 149 | + -H "Content-Type: text/plain" \ |
| 150 | + -d "Hello World" |
| 151 | + |
| 152 | +# Nachricht empfangen |
| 153 | +curl http://localhost:8080/api/mq/receive |
| 154 | + |
| 155 | +# Request-Response Pattern |
| 156 | +curl -X POST http://localhost:8080/api/mq/sendreceive \ |
| 157 | + -H "Content-Type: text/plain" \ |
| 158 | + -d "Request message" |
| 159 | + |
| 160 | +# Nachrichten nach Status abrufen |
| 161 | +curl http://localhost:8080/api/messages/by-status/PROCESSED |
| 162 | + |
| 163 | +# Health Check |
| 164 | +curl http://localhost:8080/api/mq/health |
| 165 | +``` |
| 166 | + |
| 167 | +### Message Flow Patterns |
| 168 | + |
| 169 | +Die AsyncAPI-Spezifikation dokumentiert folgende Patterns: |
| 170 | + |
| 171 | +1. **Fire-and-Forget**: Nachricht senden ohne Antwort zu erwarten |
| 172 | +2. **Request-Response**: Nachricht senden und auf korrelierende Antwort warten |
| 173 | +3. **Batch Processing**: Nachrichten in Chunks verarbeiten |
| 174 | +4. **Error Handling**: Fehlgeschlagene Nachrichten in Dead Letter Queue |
| 175 | +5. **Health Monitoring**: Regelmäßige Health Checks über Message Queue |
| 176 | + |
| 177 | +## 🔍 Entwicklung und Erweiterung |
| 178 | + |
| 179 | +### Neue REST Endpoints hinzufügen |
| 180 | + |
| 181 | +1. Annotieren Sie Ihre REST-Klassen mit OpenAPI-Annotationen: |
| 182 | +```java |
| 183 | +@Operation(summary = "Neue Operation", description = "Beschreibung") |
| 184 | +@ApiResponse(responseCode = "200", description = "Erfolg") |
| 185 | +public Response newEndpoint() { ... } |
| 186 | +``` |
| 187 | + |
| 188 | +2. Die OpenAPI-Spezifikation wird automatisch aktualisiert |
| 189 | + |
| 190 | +### Neue Message Flows dokumentieren |
| 191 | + |
| 192 | +1. Erweitern Sie die `asyncapi.yaml` Datei um neue Channels und Operations |
| 193 | +2. Definieren Sie neue Message-Schemas in der `components.schemas` Sektion |
| 194 | +3. Aktualisieren Sie die Dokumentation |
| 195 | + |
| 196 | +### Automatische Generierung |
| 197 | + |
| 198 | +Die Spezifikationen werden automatisch aus folgenden Quellen generiert: |
| 199 | + |
| 200 | +- **OpenAPI**: Jakarta REST Annotationen + MicroProfile OpenAPI Annotationen |
| 201 | +- **AsyncAPI**: Manuelle YAML-Datei (kann durch Code-Scanner erweitert werden) |
| 202 | + |
| 203 | +## 🔒 Sicherheit |
| 204 | + |
| 205 | +### OpenAPI Security |
| 206 | + |
| 207 | +Die REST APIs unterstützen: |
| 208 | +- **Bearer Token Authentication** (JWT) |
| 209 | +- Konfigurierbar über `@SecurityRequirement` Annotationen |
| 210 | + |
| 211 | +### AsyncAPI Security |
| 212 | + |
| 213 | +IBM MQ unterstützt: |
| 214 | +- **Basic Authentication** (Username/Password) |
| 215 | +- **SSL/TLS** mit Zertifikaten |
| 216 | +- **Channel-basierte Zugriffskontrolle** |
| 217 | + |
| 218 | +## 📱 Integration in IDEs |
| 219 | + |
| 220 | +### VS Code |
| 221 | +- Installieren Sie die "OpenAPI (Swagger) Editor" Extension |
| 222 | +- Öffnen Sie die `openapi.yaml` Datei für Syntax-Highlighting und Validierung |
| 223 | + |
| 224 | +### IntelliJ IDEA |
| 225 | +- Installieren Sie das "OpenAPI Specifications" Plugin |
| 226 | +- Importieren Sie die Spezifikation für Auto-Completion |
| 227 | + |
| 228 | +### Postman |
| 229 | +- Importieren Sie die OpenAPI-Spezifikation direkt in Postman |
| 230 | +- Automatische Collection-Generierung mit allen Endpunkten |
| 231 | + |
| 232 | +## 🤝 Best Practices |
| 233 | + |
| 234 | +### OpenAPI |
| 235 | +- Verwenden Sie aussagekräftige `summary` und `description` Felder |
| 236 | +- Definieren Sie Beispiele für Request/Response Bodies |
| 237 | +- Gruppieren Sie verwandte Endpunkte mit `tags` |
| 238 | +- Dokumentieren Sie alle Error Codes |
| 239 | + |
| 240 | +### AsyncAPI |
| 241 | +- Definieren Sie klare Channel-Namen und Beschreibungen |
| 242 | +- Nutzen Sie Message Traits für wiederverwendbare Patterns |
| 243 | +- Dokumentieren Sie Message-Formate und Schemas |
| 244 | +- Beschreiben Sie Operation-Binding-Details |
| 245 | + |
| 246 | +## 🎯 Weiterführende Ressourcen |
| 247 | + |
| 248 | +- **OpenAPI Specification**: https://spec.openapis.org/oas/v3.0.3 |
| 249 | +- **AsyncAPI Specification**: https://www.asyncapi.com/docs/specifications/v3.0.0 |
| 250 | +- **MicroProfile OpenAPI**: https://github.com/eclipse/microprofile-open-api |
| 251 | +- **Swagger UI**: https://swagger.io/tools/swagger-ui/ |
| 252 | +- **AsyncAPI Studio**: https://studio.asyncapi.com/ |
| 253 | + |
| 254 | +## ⚡ Troubleshooting |
| 255 | + |
| 256 | +### OpenAPI UI lädt nicht |
| 257 | +- Prüfen Sie, ob die Anwendung läuft: http://localhost:8080/api/docs/openapi.yaml |
| 258 | +- Überprüfen Sie Browser-Konsole auf JavaScript-Fehler |
| 259 | + |
| 260 | +### AsyncAPI YAML nicht verfügbar |
| 261 | +- Überprüfen Sie, ob die Datei im Classpath liegt: `src/main/resources/asyncapi.yaml` |
| 262 | +- Prüfen Sie Anwendungslogs auf Fehler beim Laden der Ressource |
| 263 | + |
| 264 | +### Message-Flow Dokumentation unvollständig |
| 265 | +- Erweitern Sie die AsyncAPI-Spezifikation um fehlende Channels |
| 266 | +- Fügen Sie neue Message-Schemas in der `components` Sektion hinzu |
0 commit comments