Di era digital ini, akses terhadap sumber pengetahuan islam seperti hadist menjadi semakin penting. Meskipun sudah banyak aplikasi dan website yang menyediakan koleksi hadist, masih sedikit yang menyediakan API publik yang dapat digunakan oleh developer untuk mengintegrasikan data hadist ke dalam aplikasi mereka. Artikel ini akan membahas bagaimana membangun API Hadist Collection menggunakan Google Apps Script dan Google Spreadsheet sebagai database. Solusi ini sangat cost-effective karena tidak memerlukan server khusus dan dapat dengan mudah dikelola oleh siapa saja, bahkan tanpa latar belakang teknis yang mendalam. ## Latar Belakang Hadist merupakan sumber ajaran Islam kedua setelah Al-Qur'an. Hadist berisi perkataan, perbuatan, dan ketetapan Nabi Muhammad SAW yang diriwayatkan oleh para sahabat. Ada banyak kumpulan hadist yang terkenal seperti Sahih Bukhari, Sahih Muslim, Sunan Abu Daud, dan lainnya. Dengan API Hadist Collection, pengembang aplikasi dapat dengan mudah: - Menampilkan hadist dari berbagai periwayat - Membuat fitur pencarian hadist - Menampilkan hadist acak sebagai fitur "Hadist Hari Ini" - Memilih hadist berdasarkan periwayat tertentu ## Arsitektur Sistem API Hadist Collection dibangun dengan komponen-komponen berikut: 1. **Google Spreadsheet**: Berfungsi sebagai database untuk menyimpan koleksi hadist 2. **Google Apps Script**: Berfungsi sebagai backend yang menangani request API 3. **Sistem Caching**: Meningkatkan performa dengan menyimpan hasil request yang sering diakses 4. **Logging System**: Mencatat semua akses ke API untuk analisis penggunaan 5. **Telegram Notification**: Memberikan notifikasi real-time saat API diakses 6. **Admin Panel**: Visualisasi data penggunaan API
## Fitur-Fitur API ### 1. Daftar Periwayat Endpoint ini menampilkan semua periwayat hadist yang tersedia beserta jumlah hadist masing-masing.
GET /?action=books
### 2. Hadist Berdasarkan Periwayat
Mendapatkan hadist dari periwayat tertentu berdasarkan range nomor.
GET /?action=hadith&book=bukhari&range=1-10
### 3. Pencarian Hadist
Mencari hadist berdasarkan kata kunci dalam terjemahan bahasa Indonesia.
GET /?action=search&q=nikah
### 4. Hadist Acak
Mengambil sejumlah hadist secara acak dari seluruh koleksi.
GET /?action=random&count=5
### 5. Statistik API
Menampilkan statistik penggunaan API.
GET /?action=stats
### 6. Panel Admin
Panel visualisasi data untuk monitoring penggunaan API.
GET /?action=admin
## Implementasi Teknis
### 1. Struktur Database
Data hadist disimpan dalam Google Spreadsheet dengan struktur berikut:
- **Sheet "hadist"**: Menyimpan koleksi hadist
- number: Nomor hadist
- arab: Teks hadist dalam bahasa Arab
- indonesia: Terjemahan bahasa Indonesia
- riwayat: Nama periwayat (contoh: "HR. Bukhari")
- id: ID periwayat (contoh: "bukhari")
- **Sheet "logAccess"**: Mencatat log akses API
- Timestamp: Waktu akses
- IP Address: Alamat IP pengguna
- Action: Endpoint yang diakses
- Parameters: Parameter request
- User-Agent: Informasi browser/aplikasi
- **Sheet "apiCache"**: Menyimpan cache respons API
- Key: Kunci cache (parameter request)
- Timestamp: Waktu cache dibuat
- Response: JSON respons API
- **Sheet "apiStats"**: Menyimpan statistik penggunaan
- Endpoint: Nama endpoint
- Count: Jumlah akses
- Last Access: Waktu akses terakhir
### 2. Implementasi Cache
Untuk meningkatkan performa, API mengimplementasikan sistem cache sederhana:
```javascript
function getCachedResponse(key) {
try {
let sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME_CACHE);
if (!sheet) {
return null;
}
const dataRange = sheet.getDataRange();
const values = dataRange.getValues();
// Cari cache berdasarkan key
for (let i = 1; i < values.length; i++) {
const row = values[i];
if (row[0] === key) {
const timestamp = new Date(row[1]).getTime();
const now = new Date().getTime();
// Cek apakah cache masih berlaku
if ((now - timestamp) / 1000 < CACHE_EXPIRY) {
return JSON.parse(row[2]);
} else {
// Cache sudah expired, hapus dari spreadsheet
sheet.deleteRow(i + 1);
return null;
}
}
}
return null;
} catch (error) {
console.error('Error getting cached response:', error);
return null;
}
}
Panel admin menggunakan Chart.js untuk memvisualisasikan data penggunaan API:
const endpointChart = new Chart(document.getElementById('endpoint-chart'), {
type: 'bar',
data: {
labels: endpointLabels,
datasets: [{
label: 'Jumlah Request',
data: endpointData,
backgroundColor: [
'rgba(76, 175, 80, 0.7)',
'rgba(255, 193, 7, 0.7)',
'rgba(33, 150, 243, 0.7)',
'rgba(156, 39, 176, 0.7)',
'rgba(244, 67, 54, 0.7)'
],
borderColor: [
'rgba(76, 175, 80, 1)',
'rgba(255, 193, 7, 1)',
'rgba(33, 150, 243, 1)',
'rgba(156, 39, 176, 1)',
'rgba(244, 67, 54, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true
}
}
}
});
Google Apps Script memiliki batasan jumlah eksekusi per hari. Untuk mengatasi hal ini, kami mengimplementasikan sistem cache untuk mengurangi jumlah operasi pada spreadsheet.
Untuk dataset hadist yang besar, performa query bisa menjadi lambat. Solusinya adalah:
Meskipun API ini bersifat publik, tetap perlu memperhatikan aspek keamanan:
API Hadist Collection menunjukkan bagaimana teknologi sederhana seperti Google Apps Script dan Google Spreadsheet dapat digunakan untuk membuat layanan API yang bermanfaat bagi komunitas. Dengan biaya minimal, kita dapat menyediakan akses mudah ke koleksi hadist yang dapat diintegrasikan ke berbagai aplikasi.
Proyek ini juga menunjukkan pentingnya dokumentasi yang baik dan desain API yang intuitif. Dengan endpoint yang jelas dan format respons yang konsisten, API ini dapat dengan mudah digunakan oleh developer dengan berbagai tingkat keahlian.