Membuat website tanya jawab seperti Stack Exchange dengan REST dan SOAP dan arsitektur berorientasi servis.
Diharapkan dengan tugas ini anda dapat mengerti:
- Produce dan Consume REST API
- Mengimplementasikan oauth sederhana
- Produce dan Consume Web Services dengan protokol SOAP
- Membuat web application dengan frontend menggunakan JSP yang akan memanggil web services dengan SOAP dan REST.
- Buatlah organisasi pada github dengan nama sesuai dengan nama tim yang anda daftarkan.
- Tambahkan anggota tim pada organisasi anda.
- Fork pada repository ini dengan organisasi yang telah dibuat.
- Silakan commit pada repository anda (hasil fork). Lakukan berberapa commit dengan pesan yang bermakna, contoh:
fix css
,create post done
, jangan sepertifinal
,benerin dikit
. Disarankan untuk tidak melakukan commit dengan perubahan yang besar karena akan mempengaruhi penilaian (contoh: hanya melakukan satu commit kemudian dikumpulkan). Commit dari setiap anggota tim akan mempengaruhi penilaian. Jadi, setiap anggota tim harus melakukan commit yang berpengaruh terhadap proses pembuatan aplikasi. - Ganti bagian link laporan dengan link laporan anda (misal dropbox) dalam format PDF yang terdiri dari:
- Perbedaan SOAP dan REST, serta kelebihan dan kekurangan dari SOAP dan REST.
- Konsep melakukan sharing session dengan menggunakan REST.
- Kelebihan dan kelemahan dari arsitektur aplikasi tugas ini, dibandingkan dengan aplikasi monolitik (login, CRUD DB, dll jadi dalam satu aplikasi)
- Pull request dari repository anda ke repository ini dengan format Nama kelompok - NIM terkecil - Nama Lengkap dengan NIM terkecil sebelum Jumat, 20 November 2015 23.59.
Masukkan link laporan anda di sini
*----------------------------------------------------*
|Database |
|(MYSQL, PGSQL, dll) |
*----------------------------------------------------*
| |
Adapter Adapter
| |
*----------------* *------------------------*
|Identity Service| consume |Stackexchange Webservice|
|Java Servlet |<----------|JAX-WS (atau Java SOAP WebService lain)
|REST API | |SOAP |
*----------------* *------------------------*
^ ^
\ consume / consume
\ /
*---------------*
|Frontend WebApp|
| JSP |
*---------------*
|
connect
|
*----------------------*
|Web Browser |
|(chrome, firefox, dll)|
*----------------------*
Tugas 2 ini terdiri dari berberapa komponen yang harus dibuat:
- Front-end: digunakan untuk menangani HTTP request dari web browser dan menghasilkan HTTP response. Front end ini wajib dibuat dengan Java+Java Server Pages
- Stackexchange Webservice: digunakan untuk interface yang dipanggil oleh front-end dan melakukan query ke database, operasi insert, dan operasi update untuk entitas User, Question, dan Answer. Webservice ini akan dipanggil oleh frontend menggunakan SOAP. Webservice ini wajib dibuat dengan JAX-WS dengan protokol SOAP atau Webservice lain yang basisnya menggunakan SOAP dan Java.
- Identity service: digunakan untuk menerima email (sebagai username) dan password pengguna dan menghasilkan access token. Server ini akan dipanggil oleh frontend atau stackexchange webservice menggunakan REST. Identity service ini wajib dibuat dengan menggunakan Java Servlet
- 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 stackexchange web service.
Anda diminta untuk membuat stackexchange seperti tugas 1. Kebutuhan fungsional tugas yang harus dibuat adalah sebagai berikut.
- Registrasi pengguna yang minimal terdiri dari nama, email, dan password. Anda harus melakukan validasi bahwa email yang sama tidak boleh digunakan untuk dua kali mendaftar.
- Login pengguna.
- List pertanyaan, seperti tugas 1.
- Bertanya, seperti tugas 1. Pengguna harus login terlebih dahulu untuk bertanya.
- Ubah pertanyaan, seperti tugas 1. Ubah pertanyaan hanya dapat dilakukan oleh si pembuat pertanyaan tersebut.
- Hapus pertanyaan, seperti tugas 1. Hapus pertanyaan hanya dapat dilakukan oleh si pembuat pertanyaan tersebut.
- Lihat pertanyaan.
- Menjawab pertanyaan, seperti tugas 1. Pengguna harus login terlebih dahulu.
- Vote up/down pada suatu pertanyaan seperti tugas 1. Satu pengguna hanya dapat melakukan vote pada suatu pertanyaan maksimal satu kali, dan hanya bisa vote up XOR vote down. Vote tidak perlu menggunakan AJAX.
- Tampilan dibebaskan. Tampilan tidak akan dinilai. Boleh menggunakan asset dan tampilan dari tugas sebelumnya. Boleh menggunakan CSS Framework seperti Bootstrap atau javascript library seperti jquery.
- Tidak perlu validasi javascript
- Tidak perlu memperhatikan aspek keamanan dan etika penyimpanan data.
Skenario ini adalah kebutuhan non fungsional yang harus dipenuhi.
- Pengguna mengakses halaman registrasi, contoh:
/register.jsp
- Pengguna mengisi form.
- JSP akan memanggil fungsi Stackexchange web service dengan SOAP, misal
register(name,email,password);
Contohnya dapat dilihat pada link berikut Perhatikan pemanggilan pada contoh ini seperti melakukan remote procedure call. - Web service akan memberikan pesan sukses atau error.
- Pengguna mengakses halaman login, contoh:
/login.jsp
dan mengisi form. - JSP akan membuka HTTP Request Connection ke Identity Service, contoh
POST /login
dengan body data email dan password. - Identity service akan query DB apakah email dan password valid.
- Identity service akan memberikan HTTP Response
access token
danlifetime
jika email dan password ada di dalam DB, atau error jika tidak ditemukan data. - Token ini digunakan sebagai representasi state dari session pengguna dan harus dikirimkan ketika pengguna ingin melakukan Create, Update, Delete Question, Vote, dan Answer.
- Silakan definsikan format request dan response sesuai kebutuhan anda. Anda dapat menggunakan JSON atau XML untuk REST.
- Pengguna mengakses halaman create post, misal
/create.jsp
dan mengisi form. - JSP akan memanggil fungsi Stackexchange ws dengan SOAP, misalnya
createQuestion(access_token,title,content)
- Fungsi
createQuestion
pada Stackexchange ws akan melakukan HTTP Request connection ke Identity Service, siapakah pemilikaccess_token
yang diberikan.
- Jika
access_token
yang diberikan sudah kadaluarsa, makacreateQuestion
akan memberikan response expired token. - Jika
access_token
tidak valid, makacreateQuestion
akan memberikan response error ke JSP. - Jika valid, maka
createQuestion
akan melakukan insert ke DB, dan memberikan response ok ke JSP.
- Untuk update question, delete question, answer question, dan vote up/down kira-kira mekanismenya hampir sama dengan create question.
- Silakan definisikan format object request dan response sesuai kebutuhan anda.
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.