AshOaskit. QueryParameters
(AshOasKit v0.2.0)
View Source
Generates detailed JSON:API query parameter schemas for OpenAPI specs.
This module provides comprehensive query parameter schemas for JSON:API compliant APIs, including pagination, sparse fieldsets, includes, filtering, and sorting.
JSON:API Query Parameters
The JSON:API specification defines several query parameters:
Page Parameter
Pagination can use either offset-based or keyset/cursor-based strategies:
# Offset pagination
GET /posts?page[offset]=0&page[limit]=10
# Keyset pagination
GET /posts?page[after]=cursor&page[limit]=10
# With count
GET /posts?page[count]=trueFields Parameter (Sparse Fieldsets)
Request specific fields per resource type:
GET /posts?fields[post]=title,body&fields[author]=nameInclude Parameter
Include related resources:
GET /posts?include=author,comments.authorFilter Parameter
Filter resources using various operators:
GET /posts?filter[status]=published&filter[title][contains]=helloSort Parameter
Sort resources by fields:
GET /posts?sort=-created_at,titleUsage
# Build page parameter for a resource
page_param = QueryParameters.build_page_parameter(opts)
# Build fields parameter with resource types
fields_param = QueryParameters.build_fields_parameter(["post", "author"])
# Build include parameter with relationship paths
include_param = QueryParameters.build_include_parameter([:author, :comments])
# Get all standard JSON:API parameters
params = QueryParameters.all_parameters(resource, opts)
Summary
Functions
Builds all standard JSON:API query parameters for a resource.
Builds a read-only parameters list (no filter/sort).
Builds the fields query parameter schema for sparse fieldsets.
Builds the include query parameter schema.
Builds the page query parameter schema.
Builds parameters for index/list operations.
Builds parameters for get/show operations.
Functions
Builds all standard JSON:API query parameters for a resource.
Combines filter, sort, page, include, and fields parameters.
Parameters
resource- The Ash resource moduleopts- Options keyword list:version- OpenAPI version ("3.0" or "3.1"):pagination_strategy- Pagination type:include_paths- Available include paths
Returns
List of OpenAPI parameter objects.
Examples
QueryParameters.all_parameters(MyApp.Post, version: "3.1")
#=> [
#=> %{name: "filter", ...},
#=> %{name: "sort", ...},
#=> %{name: "page", ...},
#=> %{name: "include", ...},
#=> %{name: "fields", ...}
#=> ]
Builds a read-only parameters list (no filter/sort).
Useful for simple GET operations that don't support filtering.
Parameters
resource- The Ash resource moduleopts- Options keyword list
Returns
List of OpenAPI parameter objects (page, include, fields only).
Builds the fields query parameter schema for sparse fieldsets.
Parameters
resource_types- List of JSON:API type namesopts- Options keyword list
Returns
An OpenAPI parameter object for sparse fieldsets.
Examples
iex> QueryParameters.build_fields_parameter(["post", "author"])
%{
name: "fields",
in: :query,
style: :deepObject,
schema: %{
type: :object,
properties: %{
"post" => %{type: :string},
"author" => %{type: :string}
}
}
}
Builds the include query parameter schema.
Parameters
available_includes- List of includable relationship pathsopts- Options keyword list
Returns
An OpenAPI parameter object for relationship includes.
Examples
iex> QueryParameters.build_include_parameter([:author, :comments])
%{
name: "include",
in: :query,
schema: %{
type: :string,
description: "..."
}
}
Builds the page query parameter schema.
Supports both offset and keyset pagination strategies.
Parameters
opts- Options keyword list:pagination_strategy-:offset,:keyset, or:both(default)
Returns
An OpenAPI parameter object for pagination.
Examples
iex> QueryParameters.build_page_parameter([])
%{
name: "page",
in: :query,
style: :deepObject,
schema: %{
type: :object,
properties: %{
"offset" => %{...},
"limit" => %{...},
...
}
}
}
Builds parameters for index/list operations.
Includes all standard parameters plus optional count parameter.
Parameters
resource- The Ash resource moduleopts- Options keyword list
Returns
List of OpenAPI parameter objects.
Builds parameters for get/show operations.
Typically only needs include and fields parameters.
Parameters
resource- The Ash resource moduleopts- Options keyword list
Returns
List of OpenAPI parameter objects.