Apa perlunya 'kemampuan menemukan' di REST API ketika klien tidak cukup mahir untuk menggunakannya?

20

Berbagai pembicaraan yang telah saya tonton dan tutorial yang saya pindai di REST tampaknya menekankan sesuatu yang disebut 'dapat ditemukan'. Menurut pemahaman saya yang terbatas, istilah ini sepertinya berarti bahwa klien harus dapat pergi ke http://URL- dan secara otomatis mendapatkan daftar hal-hal yang dapat dilakukan.

Apa yang saya kesulitan pahami - adalah bahwa 'klien perangkat lunak' bukan manusia. Mereka hanya program yang tidak memiliki pengetahuan intuitif untuk memahami apa sebenarnya yang harus dilakukan dengan tautan yang disediakan. Hanya orang yang dapat mengunjungi situs web dan memahami teks serta tautan yang disajikan dan menindaklanjutinya.

Jadi apa gunanya dapat ditemukan, ketika kode klien yang mengakses URL yang dapat ditemukan tersebut tidak dapat benar-benar melakukan apa pun dengannya, kecuali pengembang manusia dari klien benar-benar bereksperimen dengan sumber daya yang disajikan? Ini terlihat seperti hal yang sama persis dengan mendefinisikan sekumpulan fungsi yang tersedia dalam manual Dokumentasi, hanya dari arah yang berbeda dan benar-benar melibatkan lebih banyak pekerjaan untuk pengembang. Mengapa pendekatan kedua ini mendefinisikan apa yang dapat dilakukan dalam dokumen di luar sumber daya REST yang sebenarnya, dianggap lebih rendah?

Aditya MP
sumber

Jawaban:

9

Kebutuhan untuk dapat ditemukan mungkin tidak relevan, tetapi tautan yang memungkinkan ditemukannya memiliki lebih banyak tujuan. Yang paling penting dari ini, menurut saya, adalah memberikan URI sepenuhnya dalam tanggapan terhadap klien, berarti bahwa tidak ada klien yang perlu "menyusun" URI. Itu berarti bahwa tidak ada klien yang akan membutuhkan pengetahuan tentang bagaimana URI terstruktur. Dan itu pada gilirannya memungkinkan pengembang server untuk mengubah skema URI kapan saja cocok untuk mereka karena mereka tidak perlu mempertimbangkan klien yang lebih tua masih mengandalkan cara lama penataan URI.

Marjan Venema
sumber
Ya, saya pikir saya bisa memahaminya ... tetapi bisakah Anda juga mengarahkan saya ke tautan dengan contoh kode konkret? Perubahan 'lawan' antara bagaimana sumber daya yang disematkan dengan URL yang dapat ditemukan memberikan asuransi yang lebih baik untuk masa depan?
Aditya MP
Maaf, tidak ada tautan. Hanya akal sehat dan bertahun-tahun harus mempertahankan kode di aplikasi server agar tetap kompatibel dengan klien yang lebih lama. Setiap kali Anda memiliki situasi jenis klien / server, Anda perlu server yang kompatibel dengan klien lama karena Anda TIDAK dapat mengubah klien lama setelah dikerahkan. Ini berlaku bahkan jika Anda mengontrol kode klien web dan server dan selalu mengirimkannya secara keseluruhan: Anda dapat melakukannya tanpa sakit kepala selama pengembangan sehingga tim klien web dapat mengembangkan secara mandiri mungkin dari tim back end.
Marjan Venema
Hai Marjan, hanya ingin mengatakan itu, saya terus kembali ke jawaban ini b / c dari aktivitas pemungutan suara di atasnya, dan sekitar satu setengah tahun setelah Anda menjawab, saya sepenuhnya mengerti apa yang Anda maksud, tanpa perlu "tautan": D terima kasih telah bersabar dan jawaban yang bagus ini :-)
Aditya MP
Senang itu berguna bagi Anda @AdityaMP
Marjan Venema
6

"Klien" mungkin tidak cukup canggih untuk memanfaatkannya, tetapi pengguna klien bisa. Seorang klien bisa menjadi sesuatu yang sederhana seperti browser web. Yang dapat ditemukan adalah tentang memungkinkan orang untuk mempelajari dan menggunakan API .

Misalnya, Jenkins (server CI) memiliki antarmuka seperti REST. Pergi ke halaman mana saja, postfix URL dengan "/ api", dan Anda mendapatkan halaman yang menggambarkan semua yang dapat Anda lakukan. Itu membuat belajar API sepele. Sebagai contoh, http://ci.jruby.org membawa Anda ke server jenkins untuk jruby, dan http://ci.jruby.org/api membawa Anda ke api untuk halaman tertentu.

Bryan Oakley
sumber
6

Saya merasa senang beberapa saat yang lalu untuk bekerja dengan API yang memiliki dokumentasi yang sangat, sangat sulit untuk dipahami.

Setelah saya berhasil mendapatkan balasan yang sebenarnya dari server, dimungkinkan untuk membandingkan dokumentasi dengan balasan server dan menggunakannya untuk menguraikan dokumentasi (dan ya, mengartikannya adalah istilah yang tepat). Masalahnya adalah bahwa jika permintaan dikirim ke server yang tidak sepenuhnya benar sesuai dengan spesifikasi, Anda hanya akan mendapatkan kesalahan, dan dengan dokumentasi yang tidak dapat dibaca, mencari tahu cara mengirim permintaan yang benar hampir tidak mungkin. Ada juga versi berbeda dari dokumentasi API yang tidak setuju satu sama lain dan mungkin tidak setuju dengan API itu sendiri; itu tidak membantu.

Jika ada satu perintah yang bisa saya kirim ke server, mengembalikan daftar semua perintah yang mungkin dan bagaimana tepatnya mengirimnya, itu akan sangat membantu. Keterjangkauan tidak hanya untuk klien, tetapi juga berguna untuk pengembang perangkat lunak.

gnasher729
sumber
5

CATATAN: Saya bukan ahli dalam hal ini, tetapi saya mengalami proses yang sama dalam mencoba untuk mendamaikan nuansa berbeda dari interpretasi orang tentang "REST" beberapa tahun yang lalu, dan ini adalah takeaway yang saya dapatkan dari melihatnya di waktu.

Setahu saya, ini bermula dari Hypermedia karya Roy Fielding sebagai Engine of Application State alias "HATEOAS", yang kemudian menjadi pemungkin gagasan "web semantik".

Jadi ... pada dasarnya, dan sekali lagi seperti yang saya mengerti, Anda membuat aplikasi RESTful Anda pada dasarnya menggambarkan diri sedemikian rupa sehingga konsumen tidak harus memiliki pengetahuan sebelumnya tentang kontrak formal untuk menggunakan konten / fungsionalitas Anda. Mereka dapat terlibat dari beberapa titik akhir root default dan kemudian berjalan tautan yang relevan secara kontekstual yang disediakan aplikasi Anda ketika konsumen berinteraksi. Konsumen, tentu saja, bisa seseorang atau agen sistemik.

Jika Anda hanya menggunakan "REST" untuk url cantik yang dipetakan ke operasi CRUD yang harus diketahui oleh konsumen dan panggilan sesuai dengan kontrak yang terkenal, Roy Fielding akan menganggapnya tidak benar-benar tenang.

Itu bukan untuk mengatakan bahwa pengaturan layanan RPC rasa REST tidak dapat berguna / perbaikan atas model RPC yang lebih rumit dan cocok untuk penggunaan terbatas / terkontrol, tetapi garis keras akan memandang rendah hidung mereka dan menganggapnya sebagai merosot Saya tidak benar-benar tenang.

Ed Hastings
sumber