Popularity
0.5
Declining
Activity
8.2
-
4
2
0

Programming language: Go
License: MIT License
Tags: API     Go Tools     Router     Httprouter     Go     Golang     Parameters    
Latest version: v0.1.13

go-api-router alternatives and similar packages

Based on the "Go Tools" category.
Alternatively, view go-api-router alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of go-api-router or a related project?

Add another 'Go Tools' Package

README

go-api-router

Lightweight API httprouter middleware: cors, logging, and standardized error handling.

Release Build Status Report codecov Go Sponsor Donate

Table of Contents

Installation

go-api-router requires a supported release of Go. ```shell script go get -u github.com/mrz1836/go-api-router


<br/>

## Documentation
View the generated [documentation](https://pkg.go.dev/github.com/mrz1836/go-api-router)

[![GoDoc](https://godoc.org/github.com/mrz1836/go-api-router?status.svg&style=flat)](https://pkg.go.dev/github.com/mrz1836/go-api-router)

### Features
- Uses the fastest router: Julien Schmidt's [httprouter](https://github.com/julienschmidt/httprouter)
- Uses gofrs [uuid](https://github.com/gofrs/uuid) package to guarantee unique request ids
- Uses MrZ's [go-logger](https://github.com/mrz1836/go-logger) for either local or remote logging via [Log Entries (Rapid7)](https://www.rapid7.com/products/insightops/)
- Uses MrZ's [go-parameters](https://github.com/mrz1836/go-parameters) for parsing any type of incoming parameter with ease
- Added basic middleware support from Rileyr's [middleware](https://github.com/rileyr/middleware)
- Added additional CORS functionality
- Standardized error responses for API requests
- Centralized logging on all requests (requesting user info & request time)
- Custom response writer for Etag and cache support
- `GetClientIPAddress()` safely detects IP addresses behind load balancers
- `GetParams()` parses parameters only once
- `FilterMap()` removes any confidential parameters from logs
- ...and more!

<details>
<summary><strong><code>Package Dependencies</code></strong></summary>
<br/>

- Julien Schmidt's [httprouter](https://github.com/julienschmidt/httprouter) package
- Rileyr's [middleware](https://github.com/rileyr/middleware) package
- gofrs [uuid](https://github.com/gofrs/uuid) package
- MrZ's [go-logger](https://github.com/mrz1836/go-logger) and [go-parameters](https://github.com/mrz1836/go-parameters) package
</details>

<details>
<summary><strong><code>Library Deployment</code></strong></summary>
<br/>

[goreleaser](https://github.com/goreleaser/goreleaser) for easy binary or library deployment to Github and can be installed via: `brew install goreleaser`.

The [.goreleaser.yml](.goreleaser.yml) file is used to configure [goreleaser](https://github.com/goreleaser/goreleaser).

Use `make release-snap` to create a snapshot version of the release, and finally `make release` to ship to production.
</details>

<details>
<summary><strong><code>Makefile Commands</code></strong></summary>
<br/>

View all `makefile` commands
```shell script
make help

List of all current commands:

all                    Runs lint, test and vet
clean                  Remove previous builds and any test cache data
clean-mods             Remove all the Go mod cache
coverage               Shows the test coverage
godocs                 Sync the latest tag with GoDocs
help                   Show this help message
install                Install the application
install-go             Install the application (Using Native Go)
lint                   Run the golangci-lint application (install if not found)
release                Full production release (creates release in Github)
release                Runs common.release then runs godocs
release-snap           Test the full release (build binaries)
release-test           Full production test release (everything except deploy)
replace-version        Replaces the version in HTML/JS (pre-deploy)
run-examples           Runs all the examples
tag                    Generate a new tag and push (tag version=0.0.0)
tag-remove             Remove a tag if found (tag-remove version=0.0.0)
tag-update             Update an existing tag to current commit (tag-update version=0.0.0)
test                   Runs vet, lint and ALL tests
test-short             Runs vet, lint and tests (excludes integration tests)
test-travis            Runs all tests via Travis (also exports coverage)
test-travis-short      Runs unit tests via Travis (also exports coverage)
uninstall              Uninstall the application (and remove files)
update-linter          Update the golangci-lint package (macOS only)
vet                    Run the Go vet application

Examples & Tests

All unit tests and [examples](examples/examples.go) run via Travis CI and uses Go version 1.15.x. View the [deployment configuration file](.travis.yml).

Run all tests (including integration tests) ```shell script make test


Run tests (excluding integration tests)
```shell script
make test-short

Run the examples: ```shell script make run-examples


<br/>

## Benchmarks
Run the Go benchmarks:
```shell script
make bench

Code Standards

Read more about this Go project's [code standards](CODE_STANDARDS.md).

Usage

View the [examples](examples/examples.go)

Basic implementation:

package main

import (
    "fmt"
    "net/http"

    "github.com/julienschmidt/httprouter"
    "github.com/mrz1836/go-api-router"
    "github.com/mrz1836/go-logger"
)

func main() {
    // Load the router & middleware
    router := apirouter.New()

    // Set the main index page (navigating to slash)
    router.HTTPRouter.GET("/", router.Request(index))

    // Serve the router!
    logger.Fatalln(http.ListenAndServe(":3000", router.HTTPRouter))
}

func index(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) {
    _, _ = fmt.Fprint(w, "This is a simple route example!")
}

Maintainers

MrZ

Contributing

View the [contributing guidelines](CONTRIBUTING.md) and please follow the [code of conduct](CODE_OF_CONDUCT.md).

How can I help?

All kinds of contributions are welcome :raised_hands:! The most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon:. You can also support this project by becoming a sponsor on GitHub :clap: or by making a bitcoin donation to ensure this journey continues indefinitely! :rocket:

License

License


*Note that all licence references and agreements mentioned in the go-api-router README section above are relevant to that project's source code only.