
Ruby on Rails, framework yang dikenal karena kecepatan pengembangan dan filosofi “Konvensi di atas Konfigurasi”-nya, bukan hanya unggul dalam membangun aplikasi web monolitik berbasis HTML. Dengan arsitektur yang ringan dan berbagai fitur bawaan, Rails adalah pilihan yang sangat kuat dan efisien untuk membangun Antarmuka Pemrograman Aplikasi (API) RESTful yang skalabel dan maintainable.
API adalah tulang punggung aplikasi modern—menghubungkan frontend (seperti aplikasi seluler atau SPA berbasis JavaScript) dengan data dan logika bisnis di backend. Panduan ini akan membawa developer melalui setiap langkah esensial untuk merancang, mengimplementasikan, dan mengamankan API yang kokoh menggunakan Ruby on Rails.
1. Memulai Proyek Khusus API (API-Only Project)
Sejak Rails versi 5, membuat proyek yang didedikasikan hanya untuk API menjadi sangat mudah. Ini menghilangkan semua middleware, asset pipeline, dan modul controller yang tidak perlu untuk server API standar, menghasilkan footprint yang lebih ramping dan waktu boot yang lebih cepat.
Untuk memulai, jalankan perintah berikut:
rails new nama_proyek --api --database=postgresql
-
--api: Memberi tahu Rails untuk menghasilkan konfigurasi API-Only. Ini akan mewarisi dariActionController::APIalih-alihActionController::Basedan melewati middleware seperti session dan cookies. -
--database=postgresql: (Opsional) Direkomendasikan untuk produksi.
2. Merancang Struktur Data (Models & Migrations)
Setelah proyek diatur, fokus pertama adalah pada model data. Rails menggunakan Active Record sebagai lapisan ORM (Object-Relational Mapping) yang kuat.
Misalnya, kita ingin membuat API untuk mengelola daftar buku.
rails generate model Book title:string author:string publication_year:integer
Perintah ini menghasilkan berkas model (app/models/book.rb) dan berkas migration. Setelah migrasi selesai, model dapat digunakan untuk berinteraksi dengan basis data.
3. Implementasi Endpoint (Controllers & Routing)
Dalam API Rails, controller Anda akan merespons permintaan HTTP dengan data, biasanya dalam format JSON.
3.1. Konfigurasi Routing
Definisikan endpoint RESTful di config/routes.rb:
# config/routes.rb
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :books, only: [:index, :show, :create, :update, :destroy]
end
end
end
Penggunaan namespacing (api/v1) adalah praktik terbaik untuk menjaga versi API dan memisahkan logika dari aplikasi web utama (jika ada).
3.2. Membuat Controller API
Buat controller di app/controllers/api/v1/books_controller.rb yang mewarisi dari controller dasar API:
# app/controllers/api/v1/books_controller.rb
module Api
module V1
class BooksController < ApplicationController
# GET /api/v1/books
def index
@books = Book.all
render json: @books
end
# POST /api/v1/books
def create
@book = Book.new(book_params)
if @book.save
render json: @book, status: :created
else
render json: @book.errors, status: :unprocessable_entity
end
end
private
def book_params
params.require(:book).permit(:title, :author, :publication_year)
end
end
end
end
4. Serialisasi Data (JSON Structure)
Secara default, Rails hanya akan memanggil .to_json pada objek Active Record, yang mungkin mengekspos terlalu banyak atribut atau tidak memiliki format yang ideal. Untuk mengontrol struktur respons JSON secara tepat, Serialisasi Data sangat penting.
Pilihan populer di komunitas Rails adalah gem Fast JSON API (atau active_model_serializers):
-
Tambahkan gem ke
Gemfile:gem 'fast_jsonapi' -
Jalankan
bundle install. -
Buat serializer baru:
Bashrails generate serializer book -
Definisikan atribut yang ingin diekspos di
app/serializers/book_serializer.rb:
# app/serializers/book_serializer.rb
class BookSerializer
include FastJsonapi::ObjectSerializer
attributes :title, :author, :publication_year
# Contoh menambahkan atribut khusus/relasi
# attribute :summary do |object|
# "#{object.title} oleh #{object.author}"
# end
end
Terakhir, gunakan serializer di controller Anda:
# app/controllers/api/v1/books_controller.rb
def index
@books = Book.all
# Menggunakan serializer untuk memformat output JSON
render json: BookSerializer.new(@books).serialized_json
end
5. Keamanan API: Autentikasi dan Otorisasi
API harus diamankan. Pendekatan standar untuk API tanpa state adalah menggunakan Token Autentikasi (misalnya, JSON Web Tokens/JWT atau Bearer Tokens sederhana) di header permintaan.
5.1. Implementasi JWT (Rekomendasi)
-
Tambahkan gem
jwtkeGemfile. -
Buat middleware atau module untuk meng-encode dan men-decode token. Token biasanya dibuat saat pengguna login berhasil.
-
Di
ApplicationController(atauApplicationController::API), implementasikan metodeauthenticate_request!yang memeriksa headerAuthorization.
Konsep Dasar Autentikasi Token:
-
Klien mengirimkan permintaan dengan header:
Authorization: Bearer <token_jwt_anda> -
Server mengambil token, memverifikasi tanda tangan (menggunakan kunci rahasia), dan mengekstrak payload (biasanya ID pengguna).
-
Jika token valid, controller melanjutkan pemrosesan permintaan.
6. Dokumentasi API (Swagger/OpenAPI)
API tanpa dokumentasi yang baik sulit digunakan. Meskipun tidak dibangun ke dalam Rails itu sendiri, mengintegrasikan alat dokumentasi sangat penting.
-
Rswag/Swagger: Gem populer seperti Rswag memungkinkan developer mendefinisikan skema dan respons API langsung dalam pengujian atau controller Rails, yang kemudian secara otomatis menghasilkan spesifikasi OpenAPI (Swagger).
7. Pengujian (Testing)
Filosofi Rails sangat menekankan pengujian. Untuk API, pengujian harus memverifikasi bahwa endpoint merespons dengan kode status HTTP yang benar dan menghasilkan payload JSON yang diharapkan.
Gunakan RSpec atau framework pengujian bawaan Rails untuk menulis request specs yang memanggil path API dan memverifikasi respons JSON, termasuk header autentikasi.
8. Penanganan Kesalahan (Error Handling)
API yang robust harus secara eksplisit menangani kesalahan dan mengembalikannya ke klien dengan kode status HTTP yang sesuai:
| Kode Status | Deskripsi | Kondisi Rails |
| 200 OK | Sukses | render json: ... |
| 201 Created | Sumber daya dibuat | render json: ..., status: :created |
| 401 Unauthorized | Autentikasi gagal | render status: :unauthorized |
| 404 Not Found | Sumber daya tidak ada | Otomatis ditangani oleh Rails jika ID tidak valid. |
| 422 Unprocessable Entity | Kesalahan validasi | render json: @model.errors, status: :unprocessable_entity |
Anda dapat menambahkan rescue block di controller dasar untuk menangani pengecualian umum, seperti ActiveRecord::RecordNotFound, dan mengembalikannya sebagai respons 404 Not Found.
Kesimpulan
Ruby on Rails, dengan kecepatan pengembangan yang tak tertandingi dan ekosistem yang matang, adalah platform ideal untuk membangun API RESTful modern. Dengan memanfaatkan mode --api, menggunakan serializer yang efisien, dan menerapkan lapisan keamanan berbasis token, developer dapat menciptakan layanan backend yang kuat, cepat, dan mudah di-maintain. Membangun API dengan Rails bukan hanya tentang kecepatan, tetapi juga tentang menghasilkan kode berkualitas tinggi dengan konvensi yang jelas, memungkinkan tim untuk fokus pada logika bisnis dan bukan pada konfigurasi boilerplate yang membosankan.
Baca juga : Mengembangkan Keahlian Developer Melalui Kontribusi pada Framework Sumber Terbuka
