Pages

Membuat REST API Menggunakan MEN (MongoDB, ExpressJS, NodeJS)

Jumat, 05 Oktober 2018


Apa itu REST API? Di sana terdapat dua kata yaitu REST dan API. REST(REpresentational State Transfer) adalah desain arsitektur yang menyediakan standar cara berkomunikasi antar sistem komputer di dalam web sehingga komunikasi antar komputer menjadi lebih mudah, seperti itu sederhanannya. Sedangkan untuk API(Application Programming Interface) sebenarnya hanya fungsi atau method, ketika kalian membuat fungsi atau method di bahasa pemrograman apapun itu sudah bisa disebut API, jadi jangan sampai pusing hanya karena istilah :D.

Jadi apa itu REST API? Yap, REST API adalah API yang cara mengimplementasikannya menggunakan konsep REST. Simpelnya seperti ini, biasanya untuk mengimplementasikan suatu API kita hanya tinggal menulis nama fungsi atau method-nya saja, sedangkan jika menggunakan konsep REST, kita harus melakukannya menggunakan HTTP Request.

Sebelum mulai pastikan komputermu sudah ter-install:
- Node/NPM
- MongoDB
- Postman

Note: Jika kamu menggunakan Windows, saya anjurkan untuk menginstall UNIX-like environment seperti Cygwin

Oke, ayo mulai!

Install Library

Sebelumnya kita buat terlebih dahulu folder untuk aplikasi REST API kita, buka terminal  dan jalankan command:
mkdir men-rest-api && cd men-rest-api

Note: Kenapa 'MEN'? Karena tech stacks yang kita pakai MongoExpressNode! :D

Selanjutnya kita akan men-generate file package.json
npm init

Kamu bisa tekan enter pada semua pertanyaan untuk mengatur semuanya dengan setting-an default.

Setelah proses generate file package.json selesai, kita bisa mulai meng-install library yang kita butuhkan untuk aplikasi.
npm install --save express body-parse mongoose

Di command yang kita jalankan sebelumnya, kita meng-install 3 library
  • express (ExpressJS)
    Di website resminya tertulis "Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.", jadi intinya ExpressJS adalah web framework untuk NodeJS yang memiliki banyak fitur yang akan memudahkan kita dalam pengembangan aplikasi web dan mobile.
  • body-parser
    Library ini digunakan sebagai middleware yang akan membantu kita dalam mem-parsing request body dari user atau client, sehingga memudahkan kita dalam mengakses request body.
  • mongoose
    Tertulis di website resminya "Elegant mongodb object modeling for nodejs". Library ini akan banyak membantu kita dalam berkomunikasi dengan database mongodb.
Selain meng-install library yang dibutuhkan untuk aplikasi kita juga akan meng-install library yang akan membantu kita saat proses development.
npm install --save-dev @babel/core @babel/node @babel/preset-env nodemon
  • Babel
    Babel adalah library yang biasa digunakan untuk meng-convert code javascript yang menggunakan fitur ECMAScript 2015+ ke versi javascript sebelumnya. Dikarenakan NodeJS belum sepenuhnya memiliki fitur dari ECMAScript 2015, kita harus menggunakan Babel untuk meng-convertnya.
    • @babel/core core compiler babel yang akan meng-convert code javascript kita.
    • @babel/node built-in CLI yang digunakan untuk meng-compile file melalui command line.
    • @babel/preset-env jadi library ini membuat kita bisa menggunakan syntax ECMAScript terbaru tanpa harus me-manage transformasi ECMAScript versi berapa yang dibutuhkan browser atau target kita.
  • Nodemon
    Nodemon adalah library yang berguna untuk otomatis me-restart server node ketika ada perubahan yang terjadi dalam source code kita.

Let's Code!

Pertama kita akan lebih banyak mengkonfigurasi aplikasi REST API kita, seperti menggunakan body-parser untuk mem-parsing request body yang masuk, connect ke database, menjalankan server dan meng-import file route(kita akan membuatnya setelah ini).
index.js
Selanjutnya kita akan membuat file route yang telah kita import sebelumnya. File route ini bertugas untuk menentukan perintah apa yang akan dijalankan sesuai dengan URL dari HTTP Request yang diterima.
route.js
Setelah itu kita akan membuat controller yang berfungsi untuk meng-handle dan memproses request yang masuk seperti mengambil list todo dari database, membuat todo baru ke database, menghapus todo dan meng-update todo.
controller.js
Selanjutnya buat file model yang berisi schema database mongodb kita.
model.js
Terakhir kita akan membuat script agar ketika aplikasi kita dijalankan otomatis menggunakan nodemon dan babel.
package.json

Test! :D

Jalankan command npm start di dalam directory aplikasi REST API kita dan kita bisa langsung masuk ke http://localhost:3000 untuk melihat hasilnya.


Untuk test apakah REST APInya berjalan kita akan menggunakan Postman.
POST [/api] Membuat todo baru


GET [/api/] Mengambil semua todo


PUT [/api/{_id}] Meng-update todo


GET [/api/{_id}] Mengambil todo berdasarkan _id

Note: Kalian bisa melihat keseluruhan code di Github

Referensi:
https://medium.com/@vipinswarnkar1989/mern-stack-crud-app-using-create-react-app-react-redux-3299059db793
- https://www.codecademy.com/articles/what-is-rest
https://mongoosejs.com/
https://github.com/expressjs/body-parser

Hello NodeJS!

Kamis, 13 September 2018


Pada kesempatan kali ini saya ingin mengajak kalian semua untuk menyapa NodeJS, yap ini adalah ritual atau tradisi yang biasa dilakukan untuk mengenal suatu bahasa pemrograman. Ada yang belum tau apa itu NodeJS? Kamu bisa klik di sini untuk mengetahui lebih lanjut tentang apa itu NodeJS.

