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.

Periksa inbox email anda untuk verifikasi akun.

Tahap 2: Login ke IBM Bluemix

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

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

Anda akan diarahkan pada halaman katalog IBM Bluemix.

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

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

Anda akan diarahkan ke halaman rincian Aplikasi Anda.

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

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.

Silahkan login dengan menggunakan perintah dibawah ini:

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

Masukan email dan password Anda.

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

Sesuaikan Env Variable agar aplikasi Anda berjalan dengan baik.

$ cf restage salando

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

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

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

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

$ cf push salando

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/.

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

Pilih Read Names, Anda dapat melihat hasilnya.

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

Ganti ANDY menjadi MILA. Pilih Update Name.

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

Sekarang pilih Delete Name, kemudian hapus data tersebut.

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

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
Dilihat 1479 kali

Is this helpful?

Share This Post