37 poin oleh GN⁺ 2025-11-03 | Belum ada komentar. | Bagikan ke WhatsApp
  • Struktur URL bekerja melampaui sekadar alamat, sebagai sarana untuk menyimpan dan memulihkan status aplikasi
  • Seperti halaman unduhan PrismJS, ditunjukkan contoh di mana satu URL saja dapat mereproduksi sepenuhnya pengaturan tema, bahasa, dan plugin
  • Tiap komponen seperti path, query parameter, dan fragment merepresentasikan berbagai status seperti navigasi hierarkis, pemfilteran, dan navigasi klien
  • Hal-hal seperti filter pencarian, pagination, mode tampilan, dan rentang tanggal cocok dimasukkan ke URL, sedangkan informasi sensitif atau status UI sementara tidak cocok
  • URL yang dirancang dengan baik meningkatkan kemudahan berbagi, prediktabilitas, dan efisiensi caching, serta memperkuat keandalan aplikasi web dan pengalaman pengguna

Potensi URL

  • URL bukan sekadar alamat resource, tetapi juga berfungsi sebagai antarmuka pengguna (UI) dan kontainer status
    • Secara otomatis mempertahankan status dalam berbagi, bookmark, riwayat browser, deep link, dan sebagainya
    • Telah bekerja sebagai mekanisme dasar manajemen status web sejak 1991
  • Setiap komponen URL merepresentasikan jenis status yang berbeda
    • Path: penjelajahan resource secara hierarkis (/users/123/posts)
    • Query: filter, opsi, dan pengaturan (?theme=dark&lang=en)
    • Fragment: lokasi di dalam dokumen atau routing SPA (#features, #/dashboard)
  • Fitur Text Fragments memungkinkan tautan langsung ke teks tertentu di dalam halaman

Pola query parameter

  • Menggunakan delimiter untuk menaruh beberapa nilai dalam satu key (?tags=frontend,react,hooks)
  • Menserialisasi data bertingkat ke JSON atau Base64 (?config=eyJyaWNrIjoicm9sbCJ9==)
  • Boolean flag direpresentasikan melalui keberadaan key (?mobile)
  • Bracket notation mengekspresikan banyak nilai dalam bentuk tags[]=frontend&tags[]=react
    • Diakui otomatis oleh qs Node atau middleware Express, tetapi belum distandardisasi
  • Intinya adalah menjaga konsistensi

Contoh representasi status melalui URL

  • PrismJS: menyimpan seluruh pengaturan tema, bahasa, dan plugin di hash URL
  • GitHub: menyorot rentang baris kode tertentu dengan #L108-L136
  • Google Maps: memasukkan koordinat, level zoom, dan tipe peta ke dalam URL
  • Figma: membagikan konteks kerja seperti posisi kanvas, zoom, dan elemen terpilih melalui URL
  • Situs e-commerce: memulihkan status pencarian dengan memasukkan filter, pengurutan, dan rentang harga ke URL

Pola rekayasa frontend

  • Status yang cocok dimasukkan ke URL
    • kata kunci pencarian, filter, halaman dan pengurutan, mode tampilan, rentang tanggal, tab aktif, konfigurasi UI, feature flag
  • Status yang tidak cocok untuk URL
    • informasi sensitif seperti kata sandi dan token, status UI sementara, input yang belum disimpan, data berukuran besar, status frekuensi tinggi
  • Kriteria penilaian: apakah pengguna lain harus melihat status yang sama saat mengklik URL yang sama

Implementasi JavaScript

  • API URLSearchParams memungkinkan pembacaan dan penulisan query parameter
  • pushState menambahkan entri riwayat baru, replaceState memperbarui entri saat ini
  • Event popstate memulihkan UI saat pengguna menekan tombol kembali di browser

Implementasi React

  • Hook useSearchParams dari React Router memungkinkan pengelolaan status URL secara ringkas
    • Saat membaca atau memperbarui parameter, URL dan UI otomatis tersinkronisasi

Praktik terbaik manajemen status URL

  • Jangan masukkan nilai default ke URL (cukup pertahankan ?theme=dark, nilai default ditangani dalam kode)
  • Cegah pembaruan URL berlebihan saat mengetik dengan debouncing (lodash.debounce)
  • pushState vs replaceState
    • pushState: untuk status yang bisa ditelusuri kembali seperti perubahan filter atau perpindahan halaman
    • replaceState: untuk perubahan halus seperti input pencarian

Melihat URL sebagai kontrak

  • URL yang dirancang dengan baik berperan sebagai kontrak eksplisit antara aplikasi dan pengguna
    • Menjelaskan batas antara status publik/pribadi, klien/server, dan status berbagi/sesi
  • URL yang mudah dibaca menjelaskan maksud dan bisa dipahami manusia maupun mesin
    • Bentuk seperti example.com/products/laptop?color=silver&sort=price lebih unggul dalam menyampaikan makna
  • Peningkatan efisiensi caching
    • URL yang sama dianggap sebagai resource yang sama sehingga tingkat cache hit meningkat
    • Variasi cache dapat dikendalikan dengan query parameter
  • Manajemen versi dan eksperimen
    • API version dan pengujian A/B dapat dibedakan dengan ?v=2, ?beta=true, ?experiment=new-ui

Antipola yang harus dihindari

  • Di SPA hanya mempertahankan status di memori, sehingga status hilang saat halaman dimuat ulang
  • Memasukkan informasi sensitif ke URL (?password=secret123)
  • Nama parameter yang tidak jelas (?foo=true&bar=2 alih-alih ?mobile=true&page=2)
  • Mengenkode JSON kompleks ke Base64, sehingga menghasilkan URL yang terlalu panjang
  • Melewati batas panjang URL (ada batasan dari browser, server, dan CDN)
  • Melumpuhkan tombol kembali (terjadi jika replaceState disalahgunakan)

Kesimpulan

  • URL yang baik bukan hanya menunjuk konten, tetapi juga mengekspresikan dialog antara pengguna dan aplikasi
  • URL adalah sarana manajemen status tertua dan paling elegan untuk memuat niat, konteks, dan kemampuan berbagi
  • Meski ada alat manajemen status kompleks seperti Redux, MobX, Zustand, dan Recoil,
    tidak melupakan fitur dasar bernama URL adalah kekuatan sejati web
  • Aplikasi yang kehilangan status saat dimuat ulang sedang mengabaikan sifat hakiki web

Belum ada komentar.

Belum ada komentar.