Back to Speedtest Tracker

SaloonPHP Development

.cursor/skills/saloon-development/SKILL.md

1.14.07.8 KB
Original Source

SaloonPHP Development

When to use this skill

Use this skill when working with SaloonPHP features:

  • Creating API integrations or SDKs
  • Building connectors or requests
  • Working with authentication, middleware, or responses
  • Implementing pagination, retries, or rate limiting
  • Testing API integrations with mocking

Documentation

Use web-search for docs at https://docs.saloon.dev. Check composer.json for version (v2, v3 or v4).

Features

  • Artisan Commands: Generate classes with saloon:connector, saloon:request, saloon:response, saloon:plugin, saloon:auth. Example:
bash
php artisan saloon:connector GitHub GitHubConnector
php artisan saloon:request GitHub GetUserRequest
  • Connectors: Define base URL and shared config. Extend Saloon\Http\Connector. Example:
php
use Saloon\Http\Connector;

class GitHubConnector extends Connector
{
    public function resolveBaseUrl(): string
    {
        return 'https://api.github.com';
    }
}
  • Requests: Define endpoints. Extend Saloon\Http\Request, set $method via Saloon\Enums\Method. Example:
php
use Saloon\Enums\Method;
use Saloon\Http\Request;

class GetUserRequest extends Request
{
    protected Method $method = Method::GET;

    public function resolveEndpoint(): string
    {
        return '/user';
    }
}
  • Sending Requests: Use connector to send requests. Example:
php
$response = $connector->send(new GetUserRequest);
$response->json();       // Array
$response->successful(); // Bool
  • Body Types: Implement HasBody + trait (HasJsonBody, HasFormBody, HasMultipartBody, HasXmlBody, HasStringBody, HasStreamBody).

  • Authentication: Use TokenAuthenticator, BasicAuthenticator, QueryAuthenticator, or implement Saloon\Contracts\Authenticator.

  • Plugins: Built-in traits: AcceptsJson, AlwaysThrowOnErrors, HasTimeout, HasRetry, HasRateLimit, WithDebugData, CastsToDto.

  • Middleware: Use middleware()->onRequest() and middleware()->onResponse(), or implement boot() method.

  • DTOs: Implement createDtoFromResponse() in request classes, use $response->dto() or $response->dtoOrFail().

  • Laravel Facade: Mock requests in tests. Example:

php
Saloon::fake([GetUserRequest::class => MockResponse::make(['name' => 'Sam'])]);
  • HTTP Sender: Enable Telescope support via config/saloon.php:
php
'default_sender' => \Saloon\Laravel\HttpSender::class,
  • v3 Retry: Set $tries, $retryInterval, $useExponentialBackoff on connectors/requests.

  • v3 Pagination: Requires saloonphp/pagination-plugin.

File Structure

Store classes in app/Http/Integrations/{ServiceName}/ (configurable in config/saloon.php).

Common Pitfalls

  • Not using Artisan commands to generate classes
  • Forgetting HasBody interface when sending body data
  • Wrong HTTP method enum (use Saloon\Enums\Method)
  • Missing HttpSender config for Telescope
  • v3 or v4: forgetting to install pagination plugin

Available Documentation

Use web-search with these docs for specific topics:

Upgrade

The Basics

Digging Deeper

Installable Plugins