Tutorial APAP
Authors
- Zachra Shafira Ramadhanty - 2006597033 - C
Tutorial 7
Jelaskan secara singkat perbedaan Otentikasi dan Otorisasi! Di bagian mana (dalam kode yang telah anda buat)konsep tersebut diimplementasi?
Perbedaan antara otentikasi dan otorisasi: Otentikasi: proses identifikasi pengguna untuk mendapatkan akses ke network/computer resource dengan melakukan verifikasi apakah pengguna tersebut sesuai dengan pernyataan mereka.
Implementasi otentikasi: @Autowired public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(encoder()); }
Otorisasi: proses untuk menentukan tingkat akses dari suatu pengguna yang dilakukan setelah berhasil diotentikasi.
Implementasi otorisasi: .authorizeRequests() .antMatchers("/css/").permitAll() .antMatchers("/js/").permitAll() .antMatchers("/login-sso", "/validate-ticket").permitAll() .anyRequest().authenticated()
Apa itu BCryptPasswordEncoder? Jelaskan secara singkat cara kerja dan tujuannya.
BCryptPasswordEncoder adalah bentuk implementasi PasswordEncoder yang memakai fungsi hashing yang kuat dengan nama BCrypt. Algoritma BCrypt dipakai untuk melakukan hash dan melakukan salt password secara aman sehingga password tidak diketahui oleh siapapun kecuali pengguna terkait. Password juga akan dilakukan enkripsi dengan one-way-hashing setelah dienkripsi sehingga tidak bisa dikembalikan lagi. Kemudian, hasil password yang susah dienkripsi akan dikembalikan.
Apakah penyimpanan password sebaiknya menggunakan encryption atau hashing? Mengapa demikian?
Akan lebih baik untuk menyimpan password dengan hashing karena hashing lebih aman dan lebih cocok dipakai dibandingkan denhan enkripsi. Enkripsi melakukan pengubahan teks menjadi pesan dengan bentuk ciphertext yang nantinya akan dikembalikan menjadi teks dengan melakukan dekripsi. Hashing lebih aman karena melakukan pengubahan informasi yang menjadi kunci dengan memakai fungsi hash yang tidak dapat diambil dari hash key.
Jelaskan secara singkat apa itu UUID beserta penggunaannya!
Universally Unique Identifier (UUID) adalah sebuah 128-bit value yang digunakan untuk identifikasi objek ataupun entitas secara unik. UIID setiap objek atau entitas pasti akan berbeda sehingga tanda pengenal tiap entitas atau objek tidak tertukar dan mudah untuk diidentifikasi. Kita bisa melakukan import package UUID serta memanggil fungsi untuk melakukan generate UUID untuk objek tertentu. Contohnya, UIID akan dilakukan generate untuk setiap id pada tabel pengguna.
Apa kegunaan class UserDetailsServiceImpl.java? Mengapa harus ada class tersebut?
Kegunaan class UserDetailsServiceImpl adalah untuk memberi informasi tentang otentikasi dan otorisasi pengguna pada class lain. Class UserDetailsServiceImpl mengimplementasikan class UserDetailsService dan punya method dengan nama loadUserByUsername() yang diubah untuk menuesuaikan proses menemukan pengguna. Class tersebut perlu ada karena informasi tentang otentikasi dan otorisasi pengguna tidak bisa diberikan apabila class tersebut tidak ada.
Tutorial 5
Apa itu Postman? Apa kegunaannya?
Postman merupakan sebuah platform API yang digunakan untuk membuat dan menggunakan APIs. Platform ini bertujuan sebagai REST CLIENT untuk menguji coba REST API. Maka dari itu, dengan menggunakan platform ini, para developers akan menjadi lebih mudah dalam membuat serta menyimpan request HTTP. Platform ini juga dapat menampilkan response dari pengiriman request yang dilakukan.
Jelaskan fungsi dari anotasi @JsonIgnoreProperties dan @JsonProperty
Anotasi @JsonIgnoreProperties berfungsi untuk dipakai pada class yang ingin menandai properti/daftar properti yang diabaikan. Dengan menggunakan anotasi tersebut, pemilihan properti yang akan diabaikan atau pemilihan seluruh properti yang bersifat unknown tanpa kecuali dapat dilakukan. Untuk anotasi @JsonProperty, fungsi dari anotasi tersebut adalah untuk menandai metode setter atau getter nonstandar yang digunakan dengan properti json.
Apa kegunaan atribut WebClient?
Atribut WebClient digunakan sebagai fondasi dari poin akses utama untuk API yang dipakai sesuai dengan aturan-aturan yang berlaku pada API tersebut. Atribut ini akan memberikan verifikasi request URI dengan object mock yang merupakan interface milik Spring.
Apa itu ResponseEntity dan BindingResult? Apa kegunaannya?
ResponseEntity mewakili seluruh response HTTP. ResponseEntity dipakai untuk melakukan konfigurasi response HTTP secara keseluruhan.
BindingResult merupakan sebuah Spring object yang berfungsi untuk melakukan penyimpanan hasil validasi serta binding. BindingResult juga berisi error yang mungkin terjadi. BindingResult muncul setelah model object yang divalidasi atau Spring gagal memvalidasi object dan melakukan validasi object dan melakukan pelemparan exception.
Tutorial 4
Jelaskan perbedaan th:include dan th:replace!
Terdapat beberapa perbedaan antara th:include dan th:replace. Penggunaan th:include bertujuan untuk memasukkan fragment yang telah ditentukan sebagai body dari tag-hostnya, tetapi tidak termasuk tag fragmentnya. Sementara itu, penggunaan th:replace bertujuan untuk menggantikan tag host dengan fragment. Hal tersebut menandakan bahwa akan dilakukan penghapusan pada tag host. Tag host tersebut akan tergantikan dengan melakukan penambahan fragment termasuk tag fragmentnya.
Jelaskan apa fungsi dari th:object!
Tag th:object adalah suatu tag thymeleaf yang penggunaannya bertujuan untuk mengirim data dari suatu form yang dikirim dari view. Data tersebut akan diterima oleh controller. Tag dari th:object juga dapat didefinisikan menjadi suatu objek.
Jelaskan perbedaan dari * dan $ pada saat penggunaan th:object! Kapan harus dipakai?
Pada saat menggunakan th:object, kita menggunakan * saat kita ingin melakukan evaluasi suatu variabel dari th:object yang sudah pernah kita deklarasi. Sementara itu, kita menggunakan $ saat ingin melakukan evalusasi keseluruhan variabel atau atribut pada tag th:object.
Tutorial 3
Tolong jelaskan secara singkat apa kegunaan dari anotasi-anotasi yang ada pada model (@AllArgsConstructor, @NoArgsConstructor, @Setter, @Getter, @Entity, @Table)
Berikut ini merupakan kegunaan dari anotasi-anotasi yang ada pada model:
- Penggunaan anotasi @AllArgsConstructor bertujuan untuk membuat (generate) constructor dengan satu parameter pada suatu class. Jika terdapat anotasi @NotNull, field tersebut akan melakukan pemeriksaan null pada parameternya.
- Penggunaan anotasi @NoArgsConstructor bertujuan untuk melakukan generate constructor dengan tidak adanya parameter dan akan mengeluarkan error dengan pesan error bahwa terdapat constructor yang tidak dapat terbuat.
- Anotasi @Setter berfungsi untuk membuat (generate) setter secara automatis.
- Anotasi @Getter berfungsi untuk membuat (generate) getter secara otomatis.
- Anotasi @Entity berfungsi untuk mendefinisikan suatu class sebagai suatu entity pada database.
- Anotasi @Table berfungsi untuk menamakan tabel yang disimpan pada suatu database.
Pada class CourseDb, terdapat method findByCodeUsingQuery dan findByCode, apakah perbedaan kedua method tersebut? Jelaskan juga kegunaan @Query pada method findByCodeUsingQuery!
Fungsi method findByCode adalah untuk mengambil sebuah course berdasarkan code pada database secara langsung. Sedangkan, metode findByCodeUsingQuery mencari course dengan cara melakukan eksekusi dengan penggunaan @Query yang berguna sebagai pendefinisian query pada SQL berdasarkan.
Jelaskan perbedaan kegunaan dari anotasi @JoinTable dan @JoinColumn
Anotasi @JoinTable digunakan saat terdapat dua entity yang saling berhubungan dengan tabel yang berbeda dan ingin menyimpan ID kedua entity tersebut pada tabel terpisah. Sementara itu, anotasi @JoinColoumn digunakan ketika entity memiliki hubungan langsung seperti foreign key antar kedua entity tersebut.
Pada class Pengajar, digunakan anotasi @JoinColumn pada atribut Course, apa kegunaan dari name, referencedColumnName, dan nullable dalam anotasi tersebut? dan apa perbedaan nullable dan penggunaan anotasi @NotNull
Jelaskan kegunaan FetchType.LAZY, CascadeType.ALL, dan FetchType.EAGER FetchType hibernate berfungsi untuk menentukan apakah seluruh collection object (child) tersebut diload atau tidaknya sesaat setelah object parent dilakukan fetch. FetchType.LAZY bertujuan agar tidak melakukan load seluruh collection object (child) ketika object parent dilakukan fetch. Perlakuan load collection object (child) hanya dilakukan ketika dibutuhkan secara eksplisit oleh metode getter. Default fetching dari strateginya adalah anotasi @OneToMany dan @ManyToMany. CascadeType.ALL digunakan untuk mengoperasikan cascade khusus pada relationship sehingga operasi yang dilakukan EntityManager dapat merubah relasi entity terkait.
Tutorial 2
Pertanyaan 1: Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut:
http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&description=2020%20Fasilkom&jumlahSks=3 Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi. Saat saya membuka link yang diberikan, yang muncul pada halaman adalah whitelabel error. Terdapat penjelasan bahwa error yang terjadi adalah template might not exist. Error tersebut terjaadi karena saya belum membuat template yang direturn oleh controller, yaitu template add-course. Controller tersebut memiliki tujuan untuk mengatur logic serta route API yang akan memanggil template HTML. Dengan demikian, karena tidak terdapat respon yang diberikan, maka terjadi error.
Pertanyaan 2: Menurut kamu anotasi @Autowired pada class Controller tersebut merupakan implementasi dari konsep apa? Dan jelaskan secara singkat cara kerja @Autowired tersebut dalam konteks service dan controller yang telah kamu buat
Anotasi @Autowired pada class Controller dipakai dengan alasan agar getter method, setter method, dan constructor tidak perlu dibuat lagi. Setiap field akan diisi oleh Spring dengan objek yang memiliki tipe data yang sesuai. Anotasi tersebut merupakan hasil implementasi dari depencency injection. Pada implementasi tersebut, anotasi tersebut dapat memasukkan dependensi objek dengan cara implisit. Implementasi tersebut dapat dilihat pada Controller untuk Service.
http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&jumlahSks=3 Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi.
Pertanyaan 3: Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut:Setelah saya mengeklik link yang diberikan, muncul kembali tampilan whitelabel error page. Halaman tersebut juga menjelaskan bahwa terdapat unexpected error dengan tipe bad request dan status 400. Terdapat parameter yang dibutuhkan (required) yaitu parameter description dengan tipe string, tetapi parameter tersebut tidak ada. Maka dari itu, link tersebut memberikan parameter kosong. Padahal, seharusnya parameter tersebut tidak kosong.
Pertanyaan 4: Jika Papa APAP ingin melihat Course dengan kode APAP, link apa yang harus diakses?
Setelah menambahkan Course dengan kode APAP dengan menuju ke link http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&description=2020%20Fasilkom&jumlahSks=3 saya dapat melihat Course kode APAP dengan mengakses link berikut ini: http://localhost:8080/course/view/code-course/APAP
http://localhost:8080/course/viewAll , apa yang akan ditampilkan? Sertakan juga bukti screenshotmu.
Pertanyaan 5: Tambahkan 1 contoh Course lainnya sesukamu. Lalu cobalah untuk mengaksesBerikut ini merupakan tampilan halaman:
Tutorial 1
What I have learned today
Saya mempelajari mengenai cara menggunakan spring framework dan git, melakukan setup aplikasi-aplikasi yang diperlukan dalam pembelajaran APAP, serta cara untuk membuat halaman penghitung BMI dengan menggunakan dua packages baru yaitu model dan controller. Saya juga mempelajari penggunaan @RequestParam. Saya yakin bahwa ilmu yang saya dapatkan sekarang akan sangat digunakan pada masa yang akan datang.
(Masukkan pertanyaan yang diikuti jawaban di setiap nomor, contoh seperti dibawah. Anda juga boleh menambahkan catatan apapun di bagian ini) ### GitLab
-
Apa itu Issue Tracker? Apa saja masalah yang dapat diselesaikan dengan Issue Tracker? (Tuliskan jawabanmu) Issue Tracker atau Issues pada GitLab merupakan sebuah core building block yang mempermudah proses kolaborasi, perencanaan, dan pelacakan pekerjaan yang berupa issue board. Issues dapat digunakan untuk melakukan kolaborasi ide-ide, menyelesaikan masalah, dan merencanakan pekerjaan. Issues juga dapat digunakan untuk mendiskusikan implementasi sebuah ide, melacak tasks serta status pekerjaan, dan menjalankan informasi kode. Dengan demikian, fitur ini akan sangat mempermudahkan pekerjaan kolaborasi yang dilakukan dengan memberikan wadah untuk mengomunikasikan isu-isu yang berhubungan dengan proyek yang dikerjakan.
-
Apa perbedaan dari git merge dan git merge --squash? Setiap merge yang dilakukan pada git merge membutuhkan commit lebih. Semakin sering melakukan merge, akan semakin banyak juga commit extra yang dibuat. Git merge memiliki opsi –squash untuk memproduksi working tree dan index state sama seperti merge aslinya namun merge history dibuang. Melakukan git merge akan menambahkan setiap commit pada topic branch pada history default branch. Sementara itu, squash merge akan mendambahkan seluruh pedubahan file pada sebuah commit baru pada branch default.
-
Apa keunggulan menggunakan Version Control System seperti Git dalam pengembangan suatu aplikasi? Menggunakan version control system seperti Git dalam mengembangkan suatu aplikasi akan membantu pelacakan modifikasi kode dalam perangkat lunak. Git sendiri termasuk dalam distributed version control system yang setiap perubahan oleh developer dapat disimpan pada server. Dengan demikian, hal tersebut akan memudahkan tim proyek apabila ada yang memerlukan pengembalian history suatu dokumen sebagai pemulihan.
Spring
-
Apa itu library & dependency? Library adalah kumpulan kode untuk sebuah package atau modul yang dipakai untuk melakukan import ke program. Hal tersebut akan mempermudah proses pemrograman. Sementara itu, dependency merupakan ketergantungan antara satu perangkat dengan perangkat lunak lainnya. Dependency dipakai dengan tujuan untuk mempermudah proses pengiriman pekerjaan antarperangkat.
-
Apa itu Gradle? Mengapa kita menggunakan Gradle? Apakah ada alternatif dari Gradle? Gradle merupakan suatu build-tool program yang berfungsi untuk melakukan build secara otomatis untuk mengembangkan suatu perangkat lunak dan untuk mengontrol proses pengembangan lainnya, seperti testing, building, deployment, dan lain-lain. Terdapat beberapa alternatif tools untuk melakukan otomatisasi pengembangan, seperti Bazel, Jenkins, dan GNU Make.
-
Selain untuk pengembangan web, apa saja yang bisa dikembangkan dengan Spring framework? Spring framework dapat dipakai untuk melakukan pengembangan aplikasi enterprise atau aplikasi kompleks lainnya. Pengembangan berbagai aplikasi juga dapat dilakukan dengan big data yang infrastrukturnya sudah tersedia dengan menggunakan spring ini.
-
Apa perbedaan dari @RequestParam dan @PathVariable? Kapan sebaiknya menggunakan @RequestParam atau @PathVariable? @RequestParam digunakan untuk mengakses query parameter values dari request. Anotasi tersebut digunakan untuk setiap query parameters atau static values. Contohnya pada request URL di bawah ini: http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
Pada URL request tersebut, value dari param1 dan param 2 dapat diakses seperti berikut: public String getDetails( @RequestParam(value="param1", required=true) String param1, @RequestParam(value="param2", required=false) String param2){ ... }
Berikut ini meruapakan daftar parameter yang didukung oleh anotasi @RequestParam: defaultValue name required value
Sementara itu, @PathVariable mengidentifikasi motif yang digunakan pada URI untuk request yang masuk. Contohnya pada request URL di bawah ini: http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
URL request tersebut dapat ditulis pada Spring MVC seperti berikut: @RequestMapping("/hello/{id}") public String getDetails(@PathVariable(value="id") String id, @RequestParam(value="param1", required=true) String param1, @RequestParam(value="param2", required=false) String param2){ ....... }
Anotasi @PathVariable hanya memiliki satu value attribute untuk melakukan binding request URI template dan diperbolehkan untuk melakukan beberapa @PathVariable dalam sebuah method. Namun, tidak boleh ada dua atau lebih method yang memiliki pattern sama. Anotasi tersebut digunakan untuk dynamic values.
What I did not understand (tuliskan apa saja yang kurang Anda mengerti, Anda dapat men-check apabila Anda sudah mengerti dikemudian hari, dan tambahkan tulisan yang membuat Anda mengerti)
- Perbedaan antara @GetMapping dan @RequestMapping @GetMapping adalah anotasi terdiri yang bertindak sebagai pintasan untuk @RequestMapping(method = RequestMethod.GET). Selain itu, @GetMapping merupakah sebuah anotasi yang lebih baru. @RequestMapping adalah tingkat kelas sementara itu @GetMapping adalah tingkat metode. Dengan sprint Spring 4.3., kita dapat menggunakan @GetMapping pada metode yang akan menangani permintaan http.
Kenapa saya harus belajar APAP? Kenapa? Karena mata kuliah Arsitektur dan Pemrograman Aplikasi Perusahaan mempelajari mengenai arsitektur dan teknologi perkembangan aplikasi enterprise terkini seperti proses pengembangan aplikasi, architectural patterns, microservices, event-driven architecture, scalable system, dan studi kasus. Sebagai mahasiswa Fakultas Ilmu Komputer, tentunya ilmu-ilmu tersebut sangat dibutuhkan untuk dipahami agar dapat mengembangkan arsitektur dan pemrograman aplikasi perusahaan yang baik di masa depan.
(Anda dapat membuat tampilan code dalam README.md menjadi lebih baik. Cari tahu lebih dalam tentang penulisan README.md di GitLab pada link berikut)