Connectors are classes which define an API integration's properties like its URL and headers. Any behaviour that should be used on every request like authentication should be defined in a connector. You should have a separate connector for each API integration.
You should establish a standard place to keep your API connectors. For example in Laravel, a sensible place would be to place them inside the App/Http/Integrations
folder.
Create a new class and extend the abstract Connector
class. You will then need to define a method resolveBaseUrl
. This is the URL that points to the API.
<?php
use Saloon\Http\Connector;
class ForgeConnector extends Connector
{
public function resolveBaseUrl(): string
{
return 'https://forge.laravel.com/api/v1';
}
}
If you have installed the Laravel plugin, you can use the php artisan saloon:connector command to create a connector.
Most API integrations will have common headers used by all of its requests. You can extend the defaultHeaders
method to define the headers.
class ForgeConnector extends Connector
{
// ...
protected function defaultHeaders(): array
{
return [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
];
}
}
You can also use the headers
method on a connector instance.
$forge = new ForgeConnector;
$forge->headers()->add('Content-Type', 'text/plain');
By default, Saloon will have a connection timeout of 10 seconds and a request timeout of 30 seconds. You can customise this by using the HasTimeout
trait and specifying a connectTimeout
and requestTimeout
property.
use Saloon\Traits\Plugins\HasTimeout;
class ForgeConnector extends Connector
{
use HasTimeout;
protected int $connectTimeout = 60;
protected int $requestTimeout = 120;
}
Since connectors are just classes, you can define a constructor to populate its default properties. For example, if the URL changes per user of your application you can define this as a constructor argument.
class ForgeConnector extends Connector
{
public function __construct(protected readonly string $baseUrl) {
//
}
public function resolveBaseUrl(): string
{
return $this->baseUrl;
}
}
$connector = new ForgeConnector('https://forge.laravel.com/api/v1');
The connector uses a HTTP client to send the request. By default, this client is Guzzle. If you would like to define Guzzle config options then you can extend the defaultConfig
method.
Click here to see a list of the available options Guzzle provide.
class ForgeConnector extends Connector
{
// ...
public function defaultConfig(): array
{
return [
'stream' => true,
];
}
}
You can also use the config
method on a connector instance.
$forge = new ForgeConnector;
$forge->config()->add('stream', true);