Tutorial Membuat API Menggunakan AdonisJS – Part 4

Tutorial Membuat API Menggunakan AdonisJS – Part 4

Pada tutorial kali ini saya akan melanjutkan kembali sekaligus melengkapi tutorial tentang membuat API menggunakan AdonisJS dan database MySQL. Sebelumnya saya sudah membahas tentang bagaimana cara membuat controller, model dan route dan sekarang saya akan melengkapi method pada controller yang sudah kita buat sebelumnya.

Sebelum memulai tutorial, kita akan menambahkan data terlebih dahulu pada database. Silahkan tambahkan data kafe pada Rest API yang sudah kita buat sebelumnya, contoh data yang saya sudah buat seperti ini

[
  {
    "id": 1,
    "cafe_name": "ROEMPI Coffee & Eatery",
    "cafe_address": "Jl. Anggrek No.27, Merdeka, Kec. Sumur Bandung, Kota Bandung, Jawa Barat 40113",
    "latitude": -6.9131,
    "longitude": 107.6281,
    "created_at": "2019-10-15 01:22:24",
    "updated_at": "2019-10-15 01:22:24"
  },
  {
    "id": 2,
    "cafe_name": "Sunny Side Coffee",
    "cafe_address": "Jl. Purwakarta No.66, Antapani Kidul, Kec. Antapani, Kota Bandung, Jawa Barat 40291",
    "latitude": -6.9161,
    "longitude": 107.657,
    "created_at": "2019-10-22 20:27:26",
    "updated_at": "2019-10-22 20:27:26"
  },
  {
    "id": 3,
    "cafe_name": "Colonel Coffee",
    "cafe_address": "Jl. Cikajang Raya No.26, Antapani Tengah, Kec. Antapani, Kota Bandung, Jawa Barat 40291",
    "latitude": -6.9109,
    "longitude": 107.6532,
    "created_at": "2019-10-22 20:29:06",
    "updated_at": "2019-10-22 20:29:06"
  }
]

Sekarang kita mempunyai tiga data cafe pada database. Yang perlu kita lakukan adalah membuat sebuah method untuk menampilkan semua data tersebut pada Rest API. Tambahkan method baru bernama fetchAll() pada file CafeController.js.

async fetchAll({ response }) {
    try {
        return await Cafe.all();
    } catch (err) {
        return response.status(err.status).send(err);
    }
}

Fungsi pada method fetchAll() ini adalah untuk menampilkan seluruh data cafe pada table cafes dengan bantuan LucidORM sehingga kode yang dibutuhkan sangat sedikit. Setelah kita membuat method fetchAll(), tambahkan route pada direktori start/route.js.

'use strict'

/*
|--------------------------------------------------------------------------
| Routes
|--------------------------------------------------------------------------
|
| Http routes are entry points to your web application. You can create
| routes for different URLs and bind Controller actions to them.
|
| A complete guide on routing is available here.
| http://adonisjs.com/docs/4.1/routing
|
*/

/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */
const Route = use('Route');

Route.get('/', () => { return { greeting: 'Hello world in JSON' } });
Route.get('cafe', 'CafeController.fetchAll');
Route.post('cafe', 'CafeController.store');

Semua URL akan disamakan dan hanya akan dibedakan berdasarkan request methodnya saja seperti pada contoh diatas dimana ketika kita mengakses url /cafe dengan method GET maka function controller yang kita panggil adalah fetchAll(), sedangkan untuk method POST maka controller function yang kita gunakan adalah store().

Untuk melakukan tes saya menggunakan Insomnia, kamu juga bisa menggunakan Postman. Hasilnya adalah sebagai berikut

Tutorial Membuat API Dengan AdonisJS - Part 4 Demo 1

#fetchOne()

Berbeda dengan fetchAll(), method fetchOne() digunakan untuk menampilkan satu data saja yang sesuai dengan kriteria yang kita cari, pada kasus ini kita melakukan pencarian data cafe dengan kriteria pencarian id saja.

Pertama kita akan menambahkan route baru pada routes.js seperti berikut

Route.get('cafe/:id', 'CafeController.fetchOne');

Pada route ini saya menambahkan /:id sebagai paramater, mirip dengan parameter ?id= sehingga akan memudahkan kita untuk memisahkan suatu paramter dengan parameter yang lain.

Setelah route sekarang kita tambahkan method baru bernama fetchOne() pada file CafeController.js lalu tambahkan ketikkan kode berikut

async fetchOne({ params, response }) {
    try {
        const cafe = await Cafe.find(params.id);
        return cafe;
    } catch (err) {
        return response.status(err.status).send(err);
    }
}

