Installation:
composer require boson-php/http-bridge
Ensure your project uses PHP 8.4+ (Laravel 10/11 compatible).
First Use Case:
BridgeInterface:
use Boson\HttpBridge\BridgeInterface;
use Boson\HttpBridge\Psr18Bridge;
use Psr\Http\Client\ClientInterface;
// Bind the bridge to Laravel's container (e.g., in a service provider)
$this->app->bind(BridgeInterface::class, function ($app) {
$client = new Psr18Bridge($app->make(ClientInterface::class));
return $client;
});
// Usage in a controller/job
$bridge = app(BridgeInterface::class);
$response = $bridge->sendRequest(new \Psr\Http\Message\Request('GET', 'https://api.example.com'));
Where to Look First:
BridgeInterface (core contract) and Psr18Bridge (PSR-18 implementation).HttpBridgeMiddleware or similar for request/response interception.Standardizing HTTP Clients:
BridgeInterface to abstract underlying clients (e.g., Guzzle, Symfony HTTPClient).// In config/http.php
'bridges' => [
'default' => Boson\HttpBridge\Psr18Bridge::class,
'custom' => App\Bridges\CustomHttpBridge::class,
];
Middleware Integration:
$bridge = new Psr18Bridge($client);
$bridge->pushMiddleware(new \Boson\HttpBridge\Middleware\LoggingMiddleware());
Request/Response Transformation:
Request to PSR-7:
use Boson\HttpBridge\Psr7Converter;
$psrRequest = Psr7Converter::toPsr7($laravelRequest);
$response = $bridge->sendRequest($psrRequest);
$laravelResponse = Psr7Converter::toLaravelResponse($response);
Laravel Service Provider Binding:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(BridgeInterface::class, function ($app) {
return new Psr18Bridge(
$app->make(\Psr\Http\Client\ClientInterface::class)
);
});
}
Dynamic Bridge Resolution:
$bridge = app()->make(BridgeInterface::class, ['config' => 'custom']);
API Client Workflow:
HttpClient with a bridge for external API calls:
$bridge = app(BridgeInterface::class);
$response = $bridge->sendRequest(
new \Psr\Http\Message\Request('GET', 'https://api.example.com/data')
);
$data = json_decode($response->getBody(), true);
Legacy System Integration:
$legacyBridge = new LegacyHttpBridge();
$response = $legacyBridge->sendRequest($request);
Testing Workflow:
$mockBridge = Mockery::mock(BridgeInterface::class);
$mockBridge->shouldReceive('sendRequest')
->once()
->andReturn(new \Psr\Http\Message\Response(200, [], 'Mocked'));
$this->app->instance(BridgeInterface::class, $mockBridge);
Leverage Laravel’s HTTP Stack:
HttpClient for hybrid workflows:
$http = new \Illuminate\Http\Client\PendingRequest();
$bridgeResponse = $bridge->sendRequest($http->toPsrRequest());
Facade Support:
HttpBridge):
// app/Facades/HttpBridge.php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class HttpBridge extends Facade {
protected static function getFacadeAccessor() { return BridgeInterface::class; }
}
Usage:
$response = \App\Facades\HttpBridge::get('https://api.example.com');
Event-Driven Extensions:
HttpBridgeRequestSent):
$bridge->sendRequest($request)->then(function ($response) {
event(new HttpBridgeResponseReceived($response));
});
Caching Layer:
$bridge->pushMiddleware(new \Boson\HttpBridge\Middleware\CacheMiddleware(
$cache = app(\Illuminate\Cache\CacheManager::class)
));
Boson Framework Dependency:
Boson\Container) and replace with Laravel equivalents.PSR Compliance Assumptions:
HttpClient or Request objects may need conversion.Psr7Converter or similar utilities to bridge gaps.Middleware Ordering:
Error Handling:
HttpException).try {
$response = $bridge->sendRequest($request);
} catch (\Boson\HttpBridge\Exception\BridgeException $e) {
throw new \Illuminate\Http\Client\ConnectionException($e->getMessage());
}
Performance Overhead:
HttpClient and optimize critical paths.Testing Complexity:
MockHttp or Mockery to stub bridge interactions:
$this->mock(BridgeInterface::class)->shouldReceive('sendRequest')
->andReturn(new \Psr\Http\Message\Response(200, [], '{}'));
Logging HTTP Bridge Traffic:
$bridge->pushMiddleware(new \Boson\HttpBridge\Middleware\DebugMiddleware());
Inspecting Request/Response Objects:
\Log::debug('Bridge Request:', [
'method' => $request->getMethod(),
'uri' => (string) $request->getUri(),
'headers' => $request->getHeaders(),
]);
Common Errors:
ClassNotFoundException: Missing Boson classes. Solution: Replace with Laravel equivalents.RuntimeException: Invalid PSR-7 objects. Solution: Validate objects before passing to the bridge.ConnectionException: Network issues. Solution: Check middleware or underlying client (e.g., Guzzle).Service Provider Binding:
$this->app->bind(\Psr\Http\Client\ClientInterface::class, function ($app) {
return new \GuzzleHttp\Client();
});
How can I help you explore Laravel packages today?