Majalah Ilmiah Teknologi Elektro, Vol. 21, No.2, Juli - Desember 2022

DOI: https://doi.org/10.24843/MITE.2022.v21i02.P12                                                              245

Perancangan RESTful API Menggunakan Java Quarkus Untuk Modul Mahasiswa Pada Layanan SIMAK-NG Universitas Udayana

I Kadek Ari Wijaya1, Dewa Made Wiharta2, Nyoman Putra Sastra3

[Submission: 20-08-2022, Accepted: 05-10-2022]

AbstractInformation systems are very important in today's technological era. The services or methods used to deliver information are always evolving to provide better services. SIMAK-NG Udayana University is an information system built by the Udayana University Resources and Information Unit (USDI) to provide convenience to users (academic operators, lecturers and students) in online academic administration activities, which is Integrated Information System, known as Integrated Management Information System the Strategic of Udayana (IMISSU).

Previously built on a monolithic architecture, SIMAK-NG migrate the service architecture to microservices. Therefore, need to customize the program code by implementing a RESTful API that supports the performance of SIMAK-NG service. In this study, the design of a RESTful API model was made This can be used by other applications that require student data from the SIMAK service and access RESTful API services instead of accessing the database directly. API was built using the Java programming language, the Quarkus framework, and a database schema that matched the database at the SIMAK-NG service at Udayana University. The test was run locally and show that the RESTful API program's response results are as designed and work well as shown in the tests using the Postman script. this indicates that the designed API program is ready for implementation.

KeywordsInformation, RESTful API, SIMAK-NG Udayana University, Java, Quarkus

Intisari— Sistem Informasi merupakan hal yang sangat penting dalam era teknologi sekarang ini. Layanan atau metode yang digunakan untuk penyampaian informasi selalu berkembang untuk bisa memberikan layanan yang lebih baik. SIMAK-NG Universitas Udayana adalah sistem informasi yang dibangun oleh Unit Sumber Daya dan Informasi (USDI) Universitas Udayana untuk memberikan kemudahan kepada pengguna (operator akademik, dosen dan mahasiswa) dalam kegiatan administrasi akademik secara online yang tergabung dalam sebuah Sistem Informasi Terpadu, dengan nama Integrated Management Information System the Strategic of Udayana.

SIMAK-NG sebelumnya dibangun dengan menggunakan arsitektur monolithic dan akan dilakukan migrasi arsitektur

layanan menjadi microservices, sehingga perlu dilakukan penyesuaian kode program dengan melakukan implementasi RESTful API yang akan menunjang kinerja dari layanan SIMAK-NG. Pada penelitian ini telah dilakukan perancangan model RESTful API yang dapat digunakan oleh aplikasi lain yang memerlukan data mahasiswa dari layanan SIMAK tidak lagi melakukan akses secara langsung ke database namun melakukan akses ke layanan RESTful API. API dibangun dengan menggunakan bahasa pemrograman Java, framework Quarkus, dan skema database yang sesuai dengan database pada layanan SIMAK-NG Universitas Udayana. Pengujian yang dilakukan secara lokal mendapatkan bahwa hasil respon dari program RESTful API yang dibuat sudah sesuai dengan perancangan dan dapat bekerja dengan baik yang ditunjukkan dengan pengujian dengan menggunakan script Postman, hal ini menunjukkan bahwa program API yang dirancang siap untuk diimplementasikan.

Kata Kunci— Informasi, RESTful API, SIMAK-NG Universitas Udayana, Java, Quarkus

  • I.    pendahuluan

Informasi merupakan hal yang sangat berharga di era modern saat ini. Semakin cepat, akurat, dan efektif suatu informasi dapat tersampaikan akan memberi dampak yang besar terhadap pengguna. Seiring dengan perkembangan teknologi, sistem informasi memberikan bantuan pada berbagai tingkat bisnis, mulai dari transaksi operasional hingga inisiatif strategis [1], dengan adanya teknologi informasi dan komunikasi pada Perguruan Tinggi akan memudahkan pendistribusian program dengan kinerja realtime sesuai dengan tuntutan pengguna seperti menyalin dokumen, jadwal mengajar, silabus, pemeringkatan, dokumen keuangan mahasiswa [2]. Pemanfaatan teknologi komunikasi dan informasi pada institusi dapat meningkatkan daya saing institusi dengan memberikan pelayanan kepada stakeholders-nya [3].

Unit Sumber Daya dan Informasi (USDI) merupakan salah satu unit di Universitas Udayana yang bertanggung jawab terhadap pengembangan aplikasi dan keamanan data. Salah satu layanan informasi yang disediakan oleh USDI adalah Sistem Informasi Terintegrasi (IMISSU) yang terdiri dari beberapa modul, salah satunya adalah SIMAK (Sistem Informasi Manajemen Akademik). SIMAK merupakan suatu sistem informasi yang dibangun untuk memberikan kemudahan kepada pengguna (operator akademik, dosen dan mahasiswa) dalam kegiatan administrasi akademik secara online. SIMAK versi NG (Next Generation) mengelola proses

p-ISSN:1693 – 2951; e-ISSN: 2503-2372


input data dari sistem penerimaan mahasiswa baru (E-Registrasi), pengelolaan data mahasiswa, kurikulum, mata kuliah, penawaran mata kuliah, pengisian Kartu Rencana Studi (KRS), pengelolaan rubrik akademik, absensi perkuliahan, pengisian nilai, cetak transkrip, riwayat keaktifan mahasiswa, pengelolaan data skripsi/tesis/disertasi, kerja praktik, publikasi jurnal, integrasi dengan SIMDOS untuk data dosen, integrasi dengan sistem UKT-Ku untuk data pembayaran UKT, integrasi dengan SIM Beasiswa, integrasi dengan sistem pelaporan PDDIKTI hingga proses pendaftaran wisuda. Selain itu, SIMAK juga dapat berfungsi sebagai pendukung untuk analisis data dalam pengambilan keputusan terkait bidang akademik di Universitas Udayana. Saat ini arsitektur dari layanan SIMAK masih dalam bentuk monolithic. Kelemahan dari arsitektur monolithic yaitu semakin kompleks dan bertambahnya pengguna aplikasi maka akan berpengaruh terhadap biaya yang dikeluarkan karena seluruh operasional akan dibebankan pada satu buah server yang sama, selain itu akan berimbas kepada perkembangan dari aplikasi karena setiap terjadi perubahan akan berpengaruh terhadap keseluruhan sistem. Solusi yang ditawarkan untuk mengatasi permasalahan dalam arsitektur monolithic adalah dengan melakukan migrasi sistem arsitektur microservies, layanan-layanan akan dibagi menjadi beberapa services yang diharapkan dapat bekerja lebih efektif dan optimal. Gambar 1 menampilkan skema umum dari kedua arsitektur tersebut.

