Inquisitor JSONAPI
Easily build composable queries for Ecto for JSON API endpoints using Inquisitor
This plugin for Inquisitor aims to implement all of the relevant Fetching Data section for the JSON API spec
Make sure you reference Inquisitor's Usage section first
Progress
Include
JSON API Include (Ecto preload) Plugin
Usage
Use Inquisitor.JsonApi.IncludeafterInquisitor
defmodule MyApp.PostController do
use MyAp.Web, :controller
use Inquisitor
use Inquisitor.JsonApi.Include
...This plugin follows the spec for sorting with JSON API. All requests should conform to that URL schema for this plugin to work.
[GET] http://example.com/posts?include=tags,author
Refer to the Docs for this module on how to enable preloading properly.
Sort
JSON API Sorting Plugin
Usage
Use Inquisitor.JsonApi.SortafterInquisitor
defmodule MyApp.PostController do
use MyAp.Web, :controller
use Inquisitor
use Inquisitor.JsonApi.Sort
...This plugin follows the spec for sorting with JSON API. All requests should conform to that URL schema for this plugin to work.
[GET] http://example.com/posts?sort=-create,title
The plugin with correct apply ASC and DESC sort order to the built
query.
Page
JSON API Pagination Plugin
Usage
Use Inquisitor.JsonApi.PageafterInquisitor
defmodule MyApp.PostController do
use MyAp.Web, :controller
use Inquisitor
use Inquisitor.JsonApi.Page
...This plugin follows the spec for pagination with JSON API. All requests should conform to that URL schema for this plugin to work.
[GET] http://example.com/posts?page[limit]=10&page[offset]=2[GET] http://example.com/posts?page[size]=10&page[number]=2
Cursor pagination is not yet implemented.
You may need to calculate certain page data to generate pagination
links. You can use page_data/3 that this module imports for you.
{query, page_data} =
User
|> build_query(conn, params)
|> page_data(repo, params)
links = build_links(page_data)
meta = build_meta(page_data)
users = Repo.all(query)Filter
JSON API Filtering Plugin
Usage
Use Inquisitor.JsonApi.FilterafterInquisitor
defmodule MyApp.PostController do
use MyAp.Web, :controller
use Inquisitor
use Inquisitor.JsonApi.Filter
...This plugin follows the spec for pagination with JSON API. All requests should conform to that URL schema for this plugin to work.
[GET] http://example.com/posts?filter[name]=Brian&filter[age]=99
By default Filter is no-op. You must define a custom
build_filter_query/4 handler:
def build_filter_query(query, "name", name, _conn) do
Ecto.Query.where(query, [r], r.name == ^name)
endAuthors
We are very thankful for the many contributors
Versioning
This library follows Semantic Versioning
Want to help?
Please do! We are always looking to improve this library. Please see our Contribution Guidelines on how to properly submit issues and pull requests.
Legal
DockYard, Inc. © 2017