Skip to content

Commit cae0ded

Browse files
committed
feat: add field-level error handling to HttpClientException
- Extended HttpClientException to capture and expose field-level validation errors from PROFFIX API responses - Added methods to check for, retrieve, and format field-specific error details (hasFieldErrors, getFieldErrors, getDetailedMessage) - Updated README with comprehensive error handling examples and documentation
1 parent 8416b5e commit cae0ded

8 files changed

Lines changed: 426 additions & 145 deletions

File tree

CHANGELOG.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Changelog
2+
3+
Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
4+
5+
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
6+
und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/).
7+
8+
## [2.1.0] - 2025-11-12
9+
10+
### Hinzugefügt
11+
12+
- **Erweitertes Error Handling**: Feldspezifische Validierungsfehler werden jetzt erfasst und können über die `HttpClientException` abgerufen werden
13+
- Neue Methode `hasFieldErrors()`: Prüft, ob feldspezifische Fehler vorhanden sind
14+
- Neue Methode `getFieldErrors()`: Gibt ein Array mit allen Feldfehlern zurück
15+
- Neue Methode `getDetailedMessage()`: Gibt eine formatierte Nachricht mit allen Fehlerdetails zurück
16+
- Feldvalidierungsfehler enthalten `Name`, `Message` und `Reason` für jeden Fehler
17+
- **Dokumentation**: Umfassende Error-Handling-Dokumentation in `docs/ERROR_HANDLING.md`
18+
- **Beispiele**: Neues Beispiel `examples/error_handling_example.php` zur Demonstration der Error-Handling-Features
19+
- **SessionCache-Dokumentation**: Technische Details zur `SessionCache`-Klasse im README hinzugefügt
20+
21+
### Geändert
22+
23+
- `HttpClientException` erweitert um optionalen `$fieldErrors`-Parameter
24+
- `HttpClient::lookForErrors()` extrahiert jetzt `Fields`-Array aus PROFFIX API Fehlerantworten
25+
- README aktualisiert mit Error-Handling-Sektion und SessionCache-Details
26+
27+
### Technische Details
28+
29+
Die PROFFIX REST API gibt bei Validierungsfehlern ein `Fields`-Array zurück, das bisher ignoriert wurde. Jetzt werden diese Details erfasst und können programmatisch abgerufen werden:
30+
31+
```php
32+
try {
33+
$response = $client->post('ADR/Adresse', $data);
34+
} catch (HttpClientException $e) {
35+
if ($e->hasFieldErrors()) {
36+
foreach ($e->getFieldErrors() as $error) {
37+
echo "{$error['Name']}: {$error['Message']}\n";
38+
}
39+
}
40+
}
41+
```
42+
43+
## [2.0.0] - 2024
44+
45+
### Hinzugefügt
46+
47+
- Session-Caching-Funktionalität zur Performance-Verbesserung
48+
- `SessionCache`-Klasse für dateibasiertes Session-Management
49+
- Automatische Session-Wiederverwendung über mehrere Requests
50+
- Plattformspezifische Cache-Verzeichnisse (Windows/Linux/Mac)
51+
- Option `enable_session_caching` zum Aktivieren/Deaktivieren des Cachings
52+
53+
### Geändert
54+
55+
- PHP-Mindestversion auf 8.2 erhöht
56+
- `HttpClient` nutzt jetzt Session-Caching standardmäßig
57+
- Automatische Cache-Invalidierung bei 401-Fehlern
58+
59+
## [1.x.x] - Frühere Versionen
60+
61+
Siehe Git-Historie für Details zu früheren Versionen.

CHANGELOG_SESSION_CACHING.md

Lines changed: 0 additions & 143 deletions
This file was deleted.

README.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,17 @@ Der Wrapper unterstützt automatisches Session-Caching, um die Performance zu ve
8888

8989
Der Dateiname wird aus Benutzername, Datenbank und URL generiert, um Konflikte bei mehreren Clients zu vermeiden.
9090

