Skip to main content

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.

Quellinformationen

Repository
diegosouzapw/awesome-omni-skill
Letzte Quellaktivität
2. März 2026 um 12:15
Erkannte Sprache von SKILL.md
Englisch
Sterne
62
Forks
20

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
ash-json-api
description
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.
# 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: ```elixir 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: ```elixir 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` | GET | `/posts/:id` | Fetch single resource | | `index` | GET | `/posts` | List resources (filter/sort/paginate) | | `post` | POST | `/posts` | Create resource | | `patch` | PATCH | `/posts/:id` | Update resource | | `delete` | DELETE | `/posts/:id` | Destroy resource | | `related` | GET | `/posts/:id/comments` | Fetch related resources | | `relationship` | GET | `/posts/:id/relationships/comments` | Fetch relationship data | | `post_to_relationship` | POST | `/posts/:id/relationships/comments` | Add to relationship | | `patch_relationship` | PATCH | `/posts/:id/relationships/comments` | Replace relationship | | `delete_from_relationship` | DELETE | `/posts/:id/relationships/comments` | 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 ```
Auf GitHub ansehen