Routing & Pipeline (Plug)
Penjelasan
Routing di Phoenix didefinisikan di router.ex memakai macro seperti get, post, resources di dalam blok scope. Setiap request yang masuk akan melewati sebuah pipeline, yaitu rangkaian plug (modul yang memproses conn/request) yang dijalankan berurutan sebelum sampai ke controller, misalnya pipeline :browser yang menambahkan session dan CSRF protection, atau pipeline :api yang hanya menerima format JSON. Plug sendiri adalah spesifikasi sederhana: fungsi atau modul yang menerima struct Conn dan mengembalikan Conn yang sudah dimodifikasi. Karena semuanya berbasis transformasi Conn, kita bisa menyusun middleware custom dengan mudah, tinggal menambahkan plug baru ke dalam pipeline yang sesuai.
Contoh Konsep
defmodule TokoAppWeb.Router do
use TokoAppWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", TokoAppWeb do
pipe_through :browser
get "/", PageController, :home
resources "/produk", ProdukController
end
scope "/api", TokoAppWeb do
pipe_through :api
get "/produk", ApiProdukController, :index
end
end
Praktikum
Tambahkan route baru GET /tentang yang memakai pipeline :browser dan mengarah ke PageController, aksi :tentang.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Kelompokkan route berdasarkan pipeline yang berbeda menggunakan scope terpisah, jangan campur route HTML dan JSON dalam satu pipeline yang sama.