Skip to content
Scrivener pagination with headers and web linking
Elixir
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
config
lib/scrivener
test
.gitignore
.travis.yml
LICENSE
README.md
mix.exs
mix.lock

README.md

Scrivener.Headers

Build Status Hex Version Hex docs License

Helpers for paginating API responses with Scrivener and HTTP headers. Implements RFC-5988, the proposed standard for Web linking.

Setup

Add to mix.exs:

  defp deps do
    [
      # ...
      {:scrivener_headers, "~> 1.0"}
      # ...
    ]
  end

Usage

With paginate/2 we can easily set our pagination headers:

def index(conn, params) do
  page = MyApp.Person
         |> where([p], p.age > 30)
         |> order_by([p], desc: p.age)
         |> preload(:friends)
         |> MyApp.Repo.paginate(params)

  conn
  |> Scrivener.Headers.paginate(page)
  |> render("index.json", people: page.entries)
end

With curl --include we can see our new headers:

$ curl --include 'https://localhost:4000/people?page=5'
HTTP/1.1 200 OK
Link: <http://localhost:4000/people?page=1>; rel="first",
  <http://localhost:4000/people?page=30>; rel="last",
  <http://localhost:4000/people?page=6>; rel="next",
  <http://localhost:4000/people?page=4>; rel="prev"
Total: 300
Per-Page: 10

Contributing

Contributions of all types are welcomed and encouraged. Please make appropriate use of Issues and Pull Requests. All code should have test coverage.

License

MIT license. Please see LICENSE for details.

Something went wrong with that request. Please try again.