Pembuatan Route & Validasi OpenAPI
Biawak memadukan Hono Router dan Hono OpenAPI untuk memberikan pengalaman pembuatan route yang sangat kuat. Setiap endpoint yang Anda buat secara otomatis tervalidasi oleh Zod dan langsung didokumentasikan ke dalam Swagger UI.
β‘ Pembuatan Route Instan via CLI
Section titled ββ‘ Pembuatan Route Instan via CLIβGunakan Biawak Generator untuk membuat route kosong baru secara instan:
bun run make route product
Hasil: Membuat berkas template route baru di src/routes/product.ts.
π Struktur Penulisan Route
Section titled βπ Struktur Penulisan RouteβBerikut adalah contoh struktur route yang dihasilkan dengan validasi request body Zod dan dokumentasi OpenAPI:
import { Hono } from "hono";
import { describeRoute, resolver } from "hono-openapi";
import z from "zod";
const productRouter = new Hono();
// Definisikan Skema Zod
const CreateProductSchema = z.object({
name: z.string().min(3, "Nama minimal 3 karakter"),
price: z.number().positive("Harga harus lebih dari 0"),
});
productRouter.post(
"/",
describeRoute({
tags: ["Product"],
summary: "Tambah produk baru",
description: "Membuat data produk baru ke dalam database",
validate: {
body: resolver(CreateProductSchema), // Validasi otomatis request body
},
responses: {
201: {
description: "Produk berhasil dibuat",
content: {
"application/json": {
schema: resolver(
z.object({
success: z.boolean(),
id: z.string(),
})
),
},
},
},
},
}),
async (c) => {
const body = await c.req.json();
// Body dijamin valid karena telah melewati middleware resolver Zod di atas
return c.json({
success: true,
id: "prod_12345",
}, 201);
}
);
export default productRouter;
π Memasang (Mount) Route ke Aplikasi
Section titled βπ Memasang (Mount) Route ke AplikasiβAgar route dapat diakses oleh client, mount router baru tersebut ke dalam router utama di src/routes/index.ts:
import { Hono } from "hono";
import productRouter from "./product.js";
const apiRouter = new Hono();
// Daftarkan route baru dengan prefiks path
apiRouter.route("/products", productRouter);
export default apiRouter;
Dengan mendaftarkan route ke apiRouter, endpoint tersebut kini otomatis terdokumentasi dan dapat dicoba secara interaktif di Swagger UI (http://localhost:8000/api/doc).
