Radix Tree Router
Routing berkecepatan tinggi berbasis net/http standar Go tanpa router eksternal.
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.
Routing berkecepatan tinggi berbasis net/http standar Go tanpa router eksternal.
Cukup 1 struct Model, HazartGo otomatis generate 5 REST API CRUD Endpoints.
Dokumentasi API interaktif otomatis di /docs & /openapi.json tanpa file YAML.
HMAC-SHA256 JWT package serta middleware RequireRole & RequirePermission.
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.
Tambahkan HazartGo sebagai dependensi ke proyek Go Anda:
go get github.com/misbakhul29/hazartgo
Install CLI Tool HazartGo ke dalam sistem Anda secara global:
go install github.com/misbakhul29/hazartgo/cmd/hazart@latest
Contoh sederhana membuat Web API lengkap dengan Model, AutoCRUD Engine, dan Swagger Docs:
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") }
http://localhost:8080/docs dan spesifikasi OpenAPI 3.1 JSON di http://localhost:8080/openapi.json.
Daftar perintah CLI (hazart) untuk mempercepat pembuatan modul backend:
hazart init <project>
models, repositories, controllers, middleware, go.mod, & main.go.
hazart make:resource <Name>
Alias: resource
hazart make:controller <Name> [--withDB]
Alias: controller
--withDB (atau --db) untuk otomatis memasang GORM DB connection & AutoCRUD Engine.
hazart make:model <Name>
Alias: model
hazart make:repository <Name>
Alias: repository
hazart make:middleware <Name>
Alias: middleware
hazart make:auth
Alias: auth
hazart/jwt.
hazart make:migration <Name>
Alias: migration
hazart make:seeder <Name>
Alias: seeder
hazart update
@latest.
hazart help
Alias: -h, --help
Upgrade CLI dan dependensi proyek HazartGo ke versi rilis terbaru secara otomatis:
hazart update
HazartGo menyediakan helper hazart.OpenDB untuk menghubungkan database GORM (PostgreSQL, MySQL, atau SQLite CGO-free) dan menjalankan migrasi skema secara otomatis dalam 1 langkah:
// 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 otomatis mendaftarkan 5 REST API CRUD endpoints (GET list, GET by ID, POST create, PUT update, DELETE) hanya dari 1 struct Model:
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) }
HazartGo menghasilkan spesifikasi OpenAPI 3.1 secara langsung dari tipe data Go tanpa membutuhkan generator eksternal:
app.OpenAPI.AddSecurityScheme(hazart.SecurityBearerAuth, openapi.SecurityScheme{
Type: "http",
Scheme: "bearer",
BearerFormat: "JWT",
})
Mengelola penandatanganan dan verifikasi token JWT berbasis HMAC-SHA256 secara ringkas:
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)
Memproteksi rute berdasarkan Role atau Permission pengguna secara deklaratif:
// Require specific role g.Use(middleware.RequireRole("admin", "editor")) // Require specific permission g.Use(middleware.RequirePermission("products:write"))
Helper ctx.Success dan ctx.Error memastikan format JSON response konsisten di seluruh aplikasi:
// 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"})
Uji format JSON Response terstruktur yang dihasilkan oleh HazartGo:
// Klik 'Send Request' untuk melihat simulasi output JSON
Title
string
Version
string
Description
string
Contact
*openapi.Contact
License
*openapi.License