saloonphp/pagination-plugin
Adds paginated response support to SaloonPHP. Provides a PaginationPlugin with helpful abstractions to iterate through pages and results when working with APIs that return paginated data, keeping pagination logic out of your connectors and requests.
Pros:
->paginate()->each()) aligns with Saloon’s fluent API, enabling rapid implementation without disrupting existing connectors.Cache::remember or processing chunks asynchronously with Laravel Queues.Cons:
edges) may require custom PaginationStrategy implementations, adding 4–8 hours of development time per connector.next_page link) may demand extensive customization.page/limit), integration is straightforward and low-risk.chunk()) and caching (cacheFor()) suffice, or is a database-backed solution (e.g., Scout, custom queue workers) needed?MockConnector be configured?Laravel/Saloon Ecosystem:
extend() method or Laravel’s service provider, enabling zero-config usage for standard APIs:
Saloon::extend('pagination', function () {
return new PaginationPlugin();
});
$paginator = $connector->paginate()->cacheFor(3600)->all();
$paginator->chunk(100, function ($items) {
ProcessItemJob::dispatch($items);
});
MockConnector for unit testing paginated responses:
$mock = new MockConnector();
$mock->shouldReceive('send')
->andReturn(new PaginatedResponse([...], 'next_cursor'));
API Connectors:
PaginationStrategy interface for non-standard schemas (e.g., GraphQL):
class GraphQLCursorStrategy implements PaginationStrategy {
public function getNextCursor(array $response): ?string { ... }
public function buildRequest(array $params): array { ... }
}
Laravel-Specific Use Cases:
Assessment Phase (1–2 days):
next_page parsing, custom loops).Plugin Integration (2–4 days):
extend() or a Laravel service provider.->paginate()->each()).PaginationStrategy classes and register them with the plugin.Testing Phase (1–2 days):
MockConnector to verify pagination logic.Optimization Phase (1–3 days, if needed):
cacheFor() durations based on data volatility.PaginationStrategy for non-standard APIs in parallel with standard integrations.How can I help you explore Laravel packages today?