Gambar 1: Perbandingan Arsitektur Monolith dan Microservices

Layanan arsitektur microservices bekerja dengan menghubungkan satu layanan dengan layanan lain melalui protokol Hypertext Transfer Protocol (HTTP) melalui Application Programming Interface (API) sehingga apabila terdapat satu layanan yang bermasalah tidak akan mengganggu keseluruhan sistem dan hanya berdampak pada layanan tersebut [13], [15].

API merupakan sebuah software yang menghubungkan satu aplikasi dengan aplikasi yang lain. Tujuan pembuatannya adalah untuk saling berbagi data antar aplikasi. REST API merupakan salah satu desain arsitektur yang terdapat di dalam API itu sendiri. Cara kerja dari RESTful API yaitu REST (Representational State Transfer) client akan melakukan akses pada data/resource pada REST server. Masing-masing resource atau data-resource tersebut akan dibedakan oleh sebuah global ID atau Universal Resource Identifiers, sehingga bahasa pemrograman maupun sistem operasi yang berbeda dapat bekerja bersama dalam sistem ini.

Beberapa penelitian mengenai implementasi microservice dan penggunaan sistem penghubung pada sistem multiplatform telah dilakukan. Penelitian [4] membahas perkembangan kegiatan pariwisata di pulau Lombok yang menyebabkan berbagai macam profesi yang ditekuni atau dimanfaatkan oleh masyarakat khususnya dibidang jasa, sehingga dibuatlah aplikasi multi-platform yang dapat memberikan kemudahan kepada pengguna dalam memilih platform yang akan digunakan. Sedangkan pada [5] membahas kinerja dan kompleksitas aplikasi web yang dibangun menggunakan framework yang berbeda untuk Bahasa pemrograman Java, adapun framework yang dibandingkan yaitu Spring Boot, Micronaut, Quarkus dan Javalin.

Penelitian [6] membahas penanganan garbage collection (GC) yang pada versi terbaru 9.0.1 Java SE Development Kit (JDK) default GC diubah menjadi Garbage-First (G1) GC yang sekarang diadopsi secara luas selain Paralel GC dan Concurrent MarkSweep (CMS) atau GC yang sebelumnya digunakan.

Referensi [7] secara garis besar menjabarkan penggunaan framework Quarkus dalam penerapan arsitektur REST API pada layanan microservices.

Referensi [8] menjabarkan teori mengenai prinsip dasar pemrograman yang diperlukan dalam membuat API seperti data, transaksi, dan Object Relational Mapping hingga pembahasan menggunakan HTTP sebagai media transfer data pada layanan microservices.

Referensi [9] membahas perbedaan antara framework Quarkus dan Spring khususnya dalam penerapan API pada arsitektur aplikasi RESTful hingga meng-handle event.

Berdasarkan penelitian dan referensi yang telah ada sebelumnya khususnya dalam pengembangan sistem komunikasi antar aplikasi dan juga penerapan arsitektur layanan yang dapat mengurangi penggunaan resource, sehingga dilaksanakan penelitian ini dengan melakukan perancangan modul mahasiswa pada layanan SIMAK-NG Universitas Udayana yang dibangun dengan menggunakan bahasa pemrograman Java dan framework Quarkus.

  • II.    Tinjauan Pustaka

Perancangan RESTful API dilaksanakan dengan menggunakan bahasa pemrograman Java, framework Quarkus yang didukung dengan platform Intellij sebagai Integrated Development Environment Application, dan MySQL sebagai database.

  • A.    Arsitektur API

  • 1)    RPC: Remote Procedure Call merupakan suatu teknologi yang digunakan guna membantu kinerja pada sisi client side dan server side dalam hal komunikasi, serta dapat dilakukan dengan konsep yang sederhana. Terdapat dua jenis RPC, yaitu XML-RPC dan JSON-RPC. Perbedaan dari kedua jenis terletak pada media perpindahan datanya. XML-RPC menggunakan media berupa XML (Extensible Markup Language). Sedangkan JSON-RPC menggunakan JSON (JavaScript Object Notation) sebagai media untuk memindahkan suatu data.

Majalah Ilmiah Teknologi Elektro, Vol. 21, No.2, Juli - Desember 2022

DOI: https://doi.org/10.24843/MITE.2022.v21i02.P12                                                              247

  • 2)    SOAP: Simple Object Access Protocol adalah salah satu standar media pertukaran pesan berbasis XML melalui jaringan komputer, atau sistem operasi yang sama ataupun berbeda. Program yang berjalan pada satu sistem operasi menggunakan HTTP dan XML sebagai mekanisme pertukaran data dalam aplikasi yang berbeda, meskipun ada perbedaan dalam sistem operasi, teknologi, dan bahasa pemrograman.

  • 3)    RESTful API: Merupakan penerapan dari API (Application Programming Interface), sedangkan REST atau Representational State Transfer merupakan suatu model arsitektur komunikasi berbasis layanan web atau webservice. Aplikasi dengan arsitektur REST umumnya menggunakan HTTP sebagai protokol standar untuk mengkomunikasikan data dari aplikasi DBMS ke aplikasi pihak ketiga [10]. Adapun 4 komponen yang dimiliki oleh RESTful API yaitu: URL Design, HTTP Verbs, HTTP Response Code, dan Format Response [16], [17], [19].

  • B.    Intellij IDEA

Integrated Development Environment Application dikembangkan oleh Jetbrains tersedia dalam 2 (dua) versi, yaitu versi Community Edition dengan lisensi Apache 2 Licensed yang bisa digunakan secara gratis dan versi Ultimate Edition untuk penggunaan secara komersial. IDE yang ditulis dengan menggunakan bahasa Java dan Kotlin ini versi pertamanya dirilis pada Januari 2011, dan langsung menjadi IDE pertama untuk pengembangan aplikasi berbasis Java, hal ini dikarenakan IDE ini mendukung navigasi kode tingkat lanjut dan kemampuan refactoring yang saling terintegrasi.

  • C.    MySQL

