Study
Phoenix

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.

Editor Latihan

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.