ApiPlatformResponseStrategy
Response strategy for the API Platform (Symfony) driver
Parses API Platform’s default Hydra/JSON-LD collection envelope:
{ "@context": "/contexts/Book", "@type": "hydra:Collection", "hydra:totalItems": 48, "hydra:member": [...], "hydra:view": { "@id": "/books?page=3&itemsPerPage=10", "hydra:first": "/books?page=1", "hydra:previous": "/books?page=2", "hydra:next": "/books?page=4", "hydra:last": "/books?page=5" }}The Hydra keys contain colons but no dots, so the inherited
dot-notation resolver traverses them cleanly (hydra:view.hydra:next
→ response['hydra:view']['hydra:next']). The body names no
current-page or page-size field, so both are derived from the
hydra:view URLs:
currentPagefrom thepageparam of the view’s@id(thepathoption slot points there); missing view → page 1.perPagefrom theitemsPerPageparam of the view’s@id(echoed whenever the request set it — this driver’s request strategy always does), falling back to the item count of a page that has ahydra:nextsuccessor.lastPagefrom thepageparam ofhydra:last, falling back toceil(total ÷ perPage); a view-less response holding the whole collection resolves to 1.
URLs are typically relative (/books?page=4) — parsing retries
against a placeholder base, and the links are surfaced as-is on the
collection. JSON:API and HAL serialization formats are out of scope
(use the JSON:API driver for the former).
Constructor
Section titled “Constructor”new ApiPlatformResponseStrategy()Methods
Section titled “Methods”paginate()
Section titled “paginate()”paginate(response: RawResponse, options: ResponseOptions): PaginatedCollection<T>Parse a Hydra collection response into a PaginatedCollection
| Parameter | Type | Description |
|---|---|---|
response |
RawResponse |
The raw API response body |
options |
ResponseOptions |
The response key name configuration (dot-notation paths supported) |
Returns — A typed PaginatedCollection instance
resolve()
Section titled “resolve()”resolve(response: RawResponse, path: string): unknownResolve a value from a response object using a dot-notation path
Supports both flat keys ('data') and nested paths ('meta.totalItems').
| Parameter | Type | Description |
|---|---|---|
response |
RawResponse |
The raw response object |
path |
string |
The dot-notation path to resolve |
Returns — The resolved value, or undefined if any segment is missing
resolveFrom()
Section titled “resolveFrom()”resolveFrom(response: RawResponse, options: ResponseOptions, currentPage: number, perPage?: number): number | undefinedResolve the “from” index value
If options.from resolves to a value in the response, use it.
Otherwise compute (currentPage - 1) * perPage + 1 when both are known.
| Parameter | Type | Description |
|---|---|---|
response |
RawResponse |
The raw response object |
options |
ResponseOptions |
The response key name configuration |
currentPage |
number |
The current page number |
perPage |
number |
The number of items per page |
Returns — The “from” index, or undefined when neither path nor inputs suffice
resolveTo()
Section titled “resolveTo()”resolveTo(response: RawResponse, options: ResponseOptions, currentPage: number, perPage?: number, total?: number): number | undefinedResolve the “to” index value
If options.to resolves to a value in the response, use it.
Otherwise compute Math.min(currentPage * perPage, total) when all
three are known.
| Parameter | Type | Description |
|---|---|---|
response |
RawResponse |
The raw response object |
options |
ResponseOptions |
The response key name configuration |
currentPage |
number |
The current page number |
perPage |
number |
The number of items per page |
total |
number |
The total number of items |
Returns — The “to” index, or undefined when neither path nor inputs suffice
