Saya mencoba untuk mengonversi seperangkat layanan berbasis SOAP ke API yang tenang.
Saya mulai dengan mengidentifikasi sumber daya dengan menganalisis nama operasi dan saya mendapatkan sumber dayanya Subscription
.
Ketika saya perlu memperbarui status langganan, saya tidak bisa begitu saja mengirim POST
permintaan ke server, karena saya tidak memiliki akses langsung ke sumber daya, tetapi saya perlu menelepon beberapa operasi bergaya RPC untuk memperbarui propertinya. Selain itu, hanya dan hanya jika saya mengubah status langganan menjadi "aktif", diperlukan panggilan tambahan ke layanan eksternal.
Dalam kasus ini, apa praktik terbaik untuk menangani operasi yang mendasarinya?
Solusi yang saya buat adalah dengan menggunakan parameter kueri, sehingga jika saya perlu memanggil layanan aktivasi, saya dapat menggunakan sesuatu seperti:
POST /subscriptions/{subscriptionid}/?activate=true
Mengingat saya tidak dapat secara langsung memperbarui bidang objek Langganan saya, apakah ada praktik terbaik untuk menangani konversi semacam ini?
Pembaruan 1:
Saya dapat memasukkan beberapa nilai permintaan POST saya, misalnya "status": "aktif"
dan periksa di dalam layanan saya operasi yang tepat untuk dipicu.
sumber
Jawaban:
Anda perlu menonton ceramah ini oleh Jim Webber.
Pikirkan "perpesanan"; mengirim pesan ke domain Anda, menjelaskan apa yang Anda inginkan terjadi. Efek samping dari pesan adalah bahwa model domain Anda benar-benar mengubah kondisinya. "Sumber daya" adalah antrian pesan.
Ejaan nama sumber tidak penting bagi mesin; tetapi orang-orang cenderung rewel ketika pengidentifikasi yang Anda gunakan berhenti dari konvensi bahwa sumber daya adalah "kata benda".
Juga, kita berbicara tentang sumber daya yang berada di bawahnya
/subscriptions/{subscriptionid}
, jadi konvensi (lihat RFC 3986 ) menyerukan untuk mengekspresikan hubungan itu dengan segmen jalur, daripada menggunakan bagian permintaan.Jadi ejaan ini mungkin masuk akal
sumber
Jika ini adalah boolean flag untuk mengaktifkan / menonaktifkan hal-hal, saya akan mengatakan defaultnya adalah menggunakan JSON:
Ini mudah diperpanjang jika Anda ingin mendukung lebih banyak properti. Pendekatan lain adalah memberikan titik akhir sendiri:
Secara pribadi, saya hanya akan menggunakan ini jika
active
keadaan acara ini membutuhkan / memiliki properti yang kemudian dapat Anda lewati / dapatkan di JSON, seperti ID pengguna atau pengaturan.Jika ini bukan nilai boolean tetapi hanya tindakan yang Anda perlu memicu tetapi tidak perlu / memiliki umpan balik status untuk (kecuali 200 OK segera), saya akan menggunakan titik akhir seperti ini untuk memicu seperti RPC:
Jika ragu, baca ini: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful (lihat "Bagaimana dengan tindakan yang tidak sesuai dengan dunia operasi CRUD? ")
sumber
REST tidak berfungsi.
Activate
adalah kata kerja dan tidak bisa menjadi negara,Active
adalah negara.Karena RESTful tidak berfungsi, Anda tidak dapat memberi tahu layanan RESTful apa yang harus dilakukan, tetapi Anda dapat menambahkan pekerjaan untuk antrian layanan.
Lihat ini:
Permintaan ini tenang dan mendukung semua manfaat tenang (seperti kinerja, asam ...)
sumber