Pertama-tama, mentransfer uang adalah hal yang tidak dapat Anda lakukan dalam satu panggilan sumber daya. Tindakan yang ingin Anda lakukan adalah mengirim uang. Jadi, Anda menambahkan sumber daya pengiriman uang ke akun pengirim.
POST: accounts/alice, new Transfer {target:"BOB", abmount:100, currency:"CHF"}.
Selesai Anda tidak perlu tahu bahwa ini adalah transaksi yang harus atom dll. Anda hanya mentransfer uang alias. kirim uang dari A ke B.
Tetapi untuk kasus yang jarang terjadi di sini solusi umum:
Jika Anda ingin melakukan sesuatu yang sangat kompleks yang melibatkan banyak sumber daya dalam konteks yang ditentukan dengan banyak batasan yang benar-benar melintasi penghalang apa vs. mengapa (pengetahuan bisnis vs implementasi), Anda perlu mentransfer status. Karena REST seharusnya tidak memiliki kewarganegaraan, Anda sebagai klien harus mentransfer keadaan sekitar.
Jika Anda mentransfer status Anda perlu menyembunyikan informasi di dalam dari klien. Klien seharusnya tidak mengetahui informasi internal yang hanya dibutuhkan oleh implementasi tetapi tidak membawa informasi yang relevan dalam hal bisnis. Jika informasi itu tidak memiliki nilai bisnis, negara harus dienkripsi dan metafora seperti token, pass atau sesuatu perlu digunakan.
Dengan cara ini seseorang dapat melewati keadaan internal sekitar dan menggunakan enkripsi dan menandatangani sistem masih aman dan sehat. Menemukan abstraksi yang tepat untuk klien mengapa ia memberikan informasi negara adalah sesuatu yang sesuai dengan desain dan arsitektur.
Solusi nyata:
Ingat REST sedang berbicara HTTP dan HTTP hadir dengan konsep menggunakan cookies. Cookie itu sering dilupakan ketika orang berbicara tentang REST API dan alur kerja serta interaksi yang mencakup banyak sumber daya atau permintaan.
Ingat apa yang tertulis di Wikipedia tentang cookie HTTP:
Cookie dirancang untuk menjadi mekanisme yang andal bagi situs web untuk mengingat informasi stateful (seperti item dalam keranjang belanja) atau untuk merekam aktivitas penelusuran pengguna (termasuk mengklik tombol tertentu, masuk, atau merekam halaman mana yang dikunjungi oleh pengguna sejauh ini. kembali sebagai bulan atau tahun yang lalu).
Jadi pada dasarnya jika Anda perlu menyampaikan status, gunakan cookie. Ini dirancang untuk alasan yang persis sama, ini adalah HTTP dan karena itu kompatibel dengan REST by design :).
Solusi yang lebih baik:
Jika Anda berbicara tentang klien yang melakukan alur kerja yang melibatkan beberapa permintaan, Anda biasanya berbicara tentang protokol. Setiap bentuk protokol dilengkapi dengan serangkaian prasyarat untuk setiap langkah potensial seperti melakukan langkah A sebelum Anda dapat melakukan B.
Ini adalah protokol yang alami tetapi mengekspos kepada klien membuat segalanya lebih kompleks. Untuk menghindarinya, pikirkan saja apa yang kita lakukan ketika kita harus melakukan interaksi yang kompleks dan hal-hal di dunia nyata .... Kami menggunakan Agen.
Menggunakan metafora Agen, Anda dapat memberikan sumber daya yang dapat melakukan semua langkah yang diperlukan untuk Anda dan menyimpan tugas / instruksi aktual yang ditindaklanjuti dalam daftar (sehingga kami dapat menggunakan POST pada agen atau 'agen').
Contoh kompleks:
Membeli rumah:
Anda perlu membuktikan kredibilitas Anda (seperti memberikan catatan catatan polisi Anda), Anda perlu memastikan perincian keuangan, Anda perlu membeli rumah yang sebenarnya menggunakan pengacara dan pihak ketiga yang dipercaya menyimpan dana, memverifikasi bahwa rumah itu sekarang milik Anda dan tambahkan barang yang dibeli ke catatan pajak Anda dll. (seperti contohnya, beberapa langkah mungkin salah atau apa pun).
Langkah-langkah ini mungkin memakan waktu beberapa hari untuk diselesaikan, beberapa dapat dilakukan secara paralel dll.
Untuk melakukan ini, Anda hanya memberi agen rumah tugas beli seperti:
POST: agency.com/ { task: "buy house", target:"link:toHouse", credibilities:"IamMe"}.
Selesai Agensi mengirimkan kembali referensi kepada Anda yang dapat Anda gunakan untuk melihat dan melacak status pekerjaan ini dan sisanya dilakukan secara otomatis oleh agen agensi.
Pikirkan tentang pelacak bug misalnya. Pada dasarnya Anda melaporkan bug dan dapat menggunakan id bug untuk memeriksa apa yang terjadi. Anda bahkan dapat menggunakan layanan untuk mendengarkan perubahan sumber daya ini. Misi Selesai.