Membuat api sederhana dengan framework adonis 4.1

Muhammad Zakuan
5 min readAug 19, 2018

--

Pada tulisan kali ini kita akan membuat rest api sederhana dengan menggunakan adonis 4.1. Adonis merupakan merupakan framework nodejs dengan fitur fitur yang mirip dengan framework php laravel. Bagi pembaca yang sudah biasa menggunakan laravel pasti tidak asing dengan cara kerja adonis.

Project aplikasi yang akan kita buat kali ini mengandung table student dengan kolom nisn, name, study.

Langkah pertama adalah buat database di mysql dengan nama scholl_db

Jika anda belum menginstall adonis cli maka install adonis cli untuk memudahkan kita develop dengan adonisjs.

npm i --global @adonisjs/cli

Buat aplikasi dengan menggunakan perintah berikut

adonis new school-api --api-only

tunggu proses install sampai selesai. Untuk memastikan proses install aplikasi berjalan dengan baik mari kita cek dengan menjalankan perintah berikut di terminal

curl http://localhost:3333

Jika berhasil maka anda akan mendapati hasil sebagai berikut

Oke aplikasi sudah berjalan dengan baik, mari kita lanjut ke step selanjutnya. Setting database di file.env sesuai dengan konfigurasi database mysql anda.

DB_CONNECTION=mysql  //ganti menjadi mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_USER=root //ganti sesuai dengan nama user anda di mysqlDB_PASSWORD=zakuan //password user di mysqlDB_DATABASE=school_db  //nama database

Sekarang kita membuat model. Model merupakan representasi dari struktur data yang akan kita olah. Jalankan perintah berikut

adonis make:model Student --migration

Perintah di atas akan membuat model Student yang terletak di app/models/Student.js dan file migration database yang terletak di database/migrations yang bernama …. student …schema. File migration ini nantinya berisi konfigurasi dari table student.

Buka file migration user schema yang ada di database/migrations/..student. Edit sehingga menjadi berikut

this.create('students', (table) => {table.increments()table.string('nisn').nullable()table.string('name').nullable()table.string('study').nullable()table.timestamps()})

Install module mysql dengan menjalankan perintah sebagai berikut

npm install --save mysql

Jalankan migrasi untuk membuat tabel student dengan perintah sebagai berikut

adonis migration:run

Adonis otomatis akan membuat tabel student sesuai konfigurasi yang ada di student schema.

Buka model Student.js di app/models/Student.js, kemudian copy paste menjadi sehingga class student menjadi seperti berikut

class Student extends Model {static get table () {return 'students'}static get primaryKey () {return 'id'}}

Buat controller untuk menjalankan request dari routing dengan menjalankan perintah berikut

adonis make:controller StudentController

Anda akan diberi dua pilihan for HTTP requests atau for Websocket Channel, maka pilih For HTTP request

Menyimpan data students

Untuk menyimpan data student buka routes di start/routes.js, kemudian tambahkan code sehingga menjadi seperti berikut

Route.group(() => {Route.post('students', 'StudentController.store')}).prefix('api/v1')

Buka controller StudentController, kemudian tambahkan method store sehingga code nya menjadi seperti berikut

'use strict'const Student = use('App/Models/Student')class StudentController {async store ({request, response}) {const studentInfo = request.only(['nisn', 'name', 'study'])const student = new Student()student.nisn = studentInfo.nisnstudent.name = studentInfo.namestudent.study = studentInfo.studyawait student.save()return response.status(201).json(student)}}module.exports = StudentController

Sekarang anda sudah berhasil membuat api untuk menyimpan data students. Anda bisa mengeceknya dengan insomnia atau postman dengan api http://localhost:3333/api/v1/students

dengan menggunakan method POST

Menampilkan data students

Kali ini kita akan menampilkan seluruh data student. Method yang kita gunakan adalah GET.

Buka file routes di start/routes.js, kemudian tambahkan code untuk routing get, sehingga datanya untuk routing group menjadi seperti berikut

Route.group(() => {Route.get('students', 'StudentController.index')Route.post('students', 'StudentController.store')}).prefix('api/v1')

Buka file controller StudentController.js kemudian tambahkan method index sehingga code class Student menjadi seperti berikut

class StudentController {async index ({response}) {let students = await Student.all()return response.json(students)}async store ({request, response}) {const studentInfo = request.only(['nisn', 'name', 'study'])const student = new Student()student.nisn = studentInfo.nisnstudent.name = studentInfo.namestudent.study = studentInfo.studyawait student.save()return response.status(201).json(student)}}

Buka insomnia atau postman kemudian request menggunakan method GET dengan apihttp://localhost:3333/api/v1/students

Maka akan ditampilkan hasil sebagai berikut

Menampilkan detail student

Seperti biasa, langkah pertama adalah menambahkan routing untuk menampilkan data student berdasarkan id tertentu.

Route.group(() => {Route.get('students', 'StudentController.index')Route.get('students/:id', 'StudentController.show')Route.post('students', 'StudentController.store')}).prefix('api/v1')

Buka StudenController, kemudian tambahkan method show berikut ke dalam class StudentController

async show ({params, response}) {const student = await Student.find(params.id)return response.json(student)}

Test api untuk menampilkan detail student dengan request ke http:localhost:3333/api/v1/students/id menggunakan method get. Dengan id merupakan id dari student

Mengubah data student

Buka file routes, kemudian tambahkan route berikut ke dalam router group student sehingga code menjadi seperti berikut

Route.group(() => {Route.get('students', 'StudentController.index')Route.get('students/:id', 'StudentController.show')Route.post('students', 'StudentController.store')Route.put('students/:id', 'StudentController.update')}).prefix('api/v1')

Buka controller StudentController. Tambahkan method update berikut ke dalam class StudentController

async update ({params, request, response}) {const studentInfo = request.only(['nisn', 'name', 'study'])const student = await Student.find(params.id)if (!student) {return response.status(404).json({data: 'Resource not found'})}student.nisn = studentInfo.nisnstudent.name = studentInfo.namestudent.study = studentInfo.studyawait student.save()return response.status(200).json(student)}

Test api untuk update data student menggunakan method PUT dengan api http:localhost:3333/api/v1/students/id . Parameter id merupakan id dari student.

Menghapus data student

Buka file routes, kemudian tambahkan route delete ke dalam router group student sehingga code menjadi seperti berikut

Route.group(() => {Route.get('students', 'StudentController.index')Route.get('students/:id', 'StudentController.show')Route.post('students', 'StudentController.store')Route.put('students/:id', 'StudentController.update')Route.delete('students/:id', 'StudentController.delete')}).prefix('api/v1')

Buka controller StudentController. Tambahkan method delet berikut ke dalam class StudentController

async delete ({params, response}) {const student = await Student.find(params.id)if (!student) {return response.status(404).json({data: 'Resource not found'})}await student.delete()return response.status(204).json(null)}

Test api untuk delete data student menggunakan method DELETE dengan api http:localhost:3333/api/v1/students/id . Parameter id merupakan id dari student.

Tidak ada data yang dikembalikan ketika menghapus data student dengan id 5 di atas .

Sekian tutorial membuat base api sederhana menggunakan framework adonis. Aplikasi dapat didownload di https://github.com/zackstam/school-api

--

--

Responses (1)