Next-Gen Go REST API Framework v1.2.2

HazartGo Framework

Modern, High-Performance, Type-Safe Standalone Go Web Framework terinspirasi DX ala FastAPI & NestJS. Dilengkapi Zero-Boilerplate OpenAPI 3.1, AutoCRUD Engine, Built-in JWT, serta Hazart CLI Scaffolding.

Radix Tree Router

Routing berkecepatan tinggi berbasis net/http standar Go tanpa router eksternal.

AutoCRUD Engine

Cukup 1 struct Model, HazartGo otomatis generate 5 REST API CRUD Endpoints.

OpenAPI 3.1 Docs

Dokumentasi API interaktif otomatis di /docs & /openapi.json tanpa file YAML.

Built-in JWT & RBAC

HMAC-SHA256 JWT package serta middleware RequireRole & RequirePermission.

Overview

HazartGo hadir untuk menghilangkan boilerplate code berulang dalam pembuatan RESTful API di Go. Menghadirkan penanganan request type-safe tanpa perlu memanggil json.NewDecoder secara manual, serta auto-generating dokumentasi OpenAPI 3.1 yang selalu sinkron dengan kode Go Anda.

Installation

Tambahkan HazartGo sebagai dependensi ke proyek Go Anda:

Terminal
go get github.com/misbakhul29/hazartgo

Install CLI Tool HazartGo ke dalam sistem Anda secara global:

Terminal
go install github.com/misbakhul29/hazartgo/cmd/hazart@latest

Quick Example

Contoh sederhana membuat Web API lengkap dengan Model, AutoCRUD Engine, dan Swagger Docs:

main.go
package main

import (
	"log"

	hazart "github.com/misbakhul29/hazartgo"
	"github.com/misbakhul29/hazartgo/crud"
	"github.com/misbakhul29/hazartgo/middleware"
)

// 1. Definisi Struct Model DB & OpenAPI Specs
type User struct {
	ID    string `json:"id" path:"id" doc:"User Unique ID"`
	Name  string `json:"name" validate:"required" doc:"User Full Name"`
	Email string `json:"email" validate:"required,email" doc:"User Email Address"`
}

// 2. Controller dengan AutoCRUD Engine
type UserController struct{}

func (uc *UserController) RegisterRoutes(g *hazart.Group) {
	// Role authorization protection
	g.Use(middleware.RequireRole("admin"))

	// Auto Generate 5 REST Endpoints (GET, GET/:id, POST, PUT/:id, DELETE/:id)
	crud.AutoCRUD[User](g, "")
}

func main() {
	app := hazart.New(hazart.Config{
		Title:       "HazartGo Showcase API",
		Description: "High Performance REST API Framework",
		Version:     "1.0.0",
	})

	// Middlewares
	app.Use(middleware.Logger())
	app.Use(middleware.Recovery())
	app.Use(middleware.CORS())

	// Mount Controller
	app.MountController("/api/v1/users", &UserController{})

	log.Println("⚡ Server running on http://localhost:8080")
	log.Println("📚 Swagger UI Docs on http://localhost:8080/docs")

	app.Listen(":8080")
}
Interactive Swagger Documentation
Aplikasi otomatis menyediakan Swagger UI di http://localhost:8080/docs dan spesifikasi OpenAPI 3.1 JSON di http://localhost:8080/openapi.json.

Hazart CLI Scaffolding Tool

Daftar perintah CLI (hazart) untuk mempercepat pembuatan modul backend:

Perintah Alias Deskripsi
hazart init <project> - Inisialisasi proyek baru dengan struktur folder models, repositories, controllers, middleware, go.mod, & main.go
hazart make:resource <Name> resource Generate 1 paket lengkap: Model + Repository Thread-Safe + AutoCRUD Controller
hazart make:controller <Name> controller Generate Controller struct & RouteMeta handler
hazart make:model <Name> model Generate DB Model struct dengan tag validation & OpenAPI spec
hazart make:repository <Name> repository Generate Repository interface & memory store implementation
hazart make:middleware <Name> middleware Generate custom MiddlewareFunc handler
hazart make:auth auth Scaffold AuthController berbasis hazart/jwt
hazart update - Otomatis upgrade Hazart CLI & pustaka hazartgo di proyek ke rilis @latest

Hazart Auto-Updater

Upgrade CLI dan dependensi proyek HazartGo ke versi rilis terbaru secara otomatis:

Terminal
hazart update

AutoCRUD Engine

AutoCRUD Engine otomatis mendaftarkan 5 REST API CRUD endpoints (GET list, GET by ID, POST create, PUT update, DELETE) hanya dari 1 struct Model:

AutoCRUD Usage
func (c *ProductController) RegisterRoutes(g *hazart.Group) {
	// Otomatis generate 5 endpoints REST API CRUD:
	// GET /products, GET /products/:id, POST /products, PUT /products/:id, DELETE /products/:id
	crud.AutoCRUD[models.Product](g, "", c.repo)
}

OpenAPI 3.1 & Swagger UI

HazartGo menghasilkan spesifikasi OpenAPI 3.1 secara langsung dari tipe data Go tanpa membutuhkan generator eksternal:

OpenAPI Config
app.OpenAPI.AddSecurityScheme(hazart.SecurityBearerAuth, openapi.SecurityScheme{
	Type:         "http",
	Scheme:       "bearer",
	BearerFormat: "JWT",
})

Built-in JWT Package (hazart/jwt)

Mengelola penandatanganan dan verifikasi token JWT berbasis HMAC-SHA256 secara ringkas:

JWT Usage
import "github.com/misbakhul29/hazartgo/jwt"

jwtManager := jwt.New("my-secret-key")

// 1. Generate JWT Token
token, err := jwtManager.Sign(jwt.MapClaims{
	"sub":   "usr_123",
	"name":  "Budi Santoso",
	"roles": []string{"admin"},
}, 24*time.Hour)

// 2. Verifikasi Token
claims, err := jwtManager.Verify(token)

RBAC & Permission Authorization

Memproteksi rute berdasarkan Role atau Permission pengguna secara deklaratif:

RBAC Middleware
// Require specific role
g.Use(middleware.RequireRole("admin", "editor"))

// Require specific permission
g.Use(middleware.RequirePermission("products:write"))

Standardized Response Helpers

Helper ctx.Success dan ctx.Error memastikan format JSON response konsisten di seluruh aplikasi:

Response Envelope
// Success Response
ctx.Success(http.StatusOK, userObj, "User data retrieved successfully")

// Error Response (RFC 7807)
ctx.Error(http.StatusBadRequest, "Invalid parameter", map[string]string{"field": "email"})

API Tester Playground

Uji format JSON Response terstruktur yang dihasilkan oleh HazartGo:

// Klik 'Send Request' untuk melihat simulasi output JSON

API Reference

hazart.Config Options

Field Tipe Keterangan
Title string Judul utama API pada dokumentasi Swagger UI
Version string Versi rilis API (misal: 1.0.0)
Description string Deskripsi rincian layanan API
Contact *openapi.Contact Informasi kontak pengembang API (Name, Email, URL)
License *openapi.License Informasi lisensi software API (Name, URL)