Mysql merupakan layanan database yang menjadi elemen standar dan umum digunakan pada layanan aplikasi ataupun webservice namun menurut dokumentasi MySQL pada seri 8.0 ada pembaharuan terkait keamanan sehingga untuk melakukan koneksi ke database harus menggunakan nativeuser agar layanan dapat terhubung dengan database, yang mana ini berbeda dengan MySQL seri sebelumnya. MySQL mempunyai beberapa kelebihan dibanding database lain, diantaranya adalah MySQL sebagai Relation & Database Management System (DBMS & RDBMS), menerima query dalam bentuk multi-threading, mampu menyimpan data hingga gigabyte, dan MySQL merupakan server database yang multi-user yang berarti dapat diakses lebih dari satu pengguna [11].

  • D.    Java

Java merupakan bahasa pemrograman yang dapat dijalankan di berbagai perangkat seperti komputer pribadi hingga smartphone. Bahasa ini awalnya dikembangkan oleh James Gosling di Sun Microsystems yang sekarang menjadi bagian dari Oracle, dan dirilis pada tahun 1995. Bahasa Java memiliki sintaksi model objek yang lebih sederhana dari

I Kadek Ari Wijaya: Perancangan RESTful API Modul …

bahasa C dan C++. Aplikasi berbasis Java biasanya dikompilasi dalam p-code (bytecode) dan dapat berjalan di berbagai Java Virtual Machines (JVM). Java merupakan suatu bahasa pemrograman yang memiliki sifat umum/non-spesifik (general purpose) [12].

  • E.    Arsitektur Layanan

Kualitas layanan dapat dipengaruhi oleh arsitektur yang digunakan pada layanan, saat ini terdapat dua bentuk layanan arsitektur yang umumnya digunakan yaitu arsitektur microservices dan monolithic [13]. [20]:

  • 1)    Arsitektur Microservices: merupakan pendekatan Software Development Life Cycle (SDLC) yang didasarkan pada aplikasi dengan ukuran lebih besar yang dibangun sebagai kumpulan modul fungsional kecil. Modul fungsional ini dapat diterapkan secara independen, dapat diskalakan, menargetkan sasaran bisnis tertentu, dan berkomunikasi satu sama lain melalui protokol standar seperti request/response HTTP dengan API source [14], [15], [18].

  • 2)    Arsitektur Monolithic: merupakan suatu arsitektur yang keseluruhan kodenya akan dikompilasi menjadi satu aplikasi (menjadi satu binary atau artifact). Penggunaan arsitektur monolithic dapat memberikan penghematan dalam penggunaan server atau service sehingga tidak diperlukan server tambahan karena aplikasi ini telah mencakup seluruh kode yang dibutuhkan [19].

  • 3)    Perbandingan Arsitektur: monolithic memiliki arsitektur yang berbeda dengan microservices yaitu microservices membagi layanan menjadi beberapa services yang lebih kecil, sementara monolithic semua layanan dibebankan pada service yang sama. Tabel 1 merupakan perbandingan pada layanan monolithic dan microservices


TABEL I

Perbandingan Monolith dan Microservices

Monolithic

Microservices

Semakin kompleks sistem dan bertambahnya pengguna layanan akan berakibat pada beban service yang lebih berat jika dibandingkan microservices.

Layanan bersifat scalable, secure, dan reliable yang proses scaling-nya bisa menggunakan metode, scaling up dan scaling side.

Satu     server     untuk

menangani semua layanan.

Setiap layanan memiliki infrastruktur sendiri.

Tidak bisa menggunakan modul yang tidak ter-install pada server utama, seperti menggunakan no-sql atau sql, nodejs dan lain sebagainya.

Setiap layanan memiliki infrastruktur sendiri sehingga dapat ketergantungan aplikasi dengan layanan yang lain.

Proses update berimbas ke

Proses pembaruan hanya

p-ISSN:1693 – 2951; e-ISSN: 2503-2372

seluruh layanan.

mempengaruhi    layanan

terkait.

Seluruh code atau component menjadi satu server.

Code berbasis layanan sehingga harus memiliki dokumentasi yang lebih baik dari infrastruktur monolithic

Latensi komunikasi antar modul sangat rendah karena berada dalam server yang sama.

Adanya kemungkinan komunikasi antar modul akan mengalami kegagalan sehingga perlu dan harus selalu mempersiapkan cara mengantisipasinya.

  • F.    Quarkus

Pada penelitian ini framework yang digunakan adalah Quakurs, dimana Quarkus merupakan framework Java yang dirancang secara khusus untuk bekerja dengan optimal melalui Kubernetes dengan menghasilkan waktu start up dan waktu response yang lebih cepat ketika request pertama [21].

  • III.    Metodologi Penelitian

Susunan tahap penelitian ditunjukkan pada Gambar 2, diawali dengan mengidentifikasikan masalah, yaitu melakukan diskusi mengenai kebutuhan yang diperlukan dalam penelitian. Tahapan selanjutnya adalah studi literatur yang dilakukan melalui buku ataupun sumber lain yang berkaitan dengan RESTful API, Quarkus, arsitektur layanan, dan lain-lain. Tahapan selanjutnya dilakukan dengan melakukan perancangan terhadap modul API yang dibangun dengan menggunakan bahasa pemrograman Java.

Tahapan implementasi RESTful API dengan Quarkus dilakukan dengan menjalankan program menggunakan framework Quarkus. Tahapan selanjutnya adalah pengujian yang dilakukan dengan membandingkan hasil rancangan dengan output yang didapat dan melakukan pengujian script melalui aplikasi Postman. Tahapan selanjutnya adalah penarikan kesimpulan dilakukan berdasarkan pengujian yang telah dilakukan.

Gambar 2: Tahapan Penelitian

A. Skema Database

Database digunakan untuk penyimpanan data dalam perancangan program API. Pada penelitian ini database yang dirancang adalah sebagai berikut.

  • 1)    Tabel m_mahasiswa: Tabel ini menyimpan data-data seputar mahasiswa.

  • 2)    Tabel m_jurusan: Tabel ini menyimpan seluruh jurusan yang terdapat pada Universitas Udayana.

  • 3)    Tabel m_fakultas: Tabel ini menyimpan seluruh fakultas yang terdapat pada Universitas Udayana.

  • 4)    Tabel m_keaktifan: Tabel ini menyimpan jenis status keaktifan yang terdapat pada Universitas Udayana.

  • 5)    Tabel m_agama: Tabel ini menyimpan berbagai macam Agama yang diakui di Indonesia.

  • 6)    Tabel m_jenis_kelamin: Tabel ini menyimpan data jenis kelamin.

  • 7)    Tabel  m_konsentrasi:  Tabel  ini menyimpan data

berbagai konsentrasi yang terdapat pada program studi setiap fakultas di Universitas Udayana.

  • 8)    Tabel m_status_perkawinan: Tabel ini menyimpan data status pernikahan.

  • 9)    Tabel m_jalur_masuk: Tabel ini menyimpan berbagai data jalur masuk di Universitas Udayana.

  • 10)    Tabel m_negara: Tabel ini menyimpan data nama negara.

  • B.    Perancangan Modul Mahasiswa

Modul mahasiswa terdiri dari tiga buah fungsi dengan tugas yang berbeda, sehingga aplikasi lain yang memerlukan data mahasiswa pada simak tidak lagi melakukan akses secara langsung ke database namun akses dilakukan dengan menggunakan endpoint pada Tabel II. Tabel II merupakan daftar fungsi yang ada pada modul mahasiswa.

TABEL III

Endpoint dan Fungsi Pada Modul

Jenis

Method

Endpoint

Fungsi

GET

getListMaha

/mahasiswa

findAllMahasiswa

GET

siswa

/mahasiswa?nama=

findMahasiswaByQ ueryParam

GET

getBiodataM ahasiswa

/mahasiwa/{id_ma hasiswa}

findBiodataMahasis wa

Metode GET digunakan dalam perancangan penelitian ini dengan tiga buah fungsi yang berperan sebagai berikut.

  • 1)    findAllMahasiswa: fungsi ini memiliki peran untuk mendapatkan list mahasiswa yang datanya terdapat pada database

  • 2)    findMahasiswaByQuery: fungsi ini memiliki peran untuk mendapatkan seluruh data mahasiswa berdasarkan nama, sehingga akan dilakukan filter apabila namanya sesuai dengan query yang dilakukan

    3) findBiodataMahasiswa: fungsi ini memiliki peran untuk mendapatkan data mahasiswa dengan spesifik dan


DOI: https://doi.org/10.24843/MITE.2022.v21i02.P12 mendetail dengan menggunakan input id mahasiswa sebagai path parameter

  • C.    Metode Pengujian

Pengujian dilakukan secara lokal dan terbatas pada fungsional modul untuk melihat apakah data yang didapatkan sudah sesuai dengan rancangan dan memperhatikan status code dan juga response time yang dihasilkan dari pengujian, berikut merupakan pengujian yang akan dilakukan untuk tiap fungsi:

  • 1)    Struktur  response  findAllMahasiswa:  Tahap ini

memeriksa apakah struktur response yang dihasilkan oleh program sudah sesuai dengan struktur yang dirancang. Listing Program 1 merupakan rancang struktur response yang akan dikerjakan

Listing Program 1: Rancang struktur response findAllMahasiswa

[

{

"id": integer,

"id_jurusan": integer, "nama_jurusan": "string",

"nama_fakultas": "string",

"status_keaktifan_terakhir": integer, "nama_status_keaktifan_terakhir":

"string",

"nim": "string",

"nama": "string",

"nama_tercetak": "string"

},

{

Object lainnya

} ]

  • 2)    Struktur response   findMahasiswaByQueryParam:

Tahap ini akan memeriksa apakah struktur response yang dihasilkan oleh program sudah sesuai dengan struktur yang dirancang. Listing Program 2 merupakan rancang struktur response yang akan dikerjakan

Listing Program 2: Rancang struktur response findMahasiswaByQueryParam

[

{

"id": integer,

"id_jurusan": integer,

"nama_jurusan": "string",

"nama_fakultas": "string",

"status_keaktifan_terakhir": integer,

"nama_status_keaktifan_terakhir":

"string",

"nim": "string",

"nama": "string",

"nama_tercetak": "string"

},

{

Object lainnya

}

]

I Kadek Ari Wijaya: Perancangan RESTful API Modul …

  • 3)    Struktur response findBiodataById: Tahap ini akan memeriksa apakah struktur response yang dihasilkan oleh program sudah sesuai dengan struktur yang dirancang. Listing Program 3 merupakan rancang struktur response yang akan dikerjakan

Listing Program 3: Rancang struktur response findBiodataById

{

"id": integer,

"id_jurusan": integer, "nama_jurusan": "string",

"nama_fakultas": "string",

"status_keaktifan_terakhir": integer,

"nama_status_keaktifan_terakhir":

"string",

"nim": "string",

"nama": "string",

"nama_tercetak": "string",

"gelar_depan": "string",

"gelar_belakang": "string",

"tanggal_lahir": "string",

"tanggal_lahir_str": "string", "tempat_lahir": "string",

"alamat_asal": "string",

"kecamatan": "string",

"telepon_alamat_asal": "string",

"alamat_tinggal": "string", "telepon_alamat_tinggal": "string",

"email": "string",

"id_agama": integer,

"nama_agama": "string",

"id_jenis_kelamin": ineteger,

"nama_jenis_kelamin": "string",

"tanggal_masuk": "string",

"id_konsentrasi": integer,

"nama_konsentrasi": "string",

"status_perkawinan": integer,

"nama_status_perkawinan": "string",

"id_golongan_darah": integer,

"id_jalur_masuk": integer,

"nama_jalur_masuk": "string",

"ipk_akhir": integer,

"index_capaian": integer, "id_negara_asal": integer,

"nama_negara_asal": "string",

"nama_ayah": "string", "nama_ibu": "string",

"website": "string",

"no_ktp": "string",

"lama_studi": integer,

"image_foto": "string",

"file_ktp": "string"

}

  • 4)    Pengujian menggunakan script pada Postman: Pengujian ini akan dilakukan terhadap response code dan response time program dengan menggunakan script pada

Postman melalui konfigurasi pada Listing Program 4

Listing Program 4: Script pengujian pada Postman

pm.test("Status code is 200", function ()   {

pm.response.to.have.status(200);

}

);

p-ISSN:1693 – 2951; e-ISSN: 2503-2372


pm.test("Response time is less than 200ms", function() {

pm.expect(pm.response.responseTime).to.

be.below(200);

});

  • IV.    HASIL DAN PEMBAHASAN

Hasil dan pembahasan berdasarkan hasil yang diperoleh dari perancangan dan implementasi dijelaskan sebagai berikut.

  • A.    Handler Modul

Satu handler dirancang, yaitu program dengan nama file MahasiswaResource. Handler berfungsi untuk mengatur bagaimana kode pada modul bekerja seperti yang terlihat pada Listing Program 5

Listing Program 5: Handler Modul mahasiswa

@Path("/mahasiswa")

@Tag(name = "Modul Mahasiswa", description = "Modul API ini digunakan untuk mendapatkan data mahasiswa") @Produces(MediaType.APPLICATION_JSON) public class MahasiswaResource {

@Inject

MySQLPool pool;

@GET

@Operation(

summary = "getListMahasiswa",

description = "endpoint ini akan menampilkan data mahasiswa dan dapat menggunakan query"

)

public Multi<ListMahasiswa>

getListMahasiswa(@QueryParam("nama") String nama) { if (nama == null) {

return ListMahasiswa.findAllMahasiswa(pool);

} else { return ListMahasiswa.findMahasiswaByQueryParam(pool, nama);

}

}

@GET

@Path("/{id_mahasiswa}")

@Operation(

summary = "getBiodataMahasiswa",

description = "endpoint ini akan menampilkan data lengkap dari mahasiswa tersebut"

public Uni<Response> getBiodataMahasiswa(@PathParam("id_mahasiswa") Long id) {return BiodataMahasiswa.findBiodataById(pool, id)

.onItem().transform(mahasiswa -> mahasiswa != null ? Response.ok(mahasiswa) :

Response.status(Response.Status.NOT_FOUND))

.onItem().transform(Response.ResponseBuilder::bui ld);          }

}

Pada modul ini path diatur menjadi “/mahasiswa” yang memiliki dua buah method GET dengan nama operasi “getListMahasiswa” dan “getBiodataMahasiswa”. Program akan memanggil fungsi “findAllMahasiswa” apabila menerapkan method GET pada endpoint “/mahasiswa” tanpa query, namun apabila pencarian dilakukan dengan menggunakan parameter query “/mahasiswa?nama=” maka akan memanggil fungsi “findMahasiswaByQueryParam” hal ini terjadi akibat value queryparam pada “nama” memiliki nilai atau bukan sama dengan null atau program akan memanggil fungsi “findBiodataById” apabila menerapkan method GET pada endpoint “/mahasiswa/{id_mahasiswa}”.

  • B.    Hasil Uji Fungsi findAllMahasiswa

Fungsi findAllMahasiswa yang merupakan turunan dari operasi getListMahasiswa memiliki program seperti pada Listing Program 6.

Listing Program 6: Fungsi findAllMahasiswa

public class ListMahasiswa {

public Long id;

public Integer id_jurusan;

public String nama_jurusan;

public String nama_fakultas;

public Integer status_keaktifan_terakhir;

public String nama_status_keaktifan_terakhir;

public String nim;

public String nama;

public String nama_tercetak;

//skip to function

public static Multi<ListMahasiswa> findAllMahasiswa(MySQLPool pool) {return pool.query("select

m_mahasiswa.id,

m_mahasiswa.id_jurusan, m_jurusan.nama_jurusan, m_fakultas.nama_fakultas, m_mahasiswa.status_keaktifan_terakhir, m_keaktifan.nama as

nama_status_keaktifan_terakhir, m_mahasiswa.nim, m_mahasiswa.nama,

m_mahasiswa.nama_tercetak from

m_mahasiswa

left join m_jurusan on

m_mahasiswa.id_jurusan = m_jurusan.id

left join m_fakultas on

m_jurusan.id_fakultas = m_fakultas.id

left join m_keaktifan on

m_mahasiswa.status_keaktifan_terakhir = m_keaktifan.id

order by

m_mahasiswa.id desc").execute()

.onItem().transformToMulti(set ->

Multi.createFrom().iterable(set))

.onItem().transform(ListMahasiswa::from);

}

Fungsi findAllMahasiswa bekerja dengan melakukan request menuju endpoint “/mahasiswa” yang mana fungsi ini akan bekerja untuk mendapatkan seluruh data mahasiswa yang terdapat pada database dengan melakukan SQL join dengan beberapa tabel antara lain tabel m_jurusan, m_fakultas, dan m_keaktifan. Join dilakukan guna mendapatkan data yang tidak tersedia pada tabel m_mahasiswa, seperti nama_jurusan, nama_fakultas, dan nama_status_keaktifan_terakhir. Listing Program 7 merupakan hasil response yang didapat melalui fungsi findAllMahasiswa

Listing Program 7: Hasil response findAllMahasiswa

[

{

"id": ******,

"id_jurusan": 4,

"nama_jurusan": "Teknik Elektro",

"nama_fakultas": "Fakultas Teknik",

"status_keaktifan_terakhir": 1,

"nama_status_keaktifan_terakhir": "Aktif",

"nim": "180554****",

"nama": "I Kadek Ari Wijaya",

"nama_tercetak": "I Kadek Ari Wijaya"

},

{

Object lainnya

}

Majalah Ilmiah Teknologi Elektro, Vol. 21, No.2, Juli - Desember 2022

DOI: https://doi.org/10.24843/MITE.2022.v21i02.P12                                                              251

] I     Program 9 merupakan hasil response yang didapat melalui

Perbandingan antara perancangan struktur response fungsi fungsi findMahasiswaByQuery.

findAllMahasiswa pada Listing Program 1 dan hasil yang     listing program 9: hasil response findmahasiswabyquery

didapat pada Listing Program 7 menunjukkan bahwa kode program sudah mendapatkan hasil response yang sesuai dengan perancangan.

C. Hasil Uji Fungsi findMahasiswaByQuery

Fungsi findMahasiswaByQuery yang merupakan turunan dari operasi getBiodataMahasiswa memiliki program seperti pada Listing Program 8.

Listing Program 8: Fungsi findMahasiswaByQuery


public class ListMahasiswa {

public Long id;

public Integer id_jurusan;

public String nama_jurusan;

public String nama_fakultas;

public Integer status_keaktifan_terakhir;

public String nama_status_keaktifan_terakhir;

public String nim;

public String nama;

public String nama_tercetak;

//skip to function

public static Multi<ListMahasiswa>

findMahasiswaByQueryParam(MySQLPool pool, String nama)  {

String namasql = "'%" + nama + "%'";

return pool.query("SELECT m_mahasiswa.id," +

"m_mahasiswa.id_jurusan," +

"m_jurusan.nama_jurusan," +

"m_fakultas.nama_fakultas," +

"m_mahasiswa.status_keaktifan_terakhir," +

"m_keaktifan.nama as

nama_status_keaktifan_terakhir," +

"m_mahasiswa.nim," +

"m_mahasiswa.nama," +

"m_mahasiswa.nama_tercetak "+

"FROM m_mahasiswa "+

"LEFT JOIN m_jurusan ON m_mahasiswa.id_jurusan = m_jurusan.id "+

"LEFT JOIN m_fakultas ON m_jurusan.id_fakultas =

m_fakultas.id "+

"LEFT JOIN m_keaktifan ON

m_mahasiswa.status_keaktifan_terakhir = m_keaktifan.id "+

"WHERE m_mahasiswa.nama LIKE "+namasql+

" ORDER BY nim DESC").execute()

.onItem().transformToMulti(set ->

Multi.createFrom().iterable(set))

.onItem().transform(ListMahasiswa::from);

}

Fungsi findMahasiswaByQuery bekerja dengan melakukan request menuju endpoint “/mahasiswa?nama=” yang mana fungsi ini akan bekerja untuk mendapatkan seluruh data mahasiswa yang sesuai dengan query param yang diterapkan dan terdapat pada database dengan melakukan SQL join dengan beberapa tabel antara lain tabel m_jurusan, m_fakultas, dan m_keaktifan. Join dilakukan guna mendapatkan data yang tidak tersedia pada tabel m_mahasiswa, seperti nama_jurusan, nama_fakultas, dan nama_status_keaktifan_terakhir. Listing

[

{

"id": ******,

"id_jurusan": 4,

"nama_jurusan": "Teknik Elektro",

"nama_fakultas": "Fakultas Teknik",

"status_keaktifan_terakhir": 1,

"nama_status_keaktifan_terakhir":

"Aktif",

"nim": "180554****",

"nama": "I Kadek Ari Wijaya",

"nama_tercetak": "I Kadek Ari Wijaya"

},

{

Object lainnya dengan query serupa

}

]

Perbandingan antara perancangan struktur response fungsi findMahasiswaByQuery pada Listing Program 2 dan hasil yang didapat pada Listing Program 9 menunjukkan bahwa kode program sudah mendapatkan hasil response yang sesuai dengan perancangan.

  • D.    Hasil Uji Fungsi findBiodataById

Fungsi findBiodataById yang merupakan turunan dari operasi getBiodataMahasiswa memiliki program seperti pada Listing Program 10.

Listing Program 10: Fungsi findMahasiswaById

public class BiodataMahasiswa {

public Long id;

public Integer id_jurusan;

public String nama_jurusan;

public String nama_fakultas;

public Integer status_keaktifan_terakhir;

public String nama_status_keaktifan_terakhir;

public String nim;

public String nama;

public String nama_tercetak;

public String gelar_depan;

public String gelar_belakang;

public LocalDate tanggal_lahir;

public String tanggal_lahir_str;

public String tempat_lahir;

public String alamat_asal;

public String kecamatan;

public String telepon_alamat_asal;

public String alamat_tinggal;

public String telepon_alamat_tinggal;

public String email;

public Integer id_agama;

public String nama_agama;

public Integer id_jenis_kelamin;

public String nama_jenis_kelamin;

public LocalDate tanggal_masuk;

public Integer id_konsentrasi;

public String nama_konsentrasi;

public Integer status_perkawinan;

public String nama_status_perkawinan;

I Kadek Ari Wijaya: Perancangan RESTful API Modul …


p-ISSN:1693 – 2951; e-ISSN: 2503-2372



public Integer id_golongan_darah;

public Integer id_jalur_masuk;

public String nama_jalur_masuk;

public Float ipk_akhir;

public Float index_capaian;

public Integer id_negara_asal;

public String nama_negara_asal;

public Integer angkatan;

public String nama_ayah;

public String nama_ibu;

public String website;

public String no_ktp;

public Integer lama_studi;

public String image_foto;

public String file_ktp;

//skip to function

public static Uni<BiodataMahasiswa>

findBiodataById(MySQLPool pool, Long id)

{return pool.preparedQuery("SELECT

m_mahasiswa.id," +

"m_mahasiswa.id_jurusan," +

"m_jurusan.nama_jurusan," +

"m_fakultas.nama_fakultas," +

"m_mahasiswa.status_keaktifan_terakhir," +

"m_keaktifan.nama as

nama_status_keaktifan_terakhir," +

"m_mahasiswa.nim," +

"m_mahasiswa.nama," +

"m_mahasiswa.nama_tercetak," +

"m_mahasiswa.gelar_depan," +

"m_mahasiswa.gelar_belakang," +

"m_mahasiswa.tanggal_lahir,"+

"m_mahasiswa.tanggal_lahir_str," +

"m_mahasiswa.tempat_lahir," +

"m_mahasiswa.alamat_asal,"+

"m_mahasiswa.kecamatan,"+

"m_mahasiswa.telepon_alamat_asal," +

"m_mahasiswa.alamat_tinggal," +

"m_mahasiswa.telepon_alamat_tinggal," +

"m_mahasiswa.email," +

"m_mahasiswa.id_agama," +

"m_agama.nama as nama_agama," +

"m_mahasiswa.id_jenis_kelamin," +

"m_jenis_kelamin.nama as

nama_jenis_kelamin," +

"m_mahasiswa.tanggal_masuk," +

"m_mahasiswa.id_konsentrasi," + "m_konsentrasi.nama_konsentrasi," + "m_mahasiswa.status_perkawinan," +

"m_status_perkawinan.nama as

nama_status_perkawinan," +

"m_mahasiswa.id_golongan_darah," +

"m_mahasiswa.id_jalur_masuk," + "m_jalur_masuk.jalur_masuk as

nama_jalur_masuk," +

"m_mahasiswa.ipk_akhir," +

"m_mahasiswa.index_capaian," +

"m_mahasiswa.id_negara_asal," +

"m_negara.nama as nama_negara_asal," +

"m_mahasiswa.angkatan as angkatan,"+

"m_mahasiswa.nama_ayah," +

"m_mahasiswa.nama_ibu," +

"m_mahasiswa.website," +

"m_mahasiswa.no_ktp," +

"m_mahasiswa.lama_studi," +

"m_mahasiswa.image_foto," +

"m_mahasiswa.file_ktp "+

"FROM m_mahasiswa "+

"LEFT JOIN m_jurusan ON

m_mahasiswa.id_jurusan = m_jurusan.id "+

"LEFT JOIN m_fakultas ON

m_jurusan.id_fakultas = m_fakultas.id "+

"LEFT JOIN m_keaktifan ON

m_mahasiswa.status_keaktifan_terakhir = m_keaktifan.id "+

"LEFT JOIN m_agama ON m_mahasiswa.id_agama =

m_agama.id "+

"LEFT JOIN m_jenis_kelamin ON m_mahasiswa.id_jenis_kelamin = m_jenis_kelamin.id "+

"LEFT JOIN m_konsentrasi ON

m_mahasiswa.id_konsentrasi = m_konsentrasi.id "+

"LEFT JOIN m_status_perkawinan ON m_mahasiswa.status_perkawinan = m_status_perkawinan.id "+

"LEFT JOIN m_jalur_masuk ON

m_mahasiswa.id_jalur_masuk = m_jalur_masuk.id "+

"LEFT JOIN m_negara ON

m_mahasiswa.id_negara_asal = m_negara.id "+

"WHERE m_mahasiswa.id

LIKE ?").execute(Tuple.of(id))

.onItem().transform(RowSet::iterator)

.onItem().transform(iterator -> iterator.hasNext() ? from(iterator.next()) : null);

}

Fungsi findMahasiswaById bekerja dengan melakukan request menuju endpoint “/mahasiswa/{id_mahasiswa}” yang mana fungsi ini akan bekerja untuk mendapatkan data mahasiswa secara spesifik sesuai dengan id_mahasiswa yang diterapkan sebagai pathparam dan terdapat pada database dengan melakukan SQL join dengan beberapa tabel antara lain tabel m_jurusan, m_fakultas, m_keaktifan, m_agama, m_jenis_kelamin, m_konsentrasi, m_status_perkawinan, m_jalur_masuk, dan m_negara. Join dilakukan guna mendapatkan data yang tidak tersedia pada tabel m_mahasiswa, seperti nama_jurusan, nama_fakultas, nama_status_keaktifan_terakhir,        nama_jenis_kelamin,

nama_status_perkawinan, dan nama jalur_masuk. Listing Program 11 merupakan hasil response yang didapat melalui fungsi findMahasiswaById.

Listing Program 11: Hasil response findMahasiswaById

{

"id": ******,

"id_jurusan": 4,

"nama_jurusan": "Teknik Elektro", "nama_fakultas": "Fakultas Teknik",

"status_keaktifan_terakhir": 1,

"nama_status_keaktifan_terakhir": "Aktif",

"nim": "180554****",

"nama": "I Kadek Ari Wijaya",

"nama_tercetak": "I Kadek Ari Wijaya",

"gelar_depan": null, "gelar_belakang": null, "tanggal_lahir": "******",

"tanggal_lahir_str": "*******", "tempat_lahir": "******",

"alamat_asal": "******",

"kecamatan": "*******",

"telepon_alamat_asal": "******",

"alamat_tinggal": "******",

"telepon_alamat_tinggal": "******",

"email": "******",

"id_agama":4,

"nama_agama": "Hindu",

"id_jenis_kelamin":1,

"nama_jenis_kelamin": "Laki", "tanggal_masuk": "2018-07-20",

"id_konsentrasi":652,

"nama_konsentrasi": null, "status_perkawinan": 2, "nama_status_perkawinan": "Belum

Kawin",

DOI: https://doi.org/10.24843/MITE.2022.v21i02.P12

"id_golongan_darah": 1,

"id_jalur_masuk": 5, "nama_jalur_masuk": "SBMPTN",

"ipk_akhir": 3.46, "index_capaian": 25.164, "id_negara_asal": 63,

"nama_negara_asal": "Indonesia",

"angkatan": 2018, "nama_ayah": "I Ketut Dangin",

"nama_ibu": "Ni Nyoman Rastiti",

"website": "",

"no_ktp": "******",

"lama_studi": 1,

"image_foto": "******",

"file_ktp": "******"

}

Perbandingan antara perancangan struktur response fungsi findMahasiswaById pada Listing Program 3 dan hasil yang didapat pada Listing Program 11 menunjukkan bahwa kode program sudah mendapatkan hasil response yang sesuai dengan perancangan.

  • E.    Hasil Pengujian Script

Pengujian dilakukan terhadap modul mahasiswa dengan menggunakan script dan dinyatakan bahwa program sudah berhasil pada kedua test yang dilakukan seperti yang terlihat pada Gambar 3 merupakan hasil pengujian yang didapat dengan menggunakan script pada Postman.

RUN SUMMARY

  • ▼    GET getListMahasiswa                                                          2 O

Pass Response time is less than 200ms

Pass Status code is 200

  • ▼    GET getListMahasiswa with Query                                               2 0

Pass Status code is 200

Pass Response time is less than 200ms

  • ▼    get QetBiodataMahasiswa

Pass Status code is 200

Pass Response time is less than 200ms

Gambar 3: Hasil Pengujian Script

Berdasarkan pengujian yang telah dilakukan dapat dilihat bahwa kode program yang dikerjakan telah berhasil berjalan ditandai dengan response code 200 dan memiliki response time dibawah 200 ms.

  • V. Kesimpulan

Perancangan program dengan arsitektur RESTful API untuk layanan SIMAK-NG Universitas Udayana khususnya modul   mahasiswa   telah berhasil dirancang dan

diimplementasikan pada server local. Perancangan struktur program pada fungsi modul mahasiswa dirancang dengan menggunakan penerapan bahasa pemrograman  Java,

framework Quarkus, dan database MySQL.

I Kadek Ari Wijaya: Perancangan RESTful API Modul …

RESTful API yang telah dirancang dapat digunakan sebagai sarana atau media komunikasi data antar modul pada layanan SIMAK-NG Universitas Udayana sehingga aplikasi lain yang memerlukan data mahasiswa pada layanan SIMAK-NG dapat diakses dengan menggunakan REStful API ini. Untuk mengimplementasikan perancangan ini perlu dilakukan beberapa penyesuaian antara lain menyiapkan database dengan skema yang sesuai.

Berdasarkan pengujian yang dilakukan dengan melakukan perbandingan response yang didapat dengan rancangan yang dibuat, terlihat bahwa struktur respone yang dihasilkan sudah sesuai dengan perancangan. Pada pengujian dengan menggunakan script pada Postman didapatkan bahwa program sudah bekerja dengan baik hal ini ditandakan dengan dua buah pengujian yang dilaksanakan pada tiap fungsi telah berhasil sebesar 100% yang didasarkan pada status hit yang berhasil menghasilkan response code 200 serta memiliki response time yang berada dibawah 200 ms.

Referensi

  • [1]    Varajão, J. (2018). The many facets of information systems (+ projects) success. International Journal of Information Systems and Project Management, 5-13. https://doi.org/10.12821/ijispm060401.

  • [2]    Almaiah, M. A., & Man, M. (2016). Empirical investigation to explore factors that achieve high quality of mobile learning system based on students’ perspectives. Engineering Science and Technology an International Journal, 1314-1320.

  • [3]    Sligo, J., Gauld, R., Roberts, V., & Villa, L. (2017). A literature review for large-scale health information system project planning, implementation and evaluation. International journal of medical informatics, 86-97.

  • [4]    Choirudin, R (2019). Implementasi REST API Web Service Dalam Membangun Aplikasi Multiplatform Untuk Usaha Jasa. https://doi.org/10.30812/matrik.v18i2.407

  • [5]    Michal ,B., Marek, p., & Piotr, K. (2021). Comparison of lightweight frameworks for Java by analyzing proprietary web applications. http://dx.doi.org/10.35784/jcsi.2645

  • [6]   Grgic, H., Mihaljević, B., & Radovan, A. (2018). Comparison of

garbage    collectors    in Java programming    language.

https://doi.org/10.23919/MIPRO.2018.8400277

  • [7]    Goncalves, A., & Escoffier, C. (2020). Practising Quarkus. RedHat Developer.

  • [8]    Goncalves, A., & Escoffier, C. (2020). Understanding Quarkus.

RedHat Developer

  • [9]    Deandrea, E., Oh, D., Mouliiard, C., & Verburg, M. (2021). Quarkus for Spring Developer. RedHat Developer.

  • [10]    Manuaba, I., & Rudiastini, E. (2018). API REST Web service and backend system Of Lecturer’s Assessment Information System on Politeknik Negeri Bali. Journal of Physics: Conference Series, 1-7. http://dx.doi.org/10.1088/1742-6596/953/1/012069

  • [11]    Nugroho, B. (2004). PHP dan MySQL dengan EditorDreamweaverMX. Yogyakarta: Andi.

  • [12]  Maria.W.H  Barri, A. S. (2015). Perancangan Aplikasi SMS

GATEWAY Untuk Pembuatan Kartu Perpustakaan di Fakultas Teknik Unsrat. E-journal Teknik Elektro dan Komputer, 25.

  • [13]    Martin Fowler (2014) Microservices. [Online].    Available:

https://www.martinfowler.com/articles/microservices.html?ref=wellarc hitected

p-ISSN:1693 – 2951; e-ISSN: 2503-2372

  • [14]    P. Giessler, M. Gebhart, D. Sarancin, R. Steinegger, S. Abeck, 2015, Best Practices for the  Design of  RESTful Web  Services,

International Conferences of Software Advances (ICSEA).

  • [15]    Nicola Dragoni, Saverio Giallorenzo, Alberto Lafuente, Manuel Mazzara, Fabrizio Montesi, et al.. Microservices: yesterday, today, and tomorrow. Manuel Mazzara; Bertrand Meyer. Present and Ulterior Software Engineering, Springer, 2017,  978-3-319-67425-4.  hal-

01631455

  • [16]    R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, and T. Berners-Lee. Hypertext Transfer Protocol – HTTP/1.1. Technical Report      RFC      2616,     The      Internet      Society,

http://www.ietf.org/rfc/rfc2616.txt, 1999.

  • [17]    R. Fielding. Architectural Styles and the Design of Network-based Software Architectures. Ph.d. dissertation, University of California, Irvine, 2007.

  • [18]    Y. Gan and C. Delimitrou, "The Architectural Implications of Cloud Microservices," IEEE Computer Architecture Letters, vol. 17, no. 2, pp. 155-158, 2018.

  • [19] JULIAWAN PAWANA, I Wayan Adi; WIHARTA, Dewa Made;

SASTRA, Nyoman Putra. Identifikasi Kandidat Microservices Dengan Analisis Domain Driven Design. Majalah Ilmiah Teknologi Elektro, [S.l.], v. 20, n. 2, p. 273-280, dec. 2021. ISSN 2503-2372. Available at: <https://ojs.unud.ac.id/index.php/jte/article/view/73745>.         Date

accessed:           31           aug.           2022.           doi:

https://doi.org/10.24843/MITE.2021.v20i02.P11.

  • [20]    KURNIAWAN, Ketut Adi; PUTRA SASTRA, N; SUDARMA, M. Analisis Performansi Dan Efisiensi Cloud Computing Pada Sistem Perbankan. Majalah Ilmiah Teknologi Elektro, [S.l.], v. 19, n. 1, p. 1118,    oct.    2020.    ISSN    2503-2372.    Available    at:

<https://ojs.unud.ac.id/index.php/jte/article/view/53917>.         Date

accessed:           31            aug.           2022.           doi:

https://doi.org/10.24843/MITE.2020.v19i01.P02.

  • [21]    Koleoso, Tayo. (2020). Microservices with Quarkus. 10.1007/978-1-4842-6032-6_3.

ISSN 1693 – 2951

I Kadek Ari Wijaya: Perancangan RESTful API Modul …