Current section

Files

Jump to
ash_json_api documentation dsls DSL:-AshJsonApi.Resource.cheatmd
Raw

documentation/dsls/DSL:-AshJsonApi.Resource.cheatmd

<!--
This file was generated by Spark. Do not edit it by hand.
-->
# DSL: AshJsonApi.Resource
The entrypoint for adding JSON:API behavior to a resource"
## json_api
Configure the resource's behavior in the JSON:API
### Nested DSLs
* [routes](#json_api-routes)
* get
* index
* post
* patch
* delete
* related
* relationship
* post_to_relationship
* patch_relationship
* delete_from_relationship
* [primary_key](#json_api-primary_key)
### Examples
```
json_api do
type "post"
includes [
friends: [
:comments
],
comments: []
]
routes do
base "/posts"
get :read
get :me, route: "/me"
index :read
post :confirm_name, route: "/confirm_name"
patch :update
related :comments, :read
relationship :comments, :read
post_to_relationship :comments
patch_relationship :comments
delete_from_relationship :comments
end
end
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="json_api-type" href="#json_api-type">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
type
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The resource identifier type of this resource in JSON:API
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="json_api-includes" href="#json_api-includes">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
includes
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">`any`</code>
</td>
<td style="text-align: left">
<code class="inline">[]</code>
</td>
<td style="text-align: left" colspan=2>
A keyword list of all paths that are includable from this resource
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="json_api-include_nil_values?" href="#json_api-include_nil_values?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
include_nil_values?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">`any`</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
Whether or not to include properties for values that are nil in the JSON output
</td>
</tr>
</tbody>
</table>
## json_api.routes
Configure the routes that will be exposed via the JSON:API
### Nested DSLs
* [get](#json_api-routes-get)
* [index](#json_api-routes-index)
* [post](#json_api-routes-post)
* [patch](#json_api-routes-patch)
* [delete](#json_api-routes-delete)
* [related](#json_api-routes-related)
* [relationship](#json_api-routes-relationship)
* [post_to_relationship](#json_api-routes-post_to_relationship)
* [patch_relationship](#json_api-routes-patch_relationship)
* [delete_from_relationship](#json_api-routes-delete_from_relationship)
### Examples
```
routes do
base "/posts"
get :read
get :me, route: "/me"
index :read
post :confirm_name, route: "/confirm_name"
patch :update
related :comments, :read
relationship :comments, :read
post_to_relationship :comments
patch_relationship :comments
delete_from_relationship :comments
end
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="json_api-routes-base" href="#json_api-routes-base">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
base
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The base route for the resource, e.g `"/users"`
</td>
</tr>
</tbody>
</table>
## json_api.routes.get
```elixir
get action
```
A GET route to retrieve a single record
### Examples
```
get :read
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="action-action" href="#action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-route" href="#action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
<code class="inline">"/:id"</code>
</td>
<td style="text-align: left" colspan=2>
The path of the route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-default_fields" href="#action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-primary?" href="#action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.index
```elixir
index action
```
A GET route to retrieve a list of records
### Examples
```
index :read
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="action-action" href="#action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-paginate?" href="#action-paginate?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
paginate?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">true</code>
</td>
<td style="text-align: left" colspan=2>
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-route" href="#action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
<code class="inline">"/"</code>
</td>
<td style="text-align: left" colspan=2>
The path of the route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-default_fields" href="#action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-primary?" href="#action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.post
```elixir
post action
```
A POST route to create a record
### Examples
```
post :create
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="action-action" href="#action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-route" href="#action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
<code class="inline">"/"</code>
</td>
<td style="text-align: left" colspan=2>
The path of the route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-default_fields" href="#action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-primary?" href="#action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-relationship_arguments" href="#action-relationship_arguments">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship_arguments
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom | {:id, atom})</code>
</td>
<td style="text-align: left">
<code class="inline">[]</code>
</td>
<td style="text-align: left" colspan=2>
Arguments to be used to edit relationships. See the [relationships guide](/documentation/topics/relationships.md) for more.
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-upsert?" href="#action-upsert?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
upsert?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not to use the `upsert?: true` option when calling `YourApi.create/2`.
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-upsert_identity" href="#action-upsert_identity">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
upsert_identity
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Which identity to use for the upsert
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.patch
```elixir
patch action
```
A PATCH route to update a record
### Examples
```
patch :update
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="action-action" href="#action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-relationship_arguments" href="#action-relationship_arguments">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship_arguments
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">`any`</code>
</td>
<td style="text-align: left">
<code class="inline">[]</code>
</td>
<td style="text-align: left" colspan=2>
Arguments to be used to edit relationships. See the [relationships guide](/documentation/topics/relationships.md) for more.
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-read_action" href="#action-read_action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
read_action
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The read action to use to look the record up before updating
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-route" href="#action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
<code class="inline">"/:id"</code>
</td>
<td style="text-align: left" colspan=2>
The path of the route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-default_fields" href="#action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-primary?" href="#action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.delete
```elixir
delete action
```
A DELETE route to destroy a record
### Examples
```
delete :destroy
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="action-action" href="#action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-read_action" href="#action-read_action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
read_action
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The read action to use to look the record up before updating
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-route" href="#action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
<code class="inline">"/:id"</code>
</td>
<td style="text-align: left" colspan=2>
The path of the route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-default_fields" href="#action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="action-primary?" href="#action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.related
```elixir
related relationship, action
```
A GET route to read the related resources of a relationship
### Examples
```
related :comments, :read
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="relationship-action-relationship" href="#relationship-action-relationship">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-action" href="#relationship-action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-route" href="#relationship-action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The path of the route - Defaults to /:id/[relationship_name]
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-default_fields" href="#relationship-action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-primary?" href="#relationship-action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.relationship
```elixir
relationship relationship, action
```
A READ route to read the relationship, returns resource identifiers.
### Examples
```
relationship :comments, :read
```
### Arguments
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="relationship-action-relationship" href="#relationship-action-relationship">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
</td>
</tr>
</tbody>
</table>
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="relationship-action-action" href="#relationship-action-action">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
action
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The action to call when this route is hit
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-route" href="#relationship-action-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The path of the route - Defaults to /:id/relationships/[relationship_name]
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-default_fields" href="#relationship-action-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-action-primary?" href="#relationship-action-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.post_to_relationship
```elixir
post_to_relationship relationship
```
A POST route to create related entities using resource identifiers
### Examples
```
post_to_relationship :comments
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="relationship-relationship" href="#relationship-relationship">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-route" href="#relationship-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The path of the route - Defaults to /:id/relationships/[relationship_name]
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-default_fields" href="#relationship-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-primary?" href="#relationship-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.patch_relationship
```elixir
patch_relationship relationship
```
A PATCH route to update a relationship using resource identifiers
### Examples
```
patch_relationship :comments
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="relationship-relationship" href="#relationship-relationship">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-route" href="#relationship-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The path of the route - Defaults to /:id/relationships/[relationship_name]
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-default_fields" href="#relationship-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-primary?" href="#relationship-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.routes.delete_from_relationship
```elixir
delete_from_relationship relationship
```
A DELETE route to remove related entities using resource identifiers
### Examples
```
delete_from_relationship :comments
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="relationship-relationship" href="#relationship-relationship">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
relationship
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">atom</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-route" href="#relationship-route">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
route
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
The path of the route - Defaults to /:id/relationships/[relationship_name]
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-default_fields" href="#relationship-default_fields">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
default_fields
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">list(atom)</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
A list of fields to be shown in the attributes of the called route
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="relationship-primary?" href="#relationship-primary?">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
primary?
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">boolean</code>
</td>
<td style="text-align: left">
<code class="inline">false</code>
</td>
<td style="text-align: left" colspan=2>
Whether or not this is the route that should be linked to by default when rendering links to this type of route
</td>
</tr>
</tbody>
</table>
### Introspection
Target: `AshJsonApi.Resource.Route`
## json_api.primary_key
Encode the id of the JSON API response from selected attributes of a resource
### Examples
```
primary_key do
keys [:first_name, :last_name]
delimiter "~"
end
```
### Options
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th colspan=2>Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">
<a id="json_api-primary_key-keys" href="#json_api-primary_key-keys">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
keys
</span>
</a>
<sup style="color: red">*</sup>
</td>
<td style="text-align: left">
<code class="inline">`any`</code>
</td>
<td style="text-align: left">
</td>
<td style="text-align: left" colspan=2>
the list of attributes to encode JSON API primary key
</td>
</tr>
<tr>
<td style="text-align: left">
<a id="json_api-primary_key-delimiter" href="#json_api-primary_key-delimiter">
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
delimiter
</span>
</a>
</td>
<td style="text-align: left">
<code class="inline">String.t</code>
</td>
<td style="text-align: left">
<code class="inline">"-"</code>
</td>
<td style="text-align: left" colspan=2>
The delimiter to concatenate the primary key values. Default to be '-'
</td>
</tr>
</tbody>
</table>