Routing
Di CodeIgniter 3, kamu mendefinisikan routes di file application/config/routes.php. Di GoIgniter, routes didefinisikan langsung di main.go atau menggunakan fitur AutoRoute (dibahas di bab selanjutnya).
Basic Routes
Section titled “Basic Routes”Perbandingan CI3 dengan GoIgniter:
$route['products'] = 'products/index';$route['products/(:num)'] = 'products/show/$1';$route['products/create'] = 'products/create';app.GET("/products", listProducts)app.GET("/products/:id", showProduct)app.GET("/products/create", createProductForm)Sintaksnya lebih eksplisit - kamu langsung tahu HTTP method apa yang digunakan.
HTTP Methods
Section titled “HTTP Methods”GoIgniter mendukung semua HTTP methods standar:
app.GET("/users", getUsers) // Ambil dataapp.POST("/users", createUser) // Buat data baruapp.PUT("/users/:id", updateUser) // Update seluruh dataapp.PATCH("/users/:id", patchUser) // Update sebagian dataapp.DELETE("/users/:id", deleteUser) // Hapus dataapp.OPTIONS("/users", optionsUser) // CORS preflightapp.HEAD("/users", headUsers) // Cek header sajaRoute Parameters
Section titled “Route Parameters”Untuk menangkap bagian dinamis dari URL, gunakan :nama:
app.GET("/users/:id", func(c *core.Context) error { // Ambil parameter dari URL id := c.Param("id")
return c.JSON(200, core.Map{ "user_id": id, })})
// GET /users/123 → {"user_id": "123"}Kamu juga bisa punya multiple parameters:
app.GET("/users/:userId/posts/:postId", func(c *core.Context) error { userId := c.Param("userId") postId := c.Param("postId")
return c.JSON(200, core.Map{ "user_id": userId, "post_id": postId, })})
// GET /users/5/posts/42 → {"user_id": "5", "post_id": "42"}Query Parameters
Section titled “Query Parameters”Untuk mengambil query string (?key=value):
app.GET("/search", func(c *core.Context) error { // GET /search?q=golang&page=2 keyword := c.Query("q") // "golang" page := c.QueryDefault("page", "1") // "2" atau default "1"
return c.JSON(200, core.Map{ "keyword": keyword, "page": page, })})Route Groups
Section titled “Route Groups”Untuk mengelompokkan routes dengan prefix yang sama (misalnya untuk admin panel atau API versioning):
// Tanpa middlewareapi := app.Group("/api/v1")api.GET("/users", listUsers) // GET /api/v1/usersapi.POST("/users", createUser) // POST /api/v1/users
// Dengan middlewareadmin := app.Group("/admin", authMiddleware, adminOnlyMiddleware)admin.GET("/dashboard", dashboard) // GET /admin/dashboardadmin.GET("/users", adminUsers) // GET /admin/usersGroup juga bisa nested:
api := app.Group("/api")v1 := api.Group("/v1")v1.GET("/products", listProductsV1) // GET /api/v1/products
v2 := api.Group("/v2")v2.GET("/products", listProductsV2) // GET /api/v2/productsStatic Files
Section titled “Static Files”Untuk serve file statis (CSS, JS, images):
// URL /static/css/style.css → file ./public/css/style.cssapp.Static("/static/", "./public")Struktur folder:
public/├── css/│ └── style.css├── js/│ └── app.js└── images/ └── logo.pngHandler Function
Section titled “Handler Function”Setiap route membutuhkan handler function dengan signature:
func(c *core.Context) errorHandler menerima *core.Context yang berisi semua informasi request dan method untuk mengirim response.
app.GET("/example", func(c *core.Context) error { // Akses request method := c.Method() // "GET" path := c.Path() // "/example" ip := c.IP() // IP address client header := c.Header("User-Agent")
// Kirim response return c.JSON(200, core.Map{"status": "ok"})})Catatan Penting
Section titled “Catatan Penting”Mendefinisikan routes secara manual seperti di atas cocok untuk API atau route yang kompleks. Tapi untuk aplikasi web dengan banyak controller, cara ini bisa jadi repetitif.
Kabar baiknya: GoIgniter punya AutoRoute - fitur andalan yang membuat routing semudah di CI3. Cukup buat file controller, dan routes otomatis terbuat!
Penasaran dengan AutoRoute? Lanjut ke Controller & AutoRoute.