lifelong learner — urip iku urup, currently working on accenture.

Menyiapkan web services (API) yang siap dikonsumsi oleh http(client) secara sederhana

1
Degananda.com -

Web services yang siap dikonsumsi merupakan hal yang wajib dilakukan sebelum client mengaksesnya dengan menggunakan http. Apa saja hal-hal yang harus diperhatikan untuk menyiapkan ? hal itulah yang akan dibahas pada ulasan kali ini.

ulasan ini berhubungan dengan posting mengenai pembuatan web services dengan menggunakan express dan mongodb. Jika anda belum pernah membacannya anda dapat melihatnya pada tautan dibawah ini.

RESTful web service dengan express dan mongodb part 2/2

Pada web services yang kita buat dengan nodejs dan mongodb tersebut belumlah siap untuk dikonsumsi oleh client. Mengapa ?

  1. Kita menggunakan http-auth namun masih salah melakukan penempatan, sehingga nantinya jika dibiarkan seperti ini aplikasi seperti postman / rest-client yang hanya dapat mengaksesnya.
  2. Tidak terdapat status code dan pesan dari statuscode
  3. event_code (opsional), sangat direkomendasikan untuk dokumentasi sehingga setiap event memiliki kode untuk mudah proses debugging atau secara khusus melacak errornya. Setiap error kalau bisa ditangani(agar API tidak down ketika terjadi error secara parsial) dengan baik dan terdokumentasi.
  4. pastikan memberikan response pada client dengan menggunakan format sama seperti ketika kita menerima request. Pada kasus ini request diterima dengan json (untuk pertukaran data) maka response yang diberikan pada client juga harus json. Pada web servies diatas (pada tautan) beberapa endpoint masih belum memberikan response berupa JSON.
  5. Belum support cors. Jika API dan client tidak berada pada satu server / ip maka API tidak dapat diakses oleh user. Kita akan mengimplementasikan cors

* proses penanganan error tidak dibahas pada ulasan ini.

Penggunaan http-auth (basic)

// Implementasi basic auth pada express
app.use(auth.connect(basic));

app.listen(appPort , function(){
    console.log('apps running on : ' + appPort);
});

letakkan penggunaan http-auth (use) sebelum express dijalankan (app.listen()). Jika anda menaruhnya sebelum itu maka dipastikan http request pada API yang telah kita buat akan error. Maka pastikan meletakannya tepat sebelum express melakukan listen pada port tertentu yang telah kita definisikan

Implementasi CORS

CORS  harus diaktifkan ketika api dan client berada pada server yang berbeda. Pada node mengkatifkan cors sangat mudah jika kita bandingkan dengan apache yang harus menyeting htaccess. Jika anda tertarik mengaktifkan cors pada apache kunjungi link dibawah ini.

Mengaktifkan CORS pada apache

terdapat package bernama “cors” untuk mengkatifkan cors sehingga implementasi pada web services kita menjadi mudah

var cors = require('cors');
/* Cross Origin */
app.use(cors());

nb : posisi penggunaan cors (app.use()) dapat digunakan dimana saja (tidak ada kententuan khusus).

Standarisasi request dan response (data) dengan format JSON

web services yang kita buat memiliki format default JSON untuk pertukaran datannya hal ini kita lakukan dengan menggunakan body parser dan memiliki JSON sebagai format pertukaran datannya. Namun, yang paling penting adalah pastikan seluruh endpoint memberikan response JSON.

Memberikan kode

Kode yang dimaksutkan disini adalah kode response yang akan diberikan kepada client saat mereka melakukan request. Kode ini dapat berupa http code ataupun suatu field pada json saat endpoint memberikan response. Namun kami prefer menaruh kode ini pada field json karena lebih mudah untuk dihandle. namun jika ingin lebih advanced maka gunakanlah http code atau juga dapat menggabungkannya.

Mengapa kode ini penting ? karena client sangat membutuhkannya untuk memberikan pesan kepada user. Misalnya proses tersebut gagal , client harus memberikan pesan “maaf proses input data gagal”. Untuk mengimplementasikan fungsi tersebut client membutuhkan kode untuk diproses. Biasannya dapat dilihat langsung pada http code (401 / bad request) ataupun dapat kita sisipkan pada json field. Tergantung pada “kondisi”.

// Endpoint : POST
router.post('/', function(req, res ){
        req.assert('judul_note', 'isi_note belum terdefinisi').notEmpty();
        req.assert('isi_note', 'isi_note belum terdefinisi').notEmpty();
        var validationErrors = req.validationErrors();
        if(!validationErrors){
            this.noteCollection.insert({
                "judul_note" : req.body.judul_note,
                "isi_note" : req.body.isi_note,
                "date_posted" : new Date().getTime()
            }, function(err, result){
                if(!err){
                    res.status(200).json({
                    status_code : "1",
                    event_code : "1",
                    msg : "berhasil menambah note"
                });
                } else {
                    throw err;
                }
            });
        } else {
            res.status(400).json(validationErrors);           
        }
});

beberapa endpoint diatas memberikan response json dan terdapat field :

  • status_code , untuk mengakomodasi http code, namun kami biasannya memberikan “1” untuk sukses , “-1” untuk gagal.
  • event_code , untuk mendokumentasikan setiap event untuk mentrace / melacak error.

Namun pada endpoint diatas erorr masih belum dihandle karena memang tidak dibahas pada ulasan ini. Menghandle error akan dibahas tersendiri pada ulasan selanjutnya karena cukup berbeda dan tricky. Namun ketika error , tetap diberikan response seperti diatas (status_code dan event_code).

* ulasan ini merupakan opini pribadi berdasarkan pengalaman penulis.