Beberapa website yang menyediakan katalog data untuk umum biasanya menyediakan API (Application Programming Interface) agar semua datanya bisa diambil oleh implementor.
Akan tetapi, ada beberapa hal sepele yang perlu menjadi sorotan perhatian. Contohnya saja pada pengaplikasian Youtube grabber. Ada batasan kueri API dalam jumlah tertentu yang perlu diketahui. Kalaupun tidak ada, seorang programmer sebaiknya memiliki etika dalam menggunakan API dari web service gratisan. Layanan gratis sudah sepantasnya digunakan secara bijak, dalam kurung tidak boleh membebani server.
Atas dasar itulah, penting untuk menyediakan fitur caching dalam pengaksesan API, sehingga kueri yang sering diminta tidak melulu dikirim ulang secara sekuential dalam kurun waktu yang tidak jauh berbeda.
Cara termudah untuk mengimplementasikan API caching adalah dengan memanfaatkaan database. Pada penjelasan kali ini, saya menggunakan database berbasis MySQL.
CREATE TABLE `api_cache` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kode` varchar(200) NOT NULL,
`data` mediumtext NOT NULL,
`total_akses` int(11) NOT NULL,
`waktu_input` datetime NOT NULL,
`akses_terakhir` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `kode` (`kode`)
);
Struktur database di atas terdiri atas elemen-elemen penting dalam mendukung proses caching. Kolom kode adalah kode identifikasi API, bisa berupa URL unik ataupun katakunci yang berkaitan dengan data yang sudah tersimpan. Kolom data menyimpan hasil kueri API; jenisnya tergantung kebutuhan; bisa TEXT, MEDIUMTEXT ataupun LONGTEXT. waktu_input adalah waktu saat pertama kali data hasil kueri diinput ke database. Terakhir yang tidak alah penting; total_akses dan akses terakhir yang nantinya berguna bagi admin, ketika database berlebihan kapasitas. Kedua kolom ini bisa diseleksi nilainya untuk mengetahui data yang tidak begitu sering diakses ulang.
Sekarang, saatnya implementasi (Maaf, kode ini implementasi ditulis berdasarkan gaya CodeIgniter; namun lumayan mudah untuk diterjemahkan ke kode PHP native, kok).
Sebelum mengakses API, program harus memeriksa apakah hasil kueri API sejenis sudah pernah diinputkan ke dalam database.
public function ambil($kode){
$this->db->where('kode', $kode);
$query = $this->db->get('api_cache');
if($query->num_rows() != 0){
$hasil = $query->row();
$this->db->where('id', $hasil->id);
$this->db->set('total_akses', 'total_akses+1', FALSE);
$this->db->set('akses_terakhir', '"'.date("Y-m-d H:i:s", time()).'"', FALSE);
$this->db->update('api_cache');
return $hasil->data;
}
return NULL;
}
Apabila data belum pernah dimasukkan, fungsi di atas akan mengembalikan nilai NULL. Ini juga berarti bahwa API bisa dieksekusi langsung.
Tugas belum selesai, hasil data eksekusi API, harus segera dimasukkan ke dalam database. Sehingga, dilain waktu, apabila kueri serupa dieksekusi, program hanya perlu mengambil data dari database. Bukan hanya tidak merugikan server yang memberikan layanan web service, dengan cara ini, eksekusi kode jauh lebih cepat.
public function tambah($kode,$data){
$this->kode = $kode;
$this->data = $data;
$this->total_akses = 0;
$this->waktu_input = date("Y-m-d H:i:s", time());
$this->akses_terakhir = date("Y-m-d H:i:s", time());
$this->db->insert('api_cache',$this);
}
Selamat mencoba :)
0 comments