Claude-skill-registry ash-json-api
AshJsonApi guidelines for exposing Ash resources as JSON:API compliant REST endpoints. Use when adding JSON:API extensions to domains/resources, configuring routes, or implementing filtering, sorting, pagination, and includes. Supports full JSON:API specification.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ash-json-api" ~/.claude/skills/majiayu000-claude-skill-registry-ash-json-api && rm -rf "$T"
manifest:
skills/data/ash-json-api/SKILL.mdsource content
AshJsonApi Guidelines
AshJsonApi generates JSON:API compliant endpoints from Ash resources, supporting filtering, sorting, pagination, includes, and relationships.
Domain Configuration
Add the
AshJsonApi.Domain extension and define routes:
defmodule MyApp.Blog do use Ash.Domain, extensions: [AshJsonApi.Domain] json_api do authorize? true routes do base_route "/posts", MyApp.Blog.Post do get :read index :read post :create patch :update delete :destroy end end end resources do resource MyApp.Blog.Post resource MyApp.Blog.Comment end end
Resource Configuration
Add the
AshJsonApi.Resource extension and specify the type:
defmodule MyApp.Blog.Post do use Ash.Resource, domain: MyApp.Blog, extensions: [AshJsonApi.Resource] attributes do uuid_primary_key :id attribute :title, :string attribute :body, :string attribute :published, :boolean end relationships do belongs_to :author, MyApp.Accounts.User has_many :comments, MyApp.Blog.Comment end json_api do type "post" # Required: JSON:API type name end actions do defaults [:create, :read, :update, :destroy] read :list_published do filter expr(published == true) end update :publish do accept [] change set_attribute(:published, true) end end end
Route Types
| Route | HTTP | Path | Description |
|---|---|---|---|
| GET | | Fetch single resource |
| GET | | List resources (filter/sort/paginate) |
| POST | | Create resource |
| PATCH | | Update resource |
| DELETE | | Destroy resource |
| GET | | Fetch related resources |
| GET | | Fetch relationship data |
| POST | | Add to relationship |
| PATCH | | Replace relationship |
| DELETE | | Remove from relationship |
Query Parameters
Standard JSON:API query parameters:
# Filter ?filter[attribute]=value # Sort (descending with -) ?sort=attribute,-other_attribute # Pagination ?page[number]=2&page[size]=10 # Includes (sideload related resources) ?include=author,comments.author