91+
**Technische Details:**
92+
93+
Die Session-Verwaltung erfolgt über die `SessionCache`-Klasse (`src/RestAPIWrapperProffix/HttpClient/SessionCache.php`), die folgende Funktionen bietet:
94+
95+
- `load()`: Lädt eine gespeicherte Session-ID aus dem Cache
96+
- `save($sessionId)`: Speichert eine Session-ID im Cache
97+
- `clear()`: Löscht die gespeicherte Session-ID
98+
- Automatische Erkennung des plattformspezifischen Cache-Verzeichnisses
99+
- Thread-sichere Dateioperationen mit `LOCK_EX`
100+
- Kollisionsvermeidung durch Base64-URL-kodierte Dateinamen
101+
91102
**Session-Caching deaktivieren:**
92103

93104
```php
@@ -202,6 +213,76 @@ $dbInfo = $pxrest->database();
202213

203214
Alle Methoden geben die Response als Array bzw. `NULL` (z.B. bei `DELETE`) zurück. Bei Fehlern wird eine `HttpClientException` mit der Rückmeldung der PROFFIX REST-API geworfen.
204215

216+
### Error Handling
217+
218+
Der Wrapper bietet erweitertes Error Handling, das sowohl allgemeine Fehlermeldungen als auch feldspezifische Validierungsfehler erfasst.
219+
220+
#### Beispiel einer PROFFIX API Fehlerantwort
221+
222+
```json
223+
{
224+
"Fields": [
225+
{
226+
"Reason": "EMPTY",
227+
"Name": "PLZ",
228+
"Message": "PLZ darf nicht leer bleiben!"
229+
},
230+
{
231+
"Reason": "EMPTY",
232+
"Name": "Land",
233+
"Message": "Land darf nicht leer bleiben!"
234+
}
235+
],
236+
"Message": "Mindestens ein Feld ist ungültig."
237+
}
238+
```
239+
240+
#### Fehlerbehandlung mit HttpClientException
241+
242+
```php
243+
use Pitwch\RestAPIWrapperProffix\HttpClient\HttpClientException;
244+
245+
try {
246+
$data = ["Ort" => "Zürich", "PLZ" => "", "Land" => ""];
247+
$neueAdresse = $pxrest->post("ADR/Adresse", $data);
248+
} catch (HttpClientException $e) {
249+
// Hauptfehlermeldung
250+
echo "Fehler: " . $e->getMessage() . "\n";
251+
// "Mindestens ein Feld ist ungültig."
252+
253+
// Prüfen, ob feldspezifische Fehler vorhanden sind
254+
if ($e->hasFieldErrors()) {
255+
echo "Feldvalidierungsfehler:\n";
256+
257+
foreach ($e->getFieldErrors() as $error) {
258+
echo sprintf(
259+
" - %s: %s (Grund: %s)\n",
260+
$error['Name'],
261+
$error['Message'],
262+
$error['Reason']
263+
);
264+
}
265+
266+
// Oder alle Details als formatierte Nachricht
267+
echo "\n" . $e->getDetailedMessage();
268+
}
269+
}
270+
```
271+
272+
**Verfügbare Methoden:**
273+
274+
- `getMessage()`: Gibt die Hauptfehlermeldung zurück
275+
- `hasFieldErrors()`: Prüft, ob feldspezifische Fehler vorhanden sind
276+
- `getFieldErrors()`: Gibt ein Array mit allen Feldfehlern zurück
277+
- `getDetailedMessage()`: Gibt eine formatierte Nachricht mit allen Fehlerdetails zurück
278+
- `getCode()`: Gibt den HTTP-Statuscode zurück
279+
- `getRequest()`: Gibt das Request-Objekt zurück
280+
- `getResponse()`: Gibt das Response-Objekt zurück
281+
282+
Weitere Details und Beispiele finden sich in der [Error Handling Dokumentation](docs/ERROR_HANDLING.md).
283+
284+
### Zusatzinformationen zur Response
285+
205286
Zudem lassen sich Zusatzinformationen zur letzten Response wie folgt ausgeben:
206287

207288
### Letzter Request

VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2.1.0

0 commit comments

Comments
 (0)