parameter params digunakan untuk menangkap paramater lalu menampung parameter tersebut kedalam sebuah object. Pada route tadi kita menamai parameter kita dengan nama :id maka pada controller kita tinggal mengakses nama parameter tadi dengan params.id.

Sekarang kita tes dengan menggunakan Insomnia atau Postman maka hasilnya adalah sebagai berikut :

Tutorial Membuat API Dengan AdonisJS - Part 4 Demo 2

#update()

Pada tahap ini kita akan melakukan ubah data atau update dengan dengan menggunakan method update(). Pertama-tama kita tambahkan kembali route baru di file routes.js sebagai berikut

Route.put('cafe', 'CafeController.update');

Setahu saya, tidak ada aturan secara ketat bahwa method PUT hanya khusus untuk update data tapi method PUT dapat membedakan antara create data dan update data sehingga route yang kita miliki sekarang adalah sebagai berikut :

Route.get('cafe', 'CafeController.fetchAll');
Route.get('cafe/:id', 'CafeController.fetchOne');
Route.post('cafe', 'CafeController.store');
Route.put('cafe', 'CafeController.update');

Jelas bahwa kita hanya mengakses URL yang sama dan hanya dibedakan oleh request method saja.

Sekarang kita mulai membuat method baru didalam CafeController.js dengan nama update().

async update({ request, response }) {
        try {
            const data = request.only(['id','cafe_name', 'cafe_address', 'latitude', 'longitude']);
            const cafe = await Cafe.find(data.id);
            
            cafe.cafe_name = data.cafe_name;
            cafe.cafe_address = data.cafe_address;
            cafe.latitude = data.latitude;
            cafe.longitude = data.longitude;
            if(cafe.save()) {
                return response.send({'status':'OK'});
            } else {
                return response.send({'status':'FAILED'});
            }
        } catch (err) {
            return response.status(err.status).send(err);
        }
    }

Didalam method ini kita mengirimkan sebuah request JSON seperti berikut ini :

{
    "id":"1",
    "cafe_name": "Colonel Coffee",
    "cafe_address": "Jl. Cikajang Raya No.26, Antapani Tengah, Kec. Antapani, Kota Bandung, Jawa Barat 40291",
    "latitude": "-6.9109351",
    "longitude": "107.6532263"
}

Didalam JSON tersebut terdapat primary key berupa parameter ID yang kita sisipkan diantara data-data apa saja yang akan kita perbaharui.

Hampir mirip dengan method store() yang kita buat pada artikel sebelumnya, request yang dikirim oleh client akan ditampung kedalam sebuah array, lalu kita lalukan pencarian dengan menggunakan method Find() dari LucidORM untuk mengambil data yang memiliki id yang sesuai dengan yang kita kirimkan.

Setelah data ditemukan, kita dapat dengan mudah memperbaharui data object dari hasil record lalu kita gunakan method save() untuk menyimpan perubahan data. Cukup sederhana bukan ?

Lalu kita buat sebuah pengkondisian jika data berhasil maupun gagal disimpan. Jika kita tes dengan Rest Client maka hasilnya akan seperti berikut ini

Tutorial Membuat API Dengan AdonisJS - Part 4 Demo 3

delete()

Method yang terakhir yang akan kita bahas adalah method khusus untuk menghapus data pada record MySQL melalui API dengan AdonisJS.

Sekarang kita buat routenya di file routes.js seperti berikut

Route.delete('cafe', 'CafeController.delete');

Setelah itu kita buat method di dalam file CafeController.js seperti berikut

async delete({ request, response }) {
    try {
        const data = request.only(['id']);
        const cafe = await Cafe.find(data.id);
        if (cafe.delete()) {
            return response.send(await { 'status': 'OK' });
        } else {
            return response.send(await { 'status': 'FAILED' });
        }
    } catch (err) {
        return response.status(err.status).send(err);
    }
}

Berbeda dengan method update(), kita sekarang menggunakan method delete() dari LucidORM untuk menghapus data, setelah itu kita menggunakan sebuah pengkondisian untuk mengetahui apakah data berhasil dihapus atau tidak.

Tutorial Membuat API Dengan AdonisJS - Part 4 Demo 4

Kamu dapat mempelajari tutorial ini dengan mengikuti tutorial berikut

  1. Tutorial Membuat API Menggunakan AdonisJS – Part 1
  2. Tutorial Membuat API Menggunakan AdonisJS – Part 2
  3. Tutorial Membuat API Menggunakan AdonisJS – Part 3
  4. Tutorial Membuat API Menggunakan AdonisJS – Part 4

Selamat mencoba dan semoga bermanfaat.

Tinggalkan komentar