Skip to content
API/ApiPlatformRequestStrategy

ApiPlatformRequestStrategy

src/strategies/api-platform-request.strategy.ts6 public methodsclass

Request strategy for the API Platform (Symfony) driver

Generates URIs in API Platform’s filter format:

  • Filters: field=value (exact); multi-value uses the array syntax (field[]=v1&field[]=v2, OR semantics)
  • Operator filters: bracket syntax field[op]=value — RangeFilter (gt/gte/lt/lte/between), SearchFilter strategies (partial/ipartial/start), ExistsFilter (exists) — see the mapping on _formatOperatorSegments
  • Relation filtering: dot paths pass through (author.name=John via addFilter('author.name', 'John'))
  • Sorts: order[field]=asc / order[field]=desc (one param per rule)
  • Pagination: page=N&itemsPerPage=M

The order and itemsPerPage keys are API Platform conventions and intentionally not configurable through QueryBuilderOptions; page honours the existing option key (its default matches the wire format).

Date fields use API Platform’s DateFilter (field[after]=…, field[before]=…) — there is no FilterOperatorEnum counterpart, but the bracket key passes through addFilter directly: addFilter('createdAt[after]', '2023-01-01').

NOT (no negation filter in API Platform core) and the PostgREST-native full-text operators (FTS, PHFTS, PLFTS, WFTS) throw UnsupportedFilterOperatorError.

new ApiPlatformRequestStrategy()
Property Type Description
capabilities StrategyCapabilities Filters, operator filters, sorts — no per-model fields, no includes (relations embed via serialization groups server-side), no flat select, no global search parameter
assertResource(state: QueryBuilderState): void

Throw if the resource is not set on the state

Centralises the message that was previously copy-pasted across four of the five concrete strategies.

Parameter Type Description
state QueryBuilderState The current query builder state
baseUri(state: QueryBuilderState): string

Compute the base path (no query string)

Parameter Type Description
state QueryBuilderState The current query builder state

Returns — The base URI without the query separator (e.g. /users or https://api.example.com/users)

buildUri(state: QueryBuilderState, options: QueryBuilderOptions): string

Compose the full request URI from the given state

Template method: validates the resource, computes the base path, delegates the per-driver query-string segments to parts(...), and joins them with the conventional ?/& separators.

Parameter Type Description
state QueryBuilderState The current query builder state
options QueryBuilderOptions The query parameter key name configuration

Returns — The composed URI string

join(base: string, segments: string[]): string

Glue the base URI and the per-driver query-string segments

Returns the bare base when no segments were emitted (e.g. PostgREST in RANGE mode with no filters), otherwise joins with ? + &.

Parameter Type Description
base string The base URI from _baseUri
segments string[] The query-string fragments from parts(...)

Returns — The full URI

parts(state: QueryBuilderState, options: QueryBuilderOptions): string[]

Emit API Platform-format query-string segments in canonical order: filters → operator filters → order → page → itemsPerPage

Parameter Type Description
state QueryBuilderState The current query builder state
options QueryBuilderOptions The query parameter key name configuration (used for page, whose default matches the wire format)

Returns — Ordered query-string fragments

validateLimit(limit: number): void

Validate that a limit value is acceptable for this driver

Default policy: positive integer. Drivers that recognise a sentinel (NestJS treats -1 as “fetch all”) override this method.

Parameter Type Description
limit number The limit value to validate