Eks-Cent v4.0.0 ๐
Eks-Cent adalah framework web Ruby modern yang ringan, menggunakan standar Eks Interface. Dirancang untuk kecepatan, keamanan tingkat tinggi, dan fleksibilitas tanpa beban dependensi eksternal yang besar.
Dengan v4.0.0, Eks-Cent kini mendukung fitur arsitektural canggih seperti URL Mapping dan Application Cascading, menjadikannya pilihan utama untuk aplikasi mikro servis maupun web monolitik.
โจ Fitur Utama v4.0.0
-
๐คModern Routing DSL: Pendefinisian rute intuitif dengan parameter dinamis (
:name), namespace, dan kontrol eksekusi (halt). -
๐บURL Mapping & Cascading: Jalankan beberapa aplikasi independen di bawah satu server berdasarkan sub-jalur (mapping) atau fallback otomatis (cascade).
-
๐Security First: Session terenkripsi HMAC-SHA256, proteksi XSS otomatis, header keamanan bawaan, dan pembatasan parameter (DoS protection).
-
๐จSmart Templating: Integrasi ERB dengan sistem Auto-Layout, injeksi objek (
@req,@res), dan helper keamanan (@h).
๐ฆ Instalasi
Tambahkan baris ini ke dalam Gemfile aplikasi Anda:
gem 'eks-cent', '~> 4.0.0'
Lalu jalankan:
bundle install
๐ Memulai Cepat (v4 Style)
Buat file config.eks untuk mendefinisikan aplikasi Anda:
# 1. Global Middlewares
use EksCent::Middleware::Runtime
use EksCent::Middleware::Session
use EksCent::Middleware::Logger
# 2. Pemetaan Aplikasi API
map "/api" do
api = EksCent::Router.new do
get '/status' do |req, res|
res.content_type = 'application/json'
res.write({ status: 'online', version: EksCent::VERSION }.to_json)
end
end
run api
end
# 3. Aplikasi Web Utama
router = EksCent::Router.new do
get '/' do |req, res|
res.write "<h1>Web Utama v#{EksCent::VERSION}</h1>"
end
end
run router
Jalankan server dengan mode reload:
๐ค Dokumentasi Routing
Anda dapat menggunakan metode HTTP standar (get, post, put, delete, patch, options, any).
router = EksCent::Router.new do
# Parameter Dinamis
get '/user/:id' do |req, res|
id = req.params['id']
res.write "User ID: #{id}"
end
# Namespace untuk pengelompokan
namespace '/admin' do
get '/dashboard' do |req, res|
# Diakses via /admin/dashboard
end
end
# Kontrol Eksekusi dengan halt
get '/secret' do |req, res|
halt(res, 403, "Akses ditolak") unless req.session['admin']
res.write "Data Rahasia"
end
end
๐บ URL Mapping & Cascade
Gunakan map untuk membagi aplikasi besar menjadi sub-aplikasi independen berdasarkan jalur URL.
# Meminta /blog akan diarahkan ke BlogApp
map "/blog" do
run BlogApp
end
# Meminta / akan diarahkan ke MainApp
map "/" do
run MainApp
end
Gunakan cascade jika Anda ingin mencoba beberapa aplikasi secara bergantian hingga ada yang merespons (bukan 404).
๐ฆ Middleware Bawaan
| Middleware | Deskripsi |
|---|---|
| Runtime | Menambahkan header X-Runtime dengan waktu eksekusi. |
| MethodOverride | Mengizinkan override method HTTP via parameter _method. |
| Session | Manajemen session aman berbasis cookie dengan HMAC-SHA256. |
| Logger | Logging permintaan ke STDOUT atau file log secara real-time. |
| Static | Melayani file statis dari direktori tertentu (default: public). |
| ShowExceptions | Halaman error informatif untuk lingkungan pengembangan. |
๐จ Templating & Layout
Framework akan otomatis mencari views/layout.erb sebagai pembungkus utama.
<!-- views/layout.erb -->
<html>
<body>
<header>Aplikasi Eks-Cent</header>
<%= @content %> <!-- Konten dirender di sini -->
</body>
</html>
Objek @req, @res, dan helper @h (escape HTML) selalu tersedia di dalam template secara otomatis.
๐ Panduan API
Request (req)
req.params: Query, POST, & Route params.req.session: Sesi terenkripsi R/W.req.path: Jalur URL saat ini.req.user_agent: Info browser pengunjung.
Response (res)
res.write(msg): Menambah konten ke body.res.render(name): Render file ERB.res.status = code: Set HTTP status (200, 404).res.redirect(path): Pengalihan URL.
๐งช Pengujian (Testing)
Gunakan suite pengujian bawaan untuk memastikan stabilitas kode Anda:
require 'test/unit'
require 'eks-cent'
class MyAppTest < Test::Unit::TestCase
def test_homepage
app = EksCent.load('config.eks')
mock = EksCent::MockRequest.new(app)
res = mock.get('/')
assert res.ok?
assert_match "Web Utama", res.body_content
end
end
๐ก Keamanan & Batasan (Eks Limits)
Anda dapat mengatur batasan melalui variabel lingkungan untuk mencegah serangan DoS pada parser parameter:
EKS_QUERY_PARSER_PARAMS_LIMIT: Maksimal parameter (default: 1000).EKS_QUERY_PARSER_DEPTH_LIMIT: Maksimal kedalaman nested params.EKS_MULTIPART_TOTAL_PART_LIMIT: Maksimal bagian dalam form multipart.
๐ Lisensi
Eks-Cent v4.0.0 didistribusikan di bawah Lisensi MIT.