Pembaca yang baru mengenal topik ini akan dikejutkan oleh diskusi tanpa akhir tentang apa yang harus Anda lakukan, dan relatif tidak adanya pelajaran dari pengalaman. Fakta bahwa REST "lebih disukai" daripada SOAP adalah, saya kira, pembelajaran tingkat tinggi dari pengalaman, tetapi kebaikan kita pasti telah berkembang dari sana? Ini 2016. Disertasi Roy tahun 2000. Apa yang kami kembangkan? Apakah itu menyenangkan? Apakah mudah diintegrasikan? Mendukung? Apakah ini akan menangani kebangkitan smartphone dan koneksi seluler yang rapuh?
Menurut ME, jaringan kehidupan nyata tidak bisa diandalkan. Permintaan batas waktu. Koneksi diatur ulang. Jaringan mati selama berjam-jam atau berhari-hari. Kereta masuk ke terowongan dengan pengguna seluler naik. Untuk setiap permintaan yang diberikan (seperti yang kadang-kadang diakui dalam semua diskusi ini) permintaan tersebut dapat jatuh ke dalam air dalam perjalanannya, atau responsnya dapat jatuh ke dalam air dalam perjalanan kembali. Dalam kondisi ini, mengeluarkan permintaan PUT, POST dan DELETE langsung terhadap sumber daya substantif selalu membuat saya sedikit brutal dan naif.
HTTP tidak melakukan apa pun untuk memastikan penyelesaian permintaan-respons yang andal, dan itu baik-baik saja karena ini adalah pekerjaan yang benar dari aplikasi yang sadar jaringan. Mengembangkan aplikasi seperti itu, Anda dapat melompat melalui lingkaran untuk menggunakan PUT daripada POST, kemudian lebih banyak lingkaran untuk memberikan jenis kesalahan tertentu pada server jika Anda mendeteksi permintaan duplikat. Kembali ke klien, Anda kemudian harus melewati rintangan untuk menafsirkan kesalahan ini, mengambil ulang, memvalidasi ulang dan memposting ulang.
Atau Anda dapat melakukan ini : anggap permintaan Anda yang tidak aman sebagai sumber daya pengguna tunggal sesaat (sebut saja tindakan). Klien meminta "tindakan" baru pada sumber daya substantif dengan POST kosong ke sumber daya. POST hanya akan digunakan untuk ini. Setelah dengan aman memiliki URI dari tindakan yang baru dicetak, klien PUT permintaan yang tidak aman untuk tindakan URI, bukan sumber daya target . Menyelesaikan tindakan dan memperbarui sumber daya "nyata" adalah pekerjaan API Anda dengan benar, dan di sini dipisahkan dari jaringan yang tidak dapat diandalkan.
Server melakukan bisnis, mengembalikan respons dan menyimpannya terhadap tindakan yang disepakati URI . Jika ada yang tidak beres, klien mengulangi permintaan (perilaku alami!), Dan jika server sudah melihatnya, ia mengulangi respons yang tersimpan dan tidak melakukan hal lain .
Anda akan segera menemukan kesamaan dengan janji: kami membuat dan mengembalikan placeholder untuk hasil sebelum melakukan apa pun. Juga seperti janji, suatu tindakan dapat berhasil atau gagal satu kali, tetapi hasilnya dapat diambil berulang kali.
Yang terbaik dari semuanya, kami memberikan aplikasi pengiriman dan penerimaan kesempatan untuk menghubungkan tindakan yang diidentifikasi secara unik dengan keunikan di lingkungan masing-masing. Dan kita dapat mulai menuntut, dan menegakkan !, perilaku yang bertanggung jawab dari klien: ulangi permintaan Anda sebanyak yang Anda suka, tetapi jangan menghasilkan tindakan baru sampai Anda memiliki hasil yang pasti dari yang sudah ada.
Dengan demikian, banyak masalah pelik hilang. Permintaan memasukkan berulang tidak akan membuat duplikat, dan kami tidak membuat sumber daya yang sebenarnya sampai kami memiliki data. (kolom basis data dapat tetap tidak dapat dibatalkan). Permintaan pembaruan berulang tidak akan mengenai kondisi yang tidak kompatibel dan tidak akan menimpa perubahan berikutnya. Klien dapat (mengambil kembali) dan memproses dengan mulus konfirmasi asli untuk alasan apa pun (klien macet, respons hilang, dll.).
Permintaan penghapusan yang berurutan dapat melihat dan memproses konfirmasi asli, tanpa menemukan kesalahan 404. Jika hal-hal memakan waktu lebih lama dari yang diharapkan, kami dapat merespons sementara, dan kami memiliki tempat di mana klien dapat memeriksa kembali untuk hasil yang pasti. Bagian terbaik dari pola ini adalah properti Kung-Fu (Panda). Kami mengambil kelemahan, kecenderungan bagi klien untuk mengulangi permintaan kapan saja mereka tidak memahami responsnya, dan mengubahnya menjadi kekuatan :-)
Sebelum memberi tahu saya ini bukan RESTful, harap pertimbangkan banyak cara di mana prinsip REST dihormati. Klien tidak membuat URL. API tetap dapat ditemukan, meskipun dengan sedikit perubahan dalam semantik. Kata kerja HTTP digunakan dengan tepat. Jika Anda pikir ini adalah perubahan besar untuk diterapkan, saya dapat memberi tahu Anda dari pengalaman bahwa itu bukan.
Jika Anda berpikir Anda akan memiliki banyak data untuk disimpan, mari kita bicara volume: konfirmasi pembaruan khas adalah sebagian kecil dari satu kilobyte. HTTP saat ini memberi Anda satu atau dua menit untuk merespons secara definitif. Bahkan jika Anda hanya menyimpan aksi selama seminggu, klien memiliki banyak kesempatan untuk mengejar ketinggalan. Jika Anda memiliki volume yang sangat tinggi, Anda mungkin menginginkan penyimpanan nilai kunci yang sesuai dengan asam, atau solusi dalam memori.