Awesome Go

tome

CategoryUtilities
SubcategoryUtilities
Stars0

Tome was designed to paginate simple RESTful APIs

About tome

build Coverage Status GoDoc Go Report Card GitHub license

Package tome was designed to paginate simple RESTful APIs.

Installation

go get -u github.com/cyruzin/tome

Usage

To get started, import the tome package and initiate the pagination:

import "github.com/cyruzin/tome"

// Post type is a struct for a single post.
type Post struct {
	Title string `json:"title"`
	Body  string `json:"body"`
}

// Posts type is a struct for multiple posts.
type Posts []*Post

// Result type is a struct of posts with pagination.
type Result struct {
	Data *Posts `json:"data"`
	*tome.Chapter
}

// GetPosts gets the latest 10 posts with pagination.
func GetPosts(w http.ResponseWriter, r *http.Request) {
	// Creating a tome chapter with links.
	chapter := &tome.Chapter{
		// Setting base URL.
		BaseURL: "http://yourapi.com/v1/posts",
		// Enabling link results.
		Links: true,
		// Page that you captured in params inside you handler.
		NewPage: 2,
		// Total of pages, this usually comes from a SQL query total rows result.
		TotalResults: model.GetPostsTotalResults(),
	}

	// Paginating the results.
	if err := chapter.Paginate(); err != nil { 
		w.WriteHeader(http.StatusUnprocessableEntity)  // Setting status 422.
	        json.NewEncoder(w).Encode(err) // Returning JSON with an error.
		return
	}

	// Here you pass the offset and limit.
	database, err := model.GetPosts(chapter.Offset, chapter.Limit)
	if err != nil {
		w.WriteHeader(http.StatusUnprocessableEntity)  // Setting status 422.
	        json.NewEncoder(w).Encode(err) // Returning JSON with an error.
		return
	}

	// Mocking results with pagination.
	res := &Result{Data: database, Chapter: chapter}
    
	w.WriteHeader(http.StatusOK)  // Setting status 200.
	json.NewEncoder(w).Encode(res) // Returning success JSON.
}

Output:

{
 "data": [
  {
   "title": "What is Lorem Ipsum?",
   "body": "Lorem Ipsum is simply dummy text of the printing and..."
  },
  {
   "title": "Why do we use it?",
   "body": "It is a long established fact that a reader will be..."
  }
 ],
 "base_url": "http://yourapi.com/v1/posts",
 "next_url": "http://yourapi.com/v1/posts?page=3",
 "prev_url": "http://yourapi.com/v1/posts?page=1",
 "per_page": 10,
 "current_page": 2,
 "last_page": 30,
 "total_results": 300
}

Performance

Without links:

Iterationsns/opB/opallocs/op
2000000007.8000

With links:

Iterationsns/opB/opallocs/op
10000000133962

Frequently Asked Questions

What is tome?

tome is a Utilities library for the Go programming language. Tome was designed to paginate simple RESTful APIs

How do I install tome?

Install tome with the Go module system using `go get cyruzin/tome`. Check the repository for the current installation instructions.

What category does tome belong to?

tome is listed under Utilities, specifically Utilities.

← Back to Utilities