Membuat api sederhana dengan framework adonis 4.1
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