jsonapi v0.5.0 JSONAPI.QueryParser
Implements a fully JSONAPI V1 spec for parsing a complex query string and returning elixir datastructures. The purpose is to validate and encode incoming queries and fail quickly.
Primarialy this handles:
This plug works in conjunction with a JSONAPI View as well as some plug defined configuration.
In your controller you may add
plug JSONAPI.QueryParser,
filter: ~w(title),
sort: ~w(created_at title),
view: MyView
If your controller’s index function recieves a query with params inside those
bounds it will build a JSONAPI.Config that has all the validated and parsed
fields for your usage. The final configuration will be added to assigns jsonapi_query
.
The final output will be a JSONAPI.Config
struct and will look similar to like
%JSONAPI.Config{
view: MyView,
opts: [view: MyView, sort: ["created_at", "title"], filter: ["title"]],
sort: [desc: :created_at] # Easily insertable into an ecto order_by,
filter: [title: "my title"] # Easily reduceable into ecto where clauses
includes: [comments: :user] # Easily insertable into a Repo.preload,
fields: %{"myview" => [:id, :text], "comment" => [:id, :body]}
}
The final result should allow you to build a query quickly and with little overhead. You will notice the fields section is a not as easy to work with as the others and that is a result of Ecto not supporting high quality selects quite yet. This is a WIP.
Options
:view
- The JSONAPI View which is the basis for this plug.:sort
- List of atoms which define which fields can be sorted on.:filter
- List of atoms which define which fields can be filtered on.
Summary
Functions
Callback implementation for Plug.call/2
.
Callback implementation for Plug.init/1
.