Next-Gen Go REST API Framework v1.3.3

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:

hazart init <project>
Inisialisasi proyek baru dengan struktur folder models, repositories, controllers, middleware, go.mod, & main.go.
hazart make:resource <Name> Alias: resource
Generate 1 paket lengkap: Model + Repository Thread-Safe + AutoCRUD Controller.
hazart make:controller <Name> [--withDB] Alias: controller
Generate Controller struct. Gunakan flag --withDB (atau --db) untuk otomatis memasang GORM DB connection & AutoCRUD Engine.
hazart make:model <Name> Alias: model
Generate DB Model struct dengan tag validation & OpenAPI spec.
hazart make:repository <Name> Alias: repository
Generate Repository interface & memory store implementation.
hazart make:middleware <Name> Alias: middleware
Generate custom MiddlewareFunc handler.
hazart make:auth Alias: auth
Scaffold AuthController berbasis hazart/jwt.
hazart make:migration <Name> Alias: migration
Generate berkas skema migrasi database baru (Up & Down schema).
hazart make:seeder <Name> Alias: seeder
Generate berkas seeder database untuk pengisian data awal.
hazart update
Otomatis upgrade Hazart CLI & pustaka hazartgo di proyek ke rilis @latest.
hazart help Alias: -h, --help
Menampilkan daftar lengkap seluruh perintah CLI, flag, dan contoh penggunaan interaktif.

Hazart Auto-Updater

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

Terminal
hazart update

Database Connection & Auto-Migration

HazartGo menyediakan helper hazart.OpenDB untuk menghubungkan database GORM (PostgreSQL, MySQL, atau SQLite CGO-free) dan menjalankan migrasi skema secara otomatis dalam 1 langkah:

Database Connection & Auto-Migrate
// 1. Inisialisasi DB Connection & AutoMigrate Schema
db, err := hazart.OpenDB(hazart.DBConfig{
	Driver:      "postgres", // "postgres", "mysql", atau "sqlite"
	Host:        "localhost",
	Port:        5432,
	User:        "postgres",
	Password:    "secret",
	DBName:      "my_db",
	AutoMigrate: []any{&models.User{}, &models.Product{}},
})
if err != nil {
	log.Fatalf("Gagal terhubung ke database: %v", err)
}

// 2. Inject DB instance ke Controller / Repository & Mount
productController := controllers.NewProductController(db)
app.MountController("/api/v1/products", productController)

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

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).