Mempersiapkan Sertifikasi Spring Profesional. Istirahat musim semi

Artikel hari ini akan membahas pertanyaan dasar tentang REST di Musim Semi. Ini akan sangat berguna bagi programmer pemula.


Panduan resmi dari Pivotal, yang mengatakan tentang topik untuk persiapan.



Daftar isi
  1. Ketergantungan injeksi, wadah, IOC, kacang
  2. AOP (pemrograman berorientasi aspek)
  3. JDBC, Transaksi, JPA, Data Musim Semi
  4. Boot musim semi
  5. Musim semi mvc
  6. Keamanan musim semi
  7. SISA
  8. Pengujian



Spring REST adalah bagian dari Spring MVC. Oleh karena itu, sebagian besar Spring MVC akan digunakan dalam REST dan sebaliknya. Untuk tampilan yang lebih mendalam di Spring MVC, baca artikel ini .


Untuk apa REST dibuat?

Untuk memahami konsep REST, Anda perlu mengurai akronim ke dalam komponen-komponennya:


  • Representasi - sumber daya dalam REST dapat direpresentasikan dalam bentuk apa pun - JSON, XML, teks, atau bahkan HTML - tergantung pada data mana yang lebih cocok untuk konsumen
  • Negara - saat bekerja dengan REST, Anda harus fokus pada kondisi sumber daya, dan bukan pada tindakan dengan sumber daya
  • Transfer - REST mencakup transfer data sumber daya, dalam bentuk apa pun yang disajikan, dari satu aplikasi ke aplikasi lainnya.

REST adalah transfer status sumber daya antara server dan klien.


Apa itu sumber daya?

Sumber daya di REST adalah semua yang dapat ditransfer antara klien dan server.
Berikut adalah beberapa contoh sumber daya:


  • Berita
  • Suhu di St. Petersburg pada hari Senin pukul 4 pagi
  • Gaji karyawan
  • Pemilihan basis data
  • Hasil pencarian

Apa kepanjangan dari CRUD?

Tindakan dalam REST ditentukan oleh metode http.
Get , Post , Put , Delete , Patch , dan lainnya.


Yang paling umum digunakan dilambangkan dengan akronim CRUD:


  • Buat - POST
  • Baca - GET
  • Perbarui - PUT
  • Hapus - DELETE

Apakah REST aman? Bagaimana Anda bisa melindunginya?

Secara default, REST tidak aman.


Anda dapat mengkonfigurasi keamanan dengan Basic Auth, JWT, OAuth2

.
Apa itu operasi simpan?

Ini adalah operasi yang tidak mengubah sumber daya. Berikut daftar mereka:


  • Dapatkan
  • KEPALA
  • PILIHAN

Apa operasi idempoten? Mengapa idempotensi penting?

Metode idempoten adalah metode dengan setiap doa yang hasilnya akan sama.


Artinya, hasil setelah 1 panggilan metode seperti itu akan sama dengan hasil setelah 10 panggilan metode ini.


Ini penting untuk API toleran kesalahan. Misalkan klien ingin memperbarui sumber daya menggunakan permintaan POST? Jika POST bukan metode idempoten, maka beberapa panggilan akan menyebabkan pembaruan sumber daya yang tidak terduga. Menggunakan metode idempoten, Anda melindungi diri dari banyak kesalahan.


Apakah skala REST baik?

Ya SISA skala dengan baik karena tidak menyimpan negara.


Ini berarti bahwa ia tidak menyimpan informasi sesi pengguna di server.


Informasi klien tidak boleh disimpan di sisi server, tetapi harus dikirimkan setiap kali ke tempat itu diperlukan. Inilah yang dimaksud ST dalam REST, Transfer Negara. Anda lulus negara, bukan menyimpannya di server.


REST juga dapat dioperasikan - ini berarti bahwa berbagai program yang ditulis dalam bahasa yang berbeda dapat berinteraksi dengannya. Ini berasal dari 2 faktor:


  • Klien HTTP yang dapat dioperasikan. Klien yang berbeda harus mengirim permintaan http yang sama.
  • Interoperabilitas di tingkat jenis media. Klien yang berbeda harus mengirim dan menerima sumber daya yang sama dengan benar.

Apa itu HttpMessageConverter?

HttpMessageConverter mengubah permintaan menjadi objek dan sebaliknya.


Spring memiliki beberapa implementasi antarmuka ini, dan Anda dapat membuatnya sendiri.


Dalam hal ini, DispatcherServlet tidak menggunakan Model dan Tampilan.


Di REST, Model dan View tidak ada sama sekali. Hanya ada data yang diberikan oleh pengontrol dan representasi sumber ketika pesan dikonversi dari jenis media (json, xml ...) menjadi objek.


Daftar Konverter:


BufferedImageHttpMessageConverter - Mengubah BufferedImage ke (dari) kode gambar.


Jaxb2RootElementHttpMessageConverter - mengkonversi xml ke (dari) objek yang ditandai dengan penjelasan jaxb2. Daftar jika jaxb2 ada di classpath.


MappingJackson2HttpMessageConverter - mengubah JSON menjadi (dari) objek. Daftar jika Jackson 2 ada di classpath.


StringHttpMessageConverter - mengonversi semua file media menjadi teks / polos.


Bagaimana cara kerja anotasi @RestController?

@RestController ditempatkan pada kelas pengontrol alih-alih @Controller . Dia menunjukkan bahwa kelas ini tidak beroperasi pada model, tetapi pada data. Terdiri dari @RequestBody dan @RequestBody .


 @Controller @ResponseBody public interface RestController 

Mengapa @ResponseBody?

@ResponseBody diletakkan pada metode yang bekerja dengan data, bukan model. Tidak perlu ditentukan secara eksplisit jika @RestController digunakan.


Metode reguler mengembalikan Model , dan metode @ResponseBody beranotasi mengembalikan objek yang dikonversi ke file media menggunakan HttpMessageConverter .


Apa yang dilakukan oleh anotasi @RequestMapping?

Anotasi ini digunakan untuk memetakan permintaan ke kelas dan metode pengontrol.
Sebelumnya, ini digunakan untuk metode kelas untuk menunjukkan URI, metode http, jenis data yang dikirim, dll. Dalam versi Spring yang lebih baru, itu diganti dengan @GetMapping , @PostMapping , dll.


Sekarang hanya digunakan untuk menunjukkan URI ke kelas controller.


Apa itu anotasi @GetMapping, @PostMapping, @DeleteMapping, dan lainnya?

Ini adalah penjelasan yang lebih sempit untuk memetakan metode http.


  • @GetMapping - Menangani mendapat permintaan
  • @PostMapping - Menangani permintaan posting
  • @DeleteMapping - Menangani permintaan penghapusan
  • @PutMapping - Menangani permintaan
  • @PatchMapping - Menangani permintaan tambalan

Semua yang tertulis di bawah ini juga merupakan karakteristik dari anotasi lainnya.


Annotation @GetMapping hanyalah anotasi yang berisi @RequestMapping (metode = RequestMethod.GET) .
Ini juga memungkinkan Anda menyempurnakan metode penangan.
Parameternya (parameter tersebut dikonversi ke parameter @RequestMapping yang serupa):


  • path - URI
  • headers - header
  • name - nama penangan
  • params - parameter
  • produces - jenis data yang dikembalikan (JSON, XML, teks). Digunakan di REST
  • consumes - jenis data yang diterima. Digunakan di REST


    Secara default, anotasi mengambil jalur ke metode.
    @GetMapping("managers") = @GetMapping(path = "managers")



Mengapa menggunakan anotasi @RequestParam?

Anotasi ini digunakan agar metode handler bisa mendapatkan parameter dari permintaan http.


Permintaan dengan parameter: http://localhost:8080/getByName/name=Ivan .
Kode berikut akan meletakkan string Ivan dalam name variabel.


 @GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) { //some logic } 

Mengapa menggunakan anotasi @PathVariable?

Anotasi ini mendapat bagian khusus dari URI.


URI: http://localhost:8080/getById/23


Kode berikut akan menempatkan 23 dalam variabel id .


 @GetMapping("getById/{id}") public User getUserById(@PathVariable("id") String id) { //some logic } 

Apa arti berbagai kode untuk respons http?

DAPATKAN - 200 OK


POST - 200 OK, 201 Dibuat, 204 Tidak Ada Konten


PUT - 200 OK, 201 Dibuat, 204 Tidak Ada Konten


HAPUS - 204 Tidak Ada Konten, 202 Diterima


Mengapa saya memerlukan anotasi @ResponseStatus?

Ini memungkinkan Anda untuk mengatur kode respons. Biasanya, Spring itu sendiri menetapkan kode respons yang diinginkan, tetapi ada kalanya Anda perlu menimpanya.


 @PostMapping @ResponseStatus(HttpStatus.CREATED) public void add(...) {...} 

Alih-alih menggunakan anotasi, Anda dapat mengembalikan ResponseEntity dan secara manual mengatur kode respons.


Menggunakan ResponseEntity dan @ReponseStatus bersamaan tidak disarankan.


Apa itu ResponseEntity?

Ini adalah kelas khusus yang mewakili respons http. Berisi tubuh respons, kode status, tajuk. Kita dapat menggunakannya untuk menyempurnakan respon http.


Ini adalah tipe universal, dan objek apa pun dapat digunakan sebagai tubuh:


 @GetMapping("/hello") ResponseEntity hello() { return new ResponseEntity("Hello World!", HttpStatus.OK); } 

Mengapa @RequestBody?

Anda dapat menggunakan anotasi @RequestBody pada parameter metode sehingga badan permintaan dikonversi ke parameter ini.


 @PostMapping("accounts") //,   JSON    Account public void handle(@RequestBody Account account) {...} 

Anda dapat menggunakan @Validated bersama dengan @RequestBody untuk memeriksa permintaan.


Apa itu RestTemplate? Apa kelebihannya?

RestTemplate adalah klien khusus di Spring untuk mengirim permintaan http. Ini menyediakan API yang nyaman untuk memanggil titik akhir REST dengan mudah pada satu baris.


 RestTemplate restTemplate = new RestTemplate(); String fooResourceUrl = "http://localhost:8080/spring-rest/foos"; ResponseEntity response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class); 

Anda dapat mempelajari lebih lanjut tentang penggunaan dalam artikel ini .

Source: https://habr.com/ru/post/id471140/


All Articles