Install NodeJS

Windows:
Bagi pengguna windows kalian bisa langsung download nodejs di situs resminya dan ikuti langkah-langkahnya.

MacOS:
Bagi pengguna MacOS kalian bisa lakukan seperti pengguna windows atau jika kalian menginstall Homebrew di MacOS kalian, kalian bisa menginstall nodejs dengan menjalankan perintah brew install node di terminal.

Linux:
Bagi pengguna Ubuntu/Debian-based kalian bisa menjalankan perintah sudo apt-get install nodejs && sudo apt-get install npm dan bagi pengguna Arch-based kalian bisa menjalankan perintah sudo pacman -S nodejs npm.

Untuk mengecheck apakah nodejs dan npm sudah terinstall kalian bisa menjalankan perintah node -v && npm -v, perintah tersebut berfungsi untuk menampilkan versi dari node dan npm.




Hello NodeJS!

Sekarang, ayo kita sapa NodeJS. Pertama buat file bernama server.js, kemudian buka terminal kalian dan rubah direktorinya sesuai dengan lokasi file server.js tersebut. Selanjutnya buka file tersebut dan copy-paste kode di bawah ini.

const http = require('http');
const server = http.createServer();

server.on('request', (request, response) => {
  response.writeHead(200, {'Content-Type':'text/plain'});
  response.write('Hello world');
  response.end();
});

server.listen(3000, () => {
  console.log('Node server created at port 3000');
});
Kemudian jalankan perintah node server.js, selanjutnya buka browser dan masuk ke localhost:3000, dan NodeJS akan menyapa kita semua! :)

Saya akan sedikit menjelaskan tentang kode yang telah kalian copy-paste barusan. Di baris pertama kita merequire module http yang berfungsi untuk membantu kita menangani operasi http, kemudian kita memanggil 'createServer' yang fungsinya persis seperti namanya yaitu membuat server.

Di baris kedua ada fungsi on, dengan argumen pertama request yang maksudnya untuk menandai bahwa fungsi on ini untuk menangani request yang masuk, kemudian argumen kedua adalah callback dengan dua parameter yaitu request yang berisi informasi tentang request yang masuk dan response yang berisi informasi tentang response keluar.

Di baris ketiga ada fungsi listen yang memerintahkan nodejs untuk mendengar atau berjalan di port 3000.

Demikian yang bisa saya bagikan, semoga bermanfaat khususnya bagi yang baru mempelajari NodeJS. Kalau ada yang salah dari apa yang saya tulis, jangan ragu untuk mengkoreksi di kolom komentar :)


Referensi:

Apa itu NodeJS?

Rabu, 05 September 2018


Sebelumnya yang kita tau javascript itu hanya untuk membuat website kita terlihat lebih interaktif, sekarang javascript bisa kita pakai untuk membuat apapun yang kita mau! (Oke ini agak lebay) :D Itu semua berkat teknologi bernama NodeJS, apa itu NodeJS? Di dokumentasi officialnya tertulis "NodeJS is a JavaScript runtime built on Chrome's V8 JavaScript engine.". Apa maksudnya? Kalau kamu sudah pernah belajar PHP, NodeJS itu seperti Apachenya atau kalau kamu sudah pernah belajar Java, NodeJS itu seperti JVM(Java Virtual Machine)nya. Kalau kamu belum pernah mempelajari keduanya, NodeJS itu seperti suatu mesin yang membuat javascript yang tadinya hanya bisa berjalan di browser menjadi bisa berjalan langsung di komputer kalian, seperti itu kira-kira analoginya.

Selanjutnya, bagaimana NodeJS bekerja? Tidak seperti bahasa pemrograman lainnya yang bekerja secara multi-thread(satu tugas dijalankan oleh satu thread) dan bersifat synchronous(berurutan)/blocking, yang artinya ketika satu tugas sedang dijalankan maka tugas selanjutnya harus menunggu sampai tugas sebelumnya selesai. Javascript bekerja secara single-thread begitu juga dengan NodeJS. Sebenarnya NodeJS tidak benar-benar menggunakan single-thread, karena yang menggunakan single-thread hanya event-loopnya saja, event-loop ini hanya untuk menampung semua tugas yang diberikan dan kemudian mendelegasikannya ke background workers. Untuk background workersnya sendiri menggunakan library bernama Libuv yang akan menangani tugas-tugas secara asynchronous(tidak berurutan)/non-blocking, yang artinya tugas termudah dan tercepatlah yang akan terlebih dahulu diselesaikan dan akan langsung diberikan hasilnya kepada event-loop tanpa mempedulikan urutan masuknya tugas.

Masih belum paham? Bayangkan kamu bos di suatu perusahaan, tugasmu adalah menulis daftar tugas apa saja yang dibutuhkan demi kemajuan perusahaanmu. Kemudian orang kepercayaanmu datang untuk mengambil daftar tersebut dan mendelegasikan tugas-tugas tersebut kebawahannya, ketika salah satu tugas tersebut selesai orang kepercayaanmu itu langsung melaporkannya kepadamu. Tetapi kamu tetap sibuk menulis semua daftar pekerjaan, jadi kamu hanya menerima hasilnya dan memberikan daftar lain ke orang kepercayaanmu itu, seperti itulah kira-kira analoginya.

Demikian yang bisa saya bagikan, semoga bermanfaat khususnya bagi yang baru mempelajari NodeJS. Kalau ada yang salah dari yang saya tulis, jangan ragu untuk mengkoreksi di kolom komentar :)


Referensi: