Write API Integrations in Laravel and PHP Projects with Saloon
Published on by Paul Redmond
Saloon is a Laravel/PHP package that allows you to write your API integrations in a beautiful, standardized syntax. At the heart of this package is request objects, which define how to get specific requests from an API. For example, to get a Laravel Forge server, you might define a GetForgeServerRequest
class:
use App\Http\Saloon\Requests\GetForgeServerRequest; $request = new GetForgeServerRequest(serverId: '123456'); $request->addHeader('Accept', 'application/json');$request->addConfig('debug', true); // This will overwrite all default headers.$request->setHeaders($array);// This will overwrite all default configration options.$request->setConfig($array); // Send the request and get the response body$response = $request->send();$data = $response->json();
And here's what the request class might look like:
use App\Http\Saloon\Connectors\ForgeConnector;use Sammyjo20\Saloon\Constants\Saloon;use Sammyjo20\Saloon\Http\SaloonRequest; class GetForgeServerRequest extends SaloonRequest{ protected ?string $method = Saloon::GET; protected ?string $connector = ForgeConnector::class; public function defineEndpoint(): string { return '/servers/' . $this->serverId; } public function __construct( public string $serverId ){}}
You can also define default headers for the request via a defaultHeaders()
method defined on a request class, which is merged with the base connector headers.
This package gives you an object-oriented, fluent system to work with, providing conventions to organize classes better around interacting with external APIs. Saloon works with both Laravel and any PHP project (PHP 8+) via composer, providing the following features:
- Simple syntax, standardizes the way you interact with APIs
- You don't have to worry about Guzzle/Http Facade/cURL
- Organize all your API integrations in one place
- Easily add on your own functionality with plugins
- Powerful interceptor logic to customize the response
- Supports Guzzle Handlers for unlimited customization
- Mocking requests for testing (Coming Soon)
- Framework agnostic
You can learn more about this package, get full installation instructions, and view the source code on GitHub.