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:
PageLimitStrategy, CursorStrategy) allows for API-agnostic pagination, reducing boilerplate for REST/GraphQL APIs.Cache::remember), and queues (e.g., chunk() + ProcessItemJob) for scalable pagination. Example: Cache paginated results for 1 hour with ->cacheFor(3600).disable_loop_detection for async) prevent memory leaks in large datasets (e.g., 100K+ records), critical for Laravel’s job-based workflows.Paginator::each()) improves IDE autocompletion and reduces runtime errors.Cons:
Paginator in a Job).PaginationStrategy implementations (~4–8 hours).PaginationStrategy.chunk()) or caching (cacheFor()) be sufficient, or is a database-backed solution (e.g., Scout) needed?MockConnector supports this but may need setup.extend() method or Laravel’s service provider:
Saloon::extend('pagination', function () {
return new PaginationPlugin();
});
$paginator = $connector->paginate()->cacheFor(3600)->all();
chunk() for async processing with Laravel Queues:
$paginator->chunk(100, function ($items) {
ProcessItemJob::dispatch($items);
});
PaginationStrategy (e.g., for GraphQL’s edges):
class GraphQLCursorStrategy implements PaginationStrategy {
public function getNextCursor(array $response): ?string { ... }
public function buildRequest(array $params): array { ... }
}
MockConnector to simulate paginated responses:
$mock = new MockConnector();
$mock->shouldReceive('send')
->andReturn(new PaginatedResponse([...], 'next_cursor'));
$response->paginate()->assertCount(200);
next_page parsing).PaginationPlugin in Saloon/Laravel.Paginator::each() or Paginator::all().cacheFor()) or async processing (chunk()) where needed.| Component | Compatibility | Notes |
|---|---|---|
| Laravel | 8.0+ (tested with 10.x) | Uses Laravel’s service container, cache, and queues. |
| Saloon | v3–v4 | Hard dependency; v2 support dropped in v2.0.0. |
| PHP | 8.1+ (8.5+ recommended for type hints) | Avoids deprecated features. |
| API Patterns | Page/limit, cursor, link headers, custom | Custom strategies required for GraphQL/nested cursors. |
| Async Processing | Queues, chunking | Disables loop detection by default for async to avoid memory issues. |
while ($hasMore) { ... } → Paginator::each()).retry() or Laravel’s retry() helper.chunk() for large datasets or increase memory_limit.log() system.cacheFor() reduces API calls for repeated queries (e.g., dashboards).chunk() distributes load across queues (e.g., import 1M records in batches).all() for >100K records without chunking (memory-intensive).chunk() + jobs) mitigates DB bottlenecks.| Failure Scenario | Impact | Mitigation | |-------------------------------------|--------------------------|
How can I help you explore Laravel packages today?