Tugas 2 IF3110 Pengembangan Aplikasi Berbasis Web
Melakukan upgrade Website ojek online sederhana pada Tugas 1 dengan mengaplikasikan arsitektur web service REST dan SOAP.
Luangkan waktu untuk membaca spek ini sampai selesai. Kerjakan hal yang perlu saja.
Tujuan Pembuatan Tugas
Diharapkan dengan tugas ini anda dapat mengerti:
- Produce dan Consume REST API
- Mengimplementasikan service Single Sign-On (SSO) sederhana
- Produce dan Consume Web Services dengan protokol SOAP
- Membuat web application dengan menggunakan JSP yang akan memanggil web services dengan SOAP (dengan JAX-WS) dan REST (dengan Servlet).
Petunjuk Pengerjaan
Anggota Tim
Setiap kelompok beranggotakan 3 orang dari kelas yang sama. Jika jumlah mahasiswa dalam satu kelas modulo 3 menghasilkan 1, maka hanya 1 kelompok terdiri dari 4 mahasiswa. Jika jumlah mahasiswa modulo 3 menghasilkan 2, maka ada dua kelompok yang beranggotakan 4 orang. Anggota kelompok harus berbeda dengan tugas 1.
Petunjuk Pengerjaan
- Buatlah organisasi pada gitlab dengan format "IF3110-2017-KXX-nama kelompok", dengan XX adalah nomor kelas.
- Tambahkan anggota tim pada organisasi anda.
- Fork pada repository ini dengan organisasi yang telah dibuat.
- Ubah hak akses repository hasil Fork anda menjadi private.
- [DELIVERABLE] Buat tugas sesuai spesifikasi dan silakan commit pada repository anda (hasil fork). Lakukan berberapa commit dengan pesan yang bermakna, contoh:
add register form
,fix logout bug
, jangan sepertifinal
,benerin dikit
. Disarankan untuk tidak melakukan commit dengan perubahan yang besar karena akan mempengaruhi penilaian (contoh: hanya melakukan satu commit kemudian dikumpulkan). Sebaiknya commit dilakukan setiap ada penambahan fitur. Commit dari setiap anggota tim akan mempengaruhi penilaian individu. Jadi, setiap anggota tim harus melakukan sejumlah commit yang berpengaruh terhadap proses pembuatan aplikasi. - Hapus bagian yang tidak perlu dari readme ini.
- [DELIVERABLE] Berikan penjelasan mengenai hal di bawah ini pada bagian Penjelasan dari readme repository git Anda:
- Basis data dari sistem yang Anda buat.
- Konsep shared session dengan menggunakan REST.
- Pembangkitan token dan expire time pada sistem yang anda buat.
- Kelebihan dan kelemahan dari arsitektur aplikasi tugas ini, dibandingkan dengan aplikasi monolitik (login, CRUD DB, dll jadi dalam satu aplikasi)
- Pada readme terdapat penjelasan mengenai pembagian tugas masing-masing anggota (lihat formatnya pada bagian pembagian tugas).
- Merge request dari repository anda ke repository ini dengan format Nama kelompok - NIM terkecil - Nama Lengkap dengan NIM terkecil sebelum 8 November 2017 23.59.
Arsitektur Umum Server
Tugas 2 ini terdiri dari berberapa komponen yang harus dibuat:
-
Web app
: digunakan untuk menangani HTTP request dari web browser dan menghasilkan HTTP response. Bagian yang diimplementasi dengan JSP ini juga bertugas untuk meng-generate tampilan web layaknya PHP. Bagian ini wajib dibuat dengan Java + Java Server Pages. Maka dari itu, konversi seluruh kode PHP pada tugas 1 menjadi kode JSP. -
Ojek Online Web Service
: digunakan sebagai interface yang dipanggil oleh aplikasi melalui protokol SOAP. melakukan query ke database, operasi insert, dan operasi update untuk entitas User, History, dan Preferred Locations. Webservice ini akan dipanggil oleh aplikasi dengan menggunakan SOAP. Webservice ini wajib dibuat dengan JAX-WS dengan protokol SOAP atau Webservice lain yang basisnya menggunakan SOAP dan Java. -
Identity service
: dipanggil oleh aplikasi untuk menerima email (sebagai username) dan password pengguna, dan menghasilkan access token. Identity Service juga dipanggil oleh ojek online web service untuk melakukan validasi terhadap access token yang sedang dipegang oleh web app. Service ini dibuat menggunakan REST. Namun, selain menghandle request secara REST biasa, Identity Service juga harus bisa menerima SOAP request dan mengembalikan SOAP response (contoh SOAP request dan response dapat dilihat pada link berikut). Identity service ini wajib dibuat dengan menggunakan Java Servlet. -
Database
: pisahkan basis data yang telah Anda buat pada tugas 1 menjadi basis data khusus manajemen account (menyimpan username, password, dkk) dan basis data ojek online tanpa manajemen account. Basis data account digunakan secara khusus oleh Identity Service. Ojek Online Web Service tidak boleh secara langsung mengakses basis data account untuk melakukan validasi token (harus melalui Identity Service).
Perhatikan bahwa Anda tidak perlu menggunakan banyak mesin untuk membuat aplikasi ini. Contohnya, pada satu mesin anda bisa menggunakan port 8000 untuk JSP, port 8001 untuk identity service, dan port 8002 untuk ojek online web service.
Deskripsi Tugas
Anda diminta untuk membuat ojek online sederhana seperti tugas 1. Kebutuhan fungsional dan non-fungsional tugas yang harus dibuat adalah sebagai berikut.
- Halaman website yang memiliki tampilan serupa dengan tugas 1.
- Ojek Online web service dengan fungsi-fungsi sesuai kebutuhan sistem dalam mengakses data (kecuali login, register, dan logout).
- Identity service yang menangani manajemen account seperti login dan register, serta validasi access token.
- Fitur validasi email dan username pada halaman register tidak perlu diimplementasikan dengan menggunakan AJAX.
- Tidak perlu melakukan validasi javascript.
- Tampilan pada tugas ini tidak akan dinilai. Sangat disarankan untuk menggunakan asset dan tampilan dari tugas sebelumnya. Boleh menggunakan CSS framework seperti Bootstrap atau javascript library seperti jQuery.
- Tidak perlu memperhatikan aspek keamanan dan etika penyimpanan data.
Skenario
Login
- Pengguna mengakses halaman login, contoh:
/login.jsp
dan mengisi form. - JSP akan membuka HTTP request ke Identity Service, contoh
POST /login
dengan body data email dan password. - Identity service akan melakukan query ke DB untuk mengetahui apakah email dan password tersebut valid.
- Identity service akan memberikan HTTP response
access token
danexpiry time
jika email dan password ada di dalam DB, atau error jika tidak ditemukan data. Silakan definisikanexpiry time
yang menurut Anda sesuai. - Access token ini digunakan sebagai representasi state dari session pengguna dan harus dikirimkan ketika pengguna ingin melakukan semua aktivitas, kecuali login, register, dan logout.
- Access token dibangkitkan secara random. Silakan definisikan sendiri panjang tokennya.
- Cara penyimpanan access token dibebaskan.
- Silakan definisikan format request dan response sesuai kebutuhan anda. Anda dapat menggunakan JSON atau XML untuk REST.
Register
- Pengguna mengakses halaman register, contoh:
/register.jsp
dan mengisi form. - JSP akan melakukan HTTP request ke Identity Service, contoh
POST /register
dengan body data yang dibutuhkan untuk registrasi. - Identity service akan query DB untuk melakukan validasi bahwa email dan username belum pernah terdaftar sebelumnya.
- Identity service akan menambahkan user ke DB bila validasi berhasil, atau memberi HTTP response error jika username sudah ada atau confirm password salah.
- Identity service akan memberikan HTTP response
access token
danexpiry time
dan user akan ter-login ke halaman profile bila user merupakan driver atau ke halaman order bila user bukan merupakan driver. - Silakan definisikan format request dan response sesuai kebutuhan anda. Anda dapat menggunakan JSON atau XML untuk REST.
Logout
- Pengguna menekan tombol logout.
- JSP akan melakukan HTTP request ke Identity Service, contoh
POST /logout
dengan body data yang dibutuhkan. - Identity service akan menghapus atau melakukan invalidasi terhadap access token yang diberikan.
- Identity service akan mengembalikan HTTP response berhasil.
- Halaman di-redirect ke halaman login.
Add Preferred Location, Make an Order, dll
- Pengguna mengakses halaman add preferred location, misal
/add-preferred-location.jsp
dan mengisi form. - JSP akan memanggil fungsi pada ojek online web service dengan SOAP, misalnya
addPreferredLocation(access_token, location)
. Contohnya, dapat dilihat pada link berikut Perhatikan pemanggilan pada contoh ini seperti melakukan remote procedure call. - Fungsi tersebut akan melakukan HTTP request ke Identity Service, untuk mengenali user dengan
access_token
yang diberikan.- Jika
access_token
kadaluarsa, makaaddPreferredLocation
akan memberikan response expired token. - Jika
access_token
tidak valid, makaaddPreferredLocation
akan memberikan response error ke JSP. - Jika
access_token
valid, makaaddPreferredLocation
akan memasukan produk ke DB, dan memberikan response kesuksesan ke JSP.
- Jika
- Jika
access_token
sudah kadaluarsa atau tidak valid (yang diketahui dari response error ojek online web service), sistem akan me-redirect user ke halaman login. - Untuk make an order, get history, dan lainnya kira-kira memiliki mekanisme yang sama dengan add preferred locations di atas.
- Silakan definisikan format object request dan response sesuai kebutuhan anda.
Prosedur Demo
Sebelum demo, asisten akan melakukan checkout ke hash commit terakhir yang dilakukan sebelum deadline. Hal ini digunakan untuk memastikan kode yang akan didemokan adalah kode yang terakhir disubmit sebelum deadline.
Bonus
Anda tidak dituntut untuk mengerjakan ini. Fokus terlebih dahulu menyelesaikan semua spesifikasi yang ada sebelum memikirkan bonus.
- Mekanisme auto-renew access token yang tepat sehingga user tidak ter-logout secara paksa saat melakukan serangkaian aktivitas pada sistem dalam waktu yang cukup lama. Access token dapat di generate kembali ketika lifetime dari token tersebut habis. Cara implementasi dibebaskan.
Penjelasan
Berikan penjelasan mengenai konsep diatas.
Pembagian Tugas
"Gaji buta dilarang dalam tugas ini. Bila tak mengerti, luangkan waktu belajar lebih banyak. Bila belum juga mengerti, belajarlah bersama-sama kelompokmu. Bila Anda sekelompok bingung, bertanyalah (bukan menyontek) ke teman seangkatanmu. Bila seangkatan bingung, bertanyalah pada asisten manapun."
Harap semua anggota kelompok mengerjakan SOAP dan REST API kedua-duanya. Tuliskan pembagian tugas seperti berikut ini.
REST :
- Generate token : 1351xxxx
- Validasi token : 1351xxxx
- Fungsionalitas X : 1351xxxx
- ...
SOAP :
- Add Produce : 1351xxxx
- Fungsionalitas Y : 1351xxxx
- ...
Web app (JSP) :
- Halaman Login :
- Halaman X :
- ...
About
Asisten IF3110 2017
Ade | Johan | Kristianto | Micky | Michael | Rangga | Raudi | Robert | Sashi
Dosen : Yudistira Dwi Wardhana | Riza Satria Perdana | Muhammad Zuhri Catur Candra