API: A bridge between worlds

Ilustrasi dari API.

Halo pembaca setia blog Pie-O!

Pada Sprint 1 ini, saya ditugaskan untuk membuat API dan Webservice yang nantinya akan digunakan oleh aplikasi Android kami untuk mengakses database. Post ini merupakan lanjutan dari kedua post berikut ini, dimana saya menjelaskan mengenai persiapan untuk membuat Web service. Kali ini, saya akan bercerita lebih lanjut mengenai hal-hal yang sudah saya kerjakan dan pelajari.

First things first: What is an API?

API adalah sekumpulan perintah (dan formatnya) yang bisa dikirimkan suatu program ke program lain untuk berkomunikasi dan menggunakan fungsionalitasnya.

Untuk aplikasi ini, kami sendiri menggunakan RESTful API, dibangun dengan menggunakan Node.js (+Express framework), MongoDB, dan Mongoose (biasa disebut MEAN stack). API ini akan menjadi sarana komunikasi antara webservice di Heroku (sekaligus database mLab) dan aplikasi Android kami.

REST (Representational State Transfer) sendiri menggunakan perintah HTTP (GET, POST, PUT, DELETE) untuk memanipulasi database, alih-alih menulis perintahnya secara eksplisit pada URL.

Selanjutnya, bagaimana caranya untuk membuat API?

How-To: Create an API

Base connection setup

Pertama, kita perlu memanggil package-package yang dibutuhkan untuk menjalankan server, yaitu Express dan body-parser. Kita juga perlu men-setting port yang akan digunakan oleh server.

// call the packages we need
var express = require('express'); // call express
var app = express();
// define our app using express
var bodyParser = require('body-parser');
// configure app to use bodyParser()
// this will let us get the data from a POST
app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());
var port = process.env.PORT || 8080;        // set our port
var router = express.Router(); // instance of the express Router

Membuat kerangka untuk API routes

Perlu didefinisikan route-route untuk API. Untuk pertama kali, dibuat satu test route yang akan digunakan untuk mengecek apakah server berjalan atau tidak.

router.get('/', function(req, res) {
res.json({ message: 'Welcome to SIBUJANG web service.' });
});

Agar bisa berjalan, perlu pemanggilan perintah untuk menjalankan server.

// REGISTER OUR ROUTES -------------------------------
// all of our routes will be prefixed with /api
app.use('/api', router);
// START THE SERVER //
app.listen(port);
console.log('Aplikasi berjalan pada ' + port);

Pada perintah app.use() didefinisikan bahwa route API akan menggunakan url /api.

Mengetes server

Selanjutnya, akan dicek apakah server berjalan dengan baik.

Pertama, jalankan server dengan perintah node <namaFileServer>.js. Jika berjalan dengan baik, seharusnya akan muncul informasi portnya pada Terminal.

Hore! Server sudah dapat dijalankan. :-)

Selain mengetes server, kita juga akan mengetes API. Untuk mengetesnya, akan digunakan Postman, aplikasi yang dapat mengirim dan menampilkan HTTP requests.

Yang perlu dilakukan adalah memasukkan URL dari route test yang sudah kita buat sebelumnya (http://url-aplikasi/api), kemudian klik send.

Jika berhasil, akan muncul message berformat JSON.

Koneksi database

Karena API akan digunakan untuk mengambil data dari database, kita perlu mengkoneksikannya dengan database yang sudah dibuat dengan menggunakan Mongoose.

var mongoose   = require('mongoose');
mongoose.connect('<url-database-mongodb>'); // connect to database

Membuat model

Model merupakan representasi dari dokumen yang ada pada database, akan memudahkan ketika kita mengambil, menyimpan, maupun memanipulasi objek pada database. Berikut salah satu model untuk entry pada database Staf.

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var StaffSchema = new Schema({
id: String,
nama: String,
kodeBranch: Number,
namaBranch: String,
kodeBMFO: String,
});
module.exports = mongoose.model('staffs', StaffSchema);

Dapat dilihat bahwa model berisi atribut-atribut yang dimiliki staf. staffs sendiri merupakan nama collection Staf pada database kami.

Selanjutnya, model Staf yang sudah dibuat akan direferensi pada kode server.js yang sudah dibuat.

var Staff     = require('./app/models/staff');

Membuat middleware

Middleware menjadi jalan untuk seluruh koneksi keluar dan masuk dari server.

// middleware to use for all requests
router.use(function(req, res, next) {
// do logging
console.log('Routing is working.');
next(); // make sure we go to the next routes
});

Kode di atas akan mencetak “Routing is working.” pada Terminal tiap kali ada HTTP request pada server.

Membuat route-route yang dibutuhkan

Misalkan kita ingin membuat API untuk mengambil list seluruh Staf yang ada. Seluruh request yang berkaitan dengan Staf akan ada pada URL /api/staffs. Berikut adalah contoh route nya:

// on routes that end in /staffs
router.route('/staffs')
// get all the bears (at GET http://localhost:8080/api/staffs)     .get(function(req, res) {
Bear.find(function(err, staff). {
if (err)
res.send(err);
res.json(bears);
});
});

Jika route berjalan dengan baik, HTTP GET request pada http://url-server/api/staffs akan mengembalikan array JSON yang berisi seluruh Staf pada database.

Selanjutnya, kita dapat membuat route-route API sesuai kebutuhan komunikasi dari aplikasi.


Sekian informasi dari saya, semoga bermanfaat. Sampai jumpa di post selanjutnya!

It’s not at all important to get it right the first time. It’s vitally important to get it right the last time. ” — Andrew Hunt and David Thomas
Show your support

Clapping shows how much you appreciated Mutia Khairunnisa’s story.