Belajar Menggunakan Layanan IBM Bluemix Cloudant NoSQL

Yana Permana 7 Januari 2017

Belajar Menggunakan Layanan IBM Bluemix Cloudant NoSQL

Cloudant adalah layanan database yang fully-managed dan dapat diperluas secara global, berjalan tanpa henti serta menangani berbagai skema secara fleksibel dengan pengembangan yang cepat. Anda tinggal mengirimkan request HTTP dengan menggunakan payload JSON, misalnya PUT JSON in dan GET JSON out. Layanan ini terintegrasi dengan Indexing Engines untuk Lucene full-text search dan Geospatial querying. Menarik, bukan?

Cloudant dibangun dengan Apache CouchDB™ dan berkontribusi dengan proyek open-source. Namun, kenapa Cloudant/CouchDB menjadi pilihan pertama? Sederhana, karena fitur replikasi dan sinkronisasinya.

Berbeda dengan sistem database tradisional, semua replikasi tersedia untuk operasi baca dan tulis. Kemampuan Cloundant CouchDB dalam melakukan replikasi dan sinkronisasi, cocok untuk pengembangan aplikasi mobile maupun web, tentunya dengan desain dan prinsip offline-first. Dengan kata lain akses data pada device atau browser dapat dilakukan dengan sinkronisasi dalam penyalinan data secara jarak jauh melalui teknologi Cloud, dan sebaliknya.

Drivers dan Querying

Tidak ada binary drivers yang diperlukan untuk Cloudant, Anda tinggal mengakses layanan melalui HTTP/S saja. Adapun library yang digunakan dapat Anda dilihat disini.

Querying dalam Cloudant bekerja dengan cara yang berbeda dengan database relasional lainnya. Index yang harus ada sebelum Anda menjalankan query. Untuk pengguna baru, jangan khawatir. Banyak tutorial yang berkaitan dengan Cloudant, Anda bisa membaca dokumentasinya.

Tahap 1: Daftar Akun Bluemix

Jika anda belum memiliki akun, silahkan daftar melalui website resmi IBM Bluemix. Pilih Start Free in Bluemix dan isi form yang tersedia.

Image

Periksa inbox email anda untuk verifikasi akun.

Image

Tahap 2: Login ke IBM Bluemix

Kunjungi halaman Login IBM Bluemix, kemudian masukan identitas akun anda.

Image

Anda akan diarahkan ke halaman dasbor IBM Bluemix. Pilih Create Application.

Image

Anda akan diarahkan pada halaman katalog IBM Bluemix.

Image

Pada tutorial ini, akan dibahas seputar penggunaan Cloudant dengan NodeJS. Pilih NodeJS pada katalog tersebut.

Image

Isilah App name dan Host name sesuai keinginan Anda. Pilih Create.

Image

Anda akan diarahkan ke halaman rincian Aplikasi Anda.

Image

Anda bisa melihat aplikasi yang telah Anda buat pada halaman https://{{ Nama Aplikasi Anda}}.mybluemix.net/, misal https://salando.mybluemix.net/.

Image

Tahap 3: Menggunakan Layanan IBM Bluemix Cloudant NoSQL

Tahap selanjutnya ialah menggunakan layanan Cloudant NoSQL melalui command line Cloud Foundry Apps. Anda bisa mengunduhnya di https://github.com/cloudfoundry/cli/releases.

Apabila Cloud Foundry CLI sudah terpasang, Anda bisa memeriksanya dengan mengetikan cf pada terminal.

Image

Silahkan login dengan menggunakan perintah dibawah ini:

$ cf login https://api.ng.bluemix.net

Masukan email dan* password* Anda.

Image

Langkah selanjutnya adalah membuat layanan Cloudant NoSQL menggunakan perintah dibawah ini:

$ cf create-service cloudantNoSQLDB Lite salandodb

Hubungkan aplikasi Anda dengan layanan Cloudant NoSQL menggunakan perintah dibawah ini:

$ cf bs `Nama Aplikasi Anda` `Nama Database Cloudant Anda` $ cf bs salando salandodb
Image

Sesuaikan Env Variable agar aplikasi Anda berjalan dengan baik.

$ cf restage salando
Image

Agar lebih mudah memahami penggunaan layanan Cloudant, silahkan unduh sampel aplikasi CRUD (Create Read Update Delete) dengan menggunakan perintah dibawah ini:

$ git clone https://github.com/IBM-Bluemix/nodejs-cloudantdb-crud-example.git

Salin sampel aplikasi tersebut sesuai dengan nama Aplikasi Anda.

$ cp odejs-cloudantdb-crud-example salando -r
Image

Masuk ke folder aplikasi sampel tersebut dan modifikasi berkas manifest.yml.

Image
declared-services: cloudant-nodejs: label: cloudantNoSQLDB plan: Shared applications: - path: . memory: 256M instances: 1 domain: mybluemix.net name: salando host: salando disk_quota: 1024M services: - salandodb
Image

Apabila sudah selesai memodifikasi berkas manifest.yml, Anda bisa mengunggahnya dengan perintah dibawah ini.

$ cf push salando
Image

Setelah prosesnya selesai, Anda bisa melihat aplikasi sampel CRUD tersebut melalui tautan sebelumnya,

Anda bisa melihat aplikasi sampel CRUD tersebut pada halaman https://{{ Nama Aplikasi Anda}}.mybluemix.net/, misal https://salando.mybluemix.net/.

Image

Anda bisa mencoba satu per satu operasi CRUD pada aplikasi tersebut. Misal penambahan data (Create). Pilih Create Name, Isi, dan Add Name.

Image
Image

Pilih Read Names, Anda dapat melihat hasilnya.

Image

Sekarang coba, operasi Update. Pilih Update Names. Jangan lupa muat ulang halamannya ya.

Image

Ganti ANDY menjadi MILA. Pilih Update Name.

Image
Image

Sekarang muat ulang halaman, pilih Read Names dan Anda bisa melihat perubahannya.

Image

Sekarang pilih Delete Name, kemudian hapus data tersebut.

Image
Image
Image

Sekarang muat ulang halaman, dan pilih Read Names. Anda bisa melihat perubahannya.

Image

Tahap 4: Memahami Penggunaan Layanan Cloudant dalam Aplikasi NodeJS

Pada tahap sebelumnya, Anda telah menggunakan Cloudant NoSQL dan NodeJS. Pada tahap selanjutnya adalah memahami bagaimana layanan tersebut dapat bekerja. Silahkan buka, berkas index.html pada path {Nama Aplikasi Anda}/public/index.html.

Ketika Anda memilih button Create Name, fungsi Javascript show_new_name_form() yang dipanggil adalah menampilkan form penambahan nama.

<div class="col-sm-3 operations_options"> <button class="btn btn-success crud" type="button" onclick="show_new_name_form()"> Create Name </button> </div>

Setelah Anda mengisi nama baru, dan memilih button Create Name maka fungsi NodeJS yang dipanggil adalah /add_name. Lihat berkas {Nama Aplikasi Anda}/public/js/name_actions.js.

... $("#add_name_button").click(function(e){ e.preventDefault(); //In 'data' parameter, send new name to be added to 'url', to be received by back end for further processing $.ajax({ url: "/add_name", type: "GET", dataType: "json", data:{new_name: $("#newname").val()}, contentType: "application/json", cache: true, timeout: 5000, complete: function() { //called when complete console.log('process complete'); }, success: function(data) { ...

Pada kode diatas Anda dapat melihat request AJAX yang menggunakan method GET dengan tipe payload JSON. Secara kasar, ketika Anda memanggil fungsi /add_name, aplikasi tersebut menyimpan nama baru ke dalam JSON sebagai payload request AJAX.

... data: {new_name: $("#newname").val()} ...

Request AJAX tersebut berjalan dengan mengirimkan query melalui berkas app.js.

... app.get('/add_name',function(req, res){ //to add a city into the database console.log("Name to be added : = " + req.query.new_name); req.query.new_name = req.query.new_name.toUpperCase(); //convert to uppercase and trim white space before inserting req.query.new_name = req.query.new_name.trim(); //Search through the DB completely to check for duplicate name, before adding a new name var url = cloudant_url + "/names_database/_design/names_database/_view/names_database"; var name_present = 0; //flag variable for checking if name is already present before inserting var name_string; //variable to store update for front end. //In this case, check if the ID is already present, else, insert a new document request({ url: url, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { //Check if current input is present in the table, else add. If present then return with error message var user_data = body.rows; console.log("length of table: " + user_data.length); var loop_len = user_data.length; for(var i=0; i< loop_len; i++) { var doc = user_data[i]; console.log("in Db : " + doc.value[1]); if(req.query.new_name === doc.value[1]) { name_present = 1; break; } } if(name_present === 0) //if city is not already in the list { db.insert(req.query, function(err, data){ if (!err) { console.log("Added new name"); name_string="{\"added\":\"Yes\"}"; res.contentType('application/json'); //res.contentType and res.send is added inside every block as code returns immediately res.send(JSON.parse(name_string)); } else { console.log("Error inserting into DB " + err); name_string="{\"added\":\"DB insert error\"}"; res.contentType('application/json'); res.send(JSON.parse(name_string)); } }); } else { console.log("Name is already present"); name_string="{\"added\":\"No\"}"; res.contentType('application/json'); res.send(JSON.parse(name_string)); } } else { console.log("No data from URL. Response : " + response.statusCode); name_string="{\"added\":\"DB read error\"}"; res.contentType('application/json'); res.send(JSON.parse(name_string)); } }); }); ...

Secara sederhana data tersebut disimpan dengan menggunakan kode dibawah ini:

... db.insert(req.query, function(err, data){ if (!err) { console.log("Added new name"); name_string="{\"added\":\"Yes\"}"; res.contentType('application/json'); //res.contentType and res.send is added inside every block as code returns immediately res.send(JSON.parse(name_string)); } ...

Nah, untuk operasi Read, Update dan Delete bisa Anda jelajahi sendiri dengan alur yang sama pada operasi Create.

Dan buat kamu yang ingin belajar dan mengenal lebih banyak tentang Bluemix, kamu bisa mengikuti Akademi Dicoding Belajar Membangun Aplikasi Android dengan IBM Bluemix atau bisa juga melalui tutorial-tutorial di Dirakit. Semoga bermanfaat. Selamat belajar.

Referensi

[1] https://developer.ibm.com/clouddataservices/docs/cloudant/
[2] https://developer.ibm.com/clouddataservices/docs/cloudant/get-started/
[3] https://developer.ibm.com/clouddataservices/docs/cloudant/get-started/connect-to-bluemix/
[4] https://github.com/IBM-Bluemix/nodejs-cloudantdb-crud-example