Skip to content

๐ŸŒ A lightweight API middleware for Julien Schmidt's router: cors, logging, and standardized error handling

License

Notifications You must be signed in to change notification settings

mrz1836/go-api-router

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

๐ŸŒย ย go-api-router

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


Release Go Version License


CI / CD ย ย  Build Last Commit ย ย ย ย  Quality ย ย  Go Report Coverage
Security ย ย  Scorecard Security ย ย ย ย  Community ย ย  Contributors Bitcoin


Project Navigation

๐Ÿš€ย Installation ๐Ÿงชย Examplesย &ย Tests ๐Ÿ“šย Documentation
๐Ÿคย Contributing ๐Ÿ› ๏ธย Codeย Standards โšกย Benchmarks
๐Ÿค–ย AIย Usage โš–๏ธย License ๐Ÿ‘ฅย Maintainers

๐Ÿ“ฆ Installation

go-api-router requires a supported release of Go.

go get github.com/mrz1836/go-api-router

๐Ÿ“š Documentation

View the generated documentation

GoDoc

Features

  • Uses the fastest router: Julien Schmidt's httprouter
  • Uses gofr's uuid package to guarantee unique request ids
  • Uses MrZ's go-logger for either local or remote logging via Log Entries (Rapid7)
  • Uses MrZ's go-parameters for parsing any type of incoming parameter with ease
  • Optional: NewRelic support!
  • Added basic middleware support from Rileyr's middleware
  • Optional: JWT Authentication (middleware)
  • Added additional CORS functionality
  • Standardized error responses for API requests
  • Centralized logging on all requests (requesting user info and 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!
Development Setup (Getting Started)

Install MAGE-X build tool for development:

# Install MAGE-X for development and building
go install github.com/mrz1836/mage-x/cmd/magex@latest
magex update:install
Library Deployment

This project uses goreleaser for streamlined binary and library deployment to GitHub. To get started, install it via:

brew install goreleaser

The release process is defined in the .goreleaser.yml configuration file.

Then create and push a new Git tag using:

magex version:bump bump=patch push=true branch=master

This process ensures consistent, repeatable releases with properly versioned artifacts and citation metadata.

Build Commands

View all build commands

magex help
GitHub Workflows

๐ŸŽ›๏ธ The Workflow Control Center

All GitHub Actions workflows in this repository are powered by configuration files: .env.base (default configuration) and optionally .env.custom (project-specific overrides) โ€“ your one-stop shop for tweaking CI/CD behavior without touching a single YAML file! ๐ŸŽฏ

Configuration Files:

  • .env.base โ€“ Default configuration that works for most Go projects
  • .env.custom โ€“ Optional project-specific overrides

This magical file controls everything from:

  • ๐Ÿš€ Go version matrix (test on multiple versions or just one)
  • ๐Ÿƒ Runner selection (Ubuntu or macOS, your wallet decides)
  • ๐Ÿ”ฌ Feature toggles (coverage, fuzzing, linting, race detection, benchmarks)
  • ๐Ÿ›ก๏ธ Security tool versions (gitleaks, nancy, govulncheck)
  • ๐Ÿค– Auto-merge behaviors (how aggressive should the bots be?)
  • ๐Ÿท๏ธ PR management rules (size labels, auto-assignment, welcome messages)

Pro tip: Want to disable code coverage? Just add ENABLE_CODE_COVERAGE=false to your .env.custom to override the default in .env.base and push. No YAML archaeology required!


Workflow Name Description
auto-merge-on-approval.yml Automatically merges PRs after approval and all required checks, following strict rules.
codeql-analysis.yml Analyzes code for security vulnerabilities using GitHub CodeQL.
dependabot-auto-merge.yml Automatically merges Dependabot PRs that meet all requirements.
fortress.yml Runs the GoFortress security and testing workflow, including linting, testing, releasing, and vulnerability checks.
pull-request-management.yml Labels PRs by branch prefix, assigns a default user if none is assigned, and welcomes new contributors with a comment.
scorecard.yml Runs OpenSSF Scorecard to assess supply chain security.
stale.yml Warns about (and optionally closes) inactive issues and PRs on a schedule or manual trigger.
sync-labels.yml Keeps GitHub labels in sync with the declarative manifest at .github/labels.yml.
Updating Dependencies

To update all dependencies (Go modules, linters, and related tools), run:

magex deps:update

This command ensures all dependencies are brought up to date in a single step, including Go modules and any managed tools. It is the recommended way to keep your development environment and CI in sync with the latest versions.


๐Ÿงช Examples & Tests

All unit tests and fuzz tests run via GitHub Actions and use Go version 1.24.x. View the configuration file.

Run all tests (fast):

magex test

Run all tests with race detector (slower):

magex test:race

โšก Benchmarks

Run the Go benchmarks:

magex bench

๐Ÿ› ๏ธ Code Standards

Read more about this Go project's code standards.


๐Ÿค– AI Usage & Assistant Guidelines

Read the AI Usage & Assistant Guidelines for details on how AI is used in this project and how to interact with AI assistants.


๐Ÿ‘ฅ Maintainers

MrZ
MrZ

๐Ÿค Contributing

View the contributing guidelines and please follow the code of conduct.

How can I help?

All kinds of contributions are welcome ๐Ÿ™Œ! The most basic way to show your support is to star ๐ŸŒŸ the project, or to raise issues ๐Ÿ’ฌ. You can also support this project by becoming a sponsor on GitHub ๐Ÿ‘ or by making a bitcoin donation to ensure this journey continues indefinitely! ๐Ÿš€

Stars


๐Ÿ“ License

License

About

๐ŸŒ A lightweight API middleware for Julien Schmidt's router: cors, logging, and standardized error handling

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages