Skip to main content

HTTP-Clients

Zwei generische Low-Level-Clients liegen unter app/Http/Clients/:

app/Http/Clients/
├── GuzzleClient.php # HTTP Basic Auth, JSON
└── ODataClient.php # OData v4 (saint-systems/odata-client)

Für Grenke gibt es einen eigenen, schlanken Client (Services\Grenke\ApiService), weil dieser X.509-Zertifikate als Auth braucht. Siehe Grenke ApiService.

GuzzleClient

Wrapper um GuzzleHttp\Client mit HTTP-Basic-Auth. Konfiguriert sich aus config('services.<client>').

namespace App\Http\Clients;

$mfr = new GuzzleClient('mfr'); // 'mfr' → config('services.mfr.{username,password,base_url}')

Methoden

$result = $mfr->get('Companies(61149446314L)');
// $result = ['status' => 200, 'reason' => 'OK', 'headers' => [...], 'body' => stdClass]

Response-Shape

Jede Methode liefert ein Array oder bei Fehler eine JsonResponse:

[
'status' => 200,
'reason' => 'OK',
'headers' => [...],
'bodyLen' => 1234,
'body' => stdClass, // json_decode'd, NICHT als Array
]

⚠️ body ist ein stdClass-Objekt, kein Array. Property-Zugriff ist $result['body']->Id, nicht $result['body']['Id'].

Wann nehme ich welchen Client?

Use-CaseClient
MFR-Resource schreiben (POST/PUT)GuzzleClient('mfr')
MFR komplexer Query mit expandODataClient (siehe unten)
WeclappServices\WeclappApiService
GrenkeServices\Grenke\ApiService

ODataClient

Wrapper für saintsystems/odata-client-php, vorkonfiguriert für MFR. Wird in MfrApiService injiziert.

use App\Http\Clients\ODataClient;

// Variante A
$mfr = new ODataClient('mfr');

// Variante B (mfr ist auch property)
$client = new ODataClient();
$mfr = $client->mfr;

Query-Beispiele

// Liste mit OData-Operatoren
$companies = $mfr->from('Companies')
->skip(10)
->order('ExternalId')
->expand('Contacts,Tags,ServiceObjects,MainContact')
->get();

$companies->each(fn ($c) => print $c->Id);
// Filter
$active = $mfr->from('ServiceObjects')
->where('Active', true)
->get();
// CRUD
$mfr->post('Companies', $payload);
$mfr->put('Companies(61149446314L)', $payload);
$mfr->delete('Companies(61149446314L)');

Vollständige OData-Syntax: https://github.com/saintsystems/odata-client-php/wiki/Example-Calls

Configuration

Beide Clients lesen aus config/services.php:

'mfr' => [
'base_url' => rtrim(env('MFR_BASE_URL'), '/') . '/',
'username' => env('MFR_API_USERNAME'),
'password' => env('MFR_API_PASSWORD'),
],

Setze in .env:

MFR_BASE_URL="https://portal.mobilefieldreport.com/odata/"
MFR_API_USERNAME="..."
MFR_API_PASSWORD="..."