8.1 Pendekatan API Jauh

Semua pengaturcara membuat kesilapan yang sama apabila membina seni bina pelayan-pelanggan. Mereka mula melayan permintaan kepada pelayan sebagai panggilan kaedah .

Anda ingin memulakan proses penjanaan laporan pada pelayan, mengapa tidak menghantarnya permintaan seperti:

http://server.com/startDocumentGeneration?params

Dan bagaimana untuk memuat turun laporan selepas ia selesai? Untuk melakukan ini, kami akan menulis kaedah lain:

http://server.com/getDocument

Pelayan dalam HttpSessionmenyimpan maklumat pada dokumen kami, dan sebaik sahaja dokumen dijana, pelayan akan memberikannya semula.

Pendekatan yang hebat. Atau tidak?

Pendekatannya sungguh dahsyat. Masalahnya ialah pelayan mesti ingat nombor dokumen. Dalam erti kata lain, untuk memproses panggilan kaedah baharu dengan betul, pelayan mesti mengingati keputusan memanggil kaedah sebelumnya.

Di web, ini adalah masalah besar. Internet mungkin hilang, pelayar mungkin ditutup. Halaman tersebut boleh dimuat semula atau diklik pada pautan secara tidak sengaja, dan sebagainya. Dan pelayan akan terus menyimpan megabait data daripada permintaan pengguna sebelumnya ...

Untuk kerja yang selesa dengan pelayan, anda tidak boleh mengharapkan bahawa anda akan sentiasa mempunyai data permintaan sebelumnya kepada pelayan di tangan.

Bagaimana kemudian untuk memanggil kaedah pelayan? Jawapan yang betul akan mengerikan: tidak mungkin!

8.2 Pendekatan REHAT

Pengaturcara kembali kepada asas dan ingat bahawa pada mulanya permintaan itu mengandungi laluan ke fail pada pelayan:

http://server.com/path?params

Dan kami memutuskan untuk menggunakan pendekatan ini secara maksimum.

Kini pelayan dianggap sebagai repositori data yang boleh dilihat oleh luar dalam bentuk pokok .

Jika anda ingin mendapatkan senarai semua pengguna, hubungi pertanyaan:

http://server.com/users

Jika anda ingin mendapatkan data pada pengguna 113, jalankan pertanyaan:

http://server.com/users/113

Dan seterusnya, semuanya dalam nada yang sama.

Sekali lagi, pelayan dilihat sebagai repositori data yang boleh dilihat oleh luar dalam bentuk pokok.

Data boleh diterima - GET permintaan , diubah suai - POST permintaan dan dipadam - DELETE permintaan .

8.3 Tiada negeri

Protokol REST interaksi antara klien dan pelayan memerlukan syarat berikut: dalam tempoh antara permintaan daripada klien, tiada maklumat tentang keadaan klien disimpan pada pelayan.

Semua permintaan daripada pelanggan mesti dibuat sedemikian rupa sehingga pelayan menerima semua maklumat yang diperlukan untuk memenuhi permintaan setiap kali . Keadaan sesi disimpan pada bahagian klien.

Semasa memproses permintaan pelanggan, pelanggan dianggap berada dalam keadaan peralihan. Setiap keadaan aplikasi individu diwakili oleh pautan yang boleh digunakan pada kali berikutnya pelanggan mencecah.

8.4 Keseragaman antara muka

Semua laluan yang digunakan untuk mendapatkan semula objek daripada pelayan adalah diseragamkan. Ini sangat mudah, terutamanya jika anda mendapat data daripada pelayan REST yang lain.

Semua antara muka objek mesti mematuhi tiga syarat:

Pengenalpastian sumber

Semua sumber dikenal pasti dalam permintaan menggunakan URI. Sumber di dalam pelayan adalah berasingan daripada pandangan yang dikembalikan kepada pelanggan. Sebagai contoh, pelayan boleh menghantar data daripada pangkalan data sebagai HTML, XML atau JSON, kedua-duanya bukan jenis storan dalam pelayan.

Memanipulasi Sumber Melalui Pandangan

Jika klien menyimpan perwakilan sumber, termasuk metadata, maka ia mempunyai maklumat yang mencukupi untuk mengubah suai atau memadamkan sumber pada pelayan.

Mesej "menggambarkan diri".

Setiap mesej mengandungi maklumat yang mencukupi untuk memahami cara mengendalikannya. Sebagai contoh, jika anda memerlukan maklumat tentang pengguna, maka pelayan akan mengembalikan objek JSON kepada anda, di mana akan ada nama, medan alamat.

Tidak sepatutnya ada situasi di mana pelanggan perlu tahu bahawa nombor pertama dalam respons adalah umur, dan yang kedua ialah tarikh lahir.

8.5 Caching

Pendekatan REST mengandaikan bahawa permintaan data dibuat melalui protokol HTTP. Oleh itu, objek diperoleh dengan memanggil permintaan GET. Ini bermakna bahawa mereka, seperti semua sumber yang diterima melalui permintaan GET, tertakluk kepada semua peraturan untuk menyimpan sumber HTTP.

Iaitu, data yang diterima melalui API REST dicache dengan cara yang sama seperti mana-mana sumber statik pada pelayan web. kecantikan :)