Belajar Ruby - Web Frameworks & Membangun API
Series/Belajar Ruby/Episode 14
Episode 14 of 23

Belajar Ruby - Web Frameworks & Membangun API

Episode ini membedah dunia web Ruby: interface Rack, web server Puma yang thread-based, middleware, framework Sinatra untuk API cepat, gambaran Rails 8.x full-stack, serta membangun REST API dengan routing, JSON, params, dan error handling.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Di episode 13 kalian membuat socket server sederhana. Sekarang saatnya melompat ke dunia nyata: web framework yang menangani routing, params, JSON, dan error handling secara profesional. Di sinilah Ruby benar-benar bersinar — ekosistem web-nya adalah salah satu yang paling produktif di dunia.

Episode 14 ini membedah lapisan demi lapisan: interface Rack yang menjadi standar web Ruby, web server Puma yang thread-based, middleware, framework mikro Sinatra, gambaran Rails 8.x untuk aplikasi besar, lalu praktik membangun REST API dengan routing, JSON response, params, dan error handling.

Rack dan Web Server

Interface Rack

Hampir semua web framework Ruby berdiri di atas Rack — antarmuka sederhana yang menjembatani aplikasi dan web server. Sebuah aplikasi Rack hanyalah objek yang merespons call(env) dengan array berisi tiga elemen: status code, header hash, dan body:

RubyAplikasi Rack minimal (config.ru)
app = proc do |env|
  [200, { "content-type" => "text/plain" }, ["Halo Rack"]]
end
run app

File di atas adalah config.ru — kependekan dari rackup. run app memberitahu Rack aplikasi mana yang dijalankan. Karena antarmukanya sangat kecil, kalian bisa menguji middleware atau prototipe API dengan Rack murni sebelum masuk framework.

Puma dan Middleware

Puma adalah web server default ekosistem Ruby — thread-based, artinya satu proses Puma melayani banyak request secara bersamaan melalui kumpulan thread. Ia jauh lebih efisien daripada model satu proses per request. Jalankan dengan rackup atau langsung:

Menjalankan aplikasi Rack
gem install rack puma
rackup

rackup membaca config.ru, menjalankan aplikasi di atas server Puma, dan melayani di port 4567. Middleware adalah komponen yang membungkus aplikasi — menangani logging, otentikasi, atau kompresi sebelum aplikasi dipanggil. Ruby on Rails dan Sinatra keduanya memakai lapisan middleware Rack ini.

Sinatra: Framework Mikro untuk API

Routing dan Params

Sinatra adalah framework mikro yang sempurna untuk API dan service kecil. DSL-nya memetakan method HTTP ke block secara langsung, dengan params berisi seluruh input — dari query string, body form, hingga segment URL:

RubyAplikasi Sinatra
require "sinatra"
require "json"
 
get "/" do
  "Halo dari Sinatra"
end
 
get "/pengguna/:id" do
  { id: params["id"], nama: "Arman" }.to_json
end

get "/pengguna/:id" do ... end mendefinisikan route yang menangkap segment :id. Di dalam block, params["id"] mengambil nilai segment tersebut. .to_json mengubah hash menjadi string JSON. Tambahkan gem "sinatra" dan gem "puma" ke Gemfile, lalu jalankan:

Menjalankan Sinatra
gem install sinatra
ruby app.rb

ruby app.rb menjalankan Sinatra dengan server bawaan (atau Puma bila ada). Server melayani di localhost:4567. Sinatra bisa dijalankan tanpa Bundler untuk prototipe, tapi untuk project nyata selalu pakai Bundler seperti di episode 12.

Error Handling di Sinatra

API yang baik menangani error secara eksplisit. Sinatra menyediakan handler not_found untuk 404 dan error untuk exception yang tidak tertangkap:

RubyError handling Sinatra
not_found do
  { error: "resource tidak ditemukan" }.to_json
end
 
error do
  { error: "terjadi kesalahan server" }.to_json
end

not_found do ... end mengembalikan JSON saat route tidak cocok, dan error do ... end menangkap exception dan mengembalikan 500. Untuk status khusus, gunakan helper status 201 sebelum response — misalnya saat membuat resource baru.

Gambaran Rails 8.x

Untuk aplikasi web besar — dengan autentikasi, background job, dan banyak model — Rails 8.x adalah pilihan utama. Rails menyediakan solusi full-stack terintegrasi: ActiveRecord untuk database, Action Cable untuk realtime, dan solid-cache serta solid-queue sebagai lapisan cache dan antrian bawaan yang menggantikan Redis untuk banyak kasus. Kamal menangani deployment ke server tanpa orchestrator kompleks, dan Propshaft menjadi asset pipeline modern.

Membuat project Rails sama cepatnya dengan Sinatra:

Membuat project Rails
gem install rails
rails new blog --database=postgresql
cd blog
bin/rails server

rails new blog --database=postgresql membuat project lengkap dengan struktur MVC, bin/rails server menjalankannya di port 3000. Rails 8.x membuat banyak hal "just work" — itulah alasan ia tetap framework backend terpopuler di ekosistem Ruby.

Membangun REST API Lengkap

Routing, JSON, dan Params

Merangkai semua: sebuah resource API dengan Sinatra yang menangani CRUD sederhana. Routing dipisahkan per method HTTP sesuai konvensi REST:

RubyREST API dengan Sinatra
get "/tugas" do
  { tugas: ["belajar ruby", "buat api"] }.to_json
end
 
post "/tugas" do
  judul = params["judul"]
  { status: "dibuat", judul: judul }.to_json
end

post "/tugas" do ... end menangani request POST yang mengirim data — params["judul"] mengambil field dari body form atau JSON. Pola get, post, put, delete per route inilah konvensi REST yang sama dipakai Rails dengan resources.

Timeout dan Middleware di Production

Untuk production, pertimbangkan: limitasi body request untuk mencegah payload raksasa, logging request via middleware, dan response JSON yang konsisten bentuknya — misalnya selalu { error: "..." } pada kegagalan. Konsistensi ini membuat client API mudah menangani semua kemungkinan. Kita lanjutkan aspek keamanan secara menyeluruh di episode 15.

Info

Pilih Sinatra ketika service kalian kecil dan fokus (API gateway, webhook receiver). Pilih Rails ketika kalian butuh full-stack: autentikasi, admin panel, background job, dan tim yang berkembang. Keduanya berdiri di atas Rack, jadi prinsip yang dipelajari tetap sama.

Penutup

Episode 14 membawa Ruby ke ranah aplikasi nyata: interface Rack yang sederhana, web server Puma yang thread-based, middleware, Sinatra untuk API cepat, gambaran Rails 8.x full-stack, dan praktik membangun REST API dengan routing, JSON, params, serta error handling.

Inti yang harus dibawa pulang:

  • Aplikasi Rack adalah objek call(env) yang mengembalikan status, headers, dan body.
  • Puma adalah web server thread-based default ekosistem Ruby.
  • Middleware membungkus aplikasi untuk logging, otentikasi, dan transformasi.
  • Sinatra memetakan method HTTP ke block dengan params sebagai input.
  • not_found dan error di Sinatra menangani 404 dan 500 dengan JSON.
  • Rails 8.x menawarkan full-stack dengan solid-cache, solid-queue, dan Kamal.
  • REST API dibangun dari routing per method HTTP dengan response JSON yang konsisten.

Di episode 15 selanjutnya kita akan membahas security best practices — kerentanan umum seperti SQL injection, command injection, XSS, dan unsafe deserialization, alat keamanan Brakeman dan bundler-audit, serta penanganan secrets melalui environment variables. Keamanan bukan fitur tambahan, melainkan bagian inti pengembangan.

Belajar Ruby - Web Frameworks & Membangun API | Belajar Ruby