Ada beberapa jawaban bagus di sini, tetapi saya tidak yakin mereka akan membantu Anda meyakinkan rekan kerja Anda. Seperti yang telah ditunjukkan oleh banyak orang, apa yang Anda sarankan bukanlah bergeser dari desain RESTful, dan saya pikir itu adalah kunci untuk membuatnya sesuai dengan proposal Anda.
REST bukan tentang memastikan API Anda hanya memungkinkan menyimpan dan mengambil data. Sebaliknya, ini berkaitan dengan tindakan pemodelan sebagai sumber daya. API Anda harus mengaktifkan tindakan yang harus diambil (bagaimanapun, ini adalah Antarmuka Pemrograman Aplikasi ). Pertanyaannya adalah bagaimana memodelkan tindakan tersebut.
Daripada menggunakan istilah, contoh mungkin adalah cara terbaik untuk menjelaskan hal ini kepada rekan kerja Anda . Dengan cara ini Anda dapat menunjukkan bagaimana mereka melakukannya sekarang, masalah apa yang menyebabkannya, solusi yang memecahkan masalah, dan bagaimana itu masih TETAP.
Mari kita lihat objek Pelanggan Anda.
Masalah:
UI POST Pelanggan, tetapi tabel selanjutnya belum diperbarui. Bagaimana jika salah satu dari panggilan berikutnya gagal karena kesalahan pada kode UI Anda (atau plugin browser yang tidak sesuai, dll)? Sekarang data Anda dalam keadaan tidak konsisten. Bahkan bisa berupa keadaan yang memecah bagian lain dari API atau UI Anda, belum lagi itu hanya tidak valid. Bagaimana Anda pulih? Anda harus menguji untuk setiap keadaan yang memungkinkan untuk memastikan ini tidak akan merusak sesuatu, tetapi akan sulit untuk mengetahui apa yang mungkin.
Larutan:
Buat titik akhir API untuk membuat pelanggan. Anda tahu Anda tidak ingin memiliki titik akhir "/ pelanggan / buat" atau bahkan "/ buat-pelanggan", karena buat adalah kata kerja dan akan melanggar REST. Jadi kata benda itu. "/ penciptaan pelanggan" bisa berhasil. Sekarang ketika Anda POST objek CustomerCreation Anda, itu akan mengirim semua bidang yang diperlukan untuk pelanggan dibuat sepenuhnya. Titik akhir akan memastikan bahwa data lengkap dan valid (mengembalikan 400 atau sesuatu jika gagal validasi), dan dapat bertahan semua dalam transaksi db tunggal, misalnya.
Jika Anda juga membutuhkan titik akhir untuk MENDAPATKAN / objek pelanggan, itu bagus. Anda dapat memiliki keduanya. Caranya adalah dengan menciptakan titik akhir yang melayani kebutuhan konsumen.
Keuntungan:
- Anda menjamin bahwa Anda tidak akan berakhir dengan keadaan buruk
- Ini sebenarnya lebih mudah di devs UI jika mereka tidak harus "tahu" memesan permintaan, masalah validasi, dll
- Itu tidak seperti mengobrol tentang API, mengurangi latensi permintaan jaringan
- Lebih mudah untuk menguji dan membuat konsep skenario (potongan data yang hilang / cacat dari UI tidak tersebar di seluruh permintaan, beberapa di antaranya mungkin gagal)
- Ini memungkinkan enkapsulasi logika bisnis yang lebih baik
- Secara umum membuat keamanan lebih mudah (karena logika bisnis dan orkestrasi di UI dapat dimodifikasi oleh pengguna)
- Kemungkinan akan mengurangi duplikasi logika (lebih besar kemungkinan Anda akan memiliki 2+ konsumen suatu API daripada 2+ API yang memberikan akses ke data yang sama)
- Masih 100% tenang
Kekurangan:
- Ini berpotensi lebih banyak pekerjaan untuk dev backend (tetapi mungkin tidak dalam jangka panjang)
Mungkin sulit bagi orang untuk memahami paradigma ini dan apa gunanya jika mereka belum mencobanya. Semoga Anda dapat membantu mereka melihat dengan menggunakan contoh dari kode Anda sendiri.
Pengalaman saya sendiri adalah begitu para devs di tim saya mulai menerapkan strategi ini, mereka segera melihat manfaatnya.
Pelajaran lanjutan:
Artikel ini dari pemikiran benar-benar membantu saya mendapatkan ide pemodelan tindakan sebagai objek menggunakan contoh-contoh praktis: https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling
Saya juga menyarankan membaca tentang CQRS dan Event Sourcing karena mereka berkaitan dengan hal-hal semacam ini (yaitu menceraikan API Anda dari logika kegigihan yang sebenarnya). Saya tidak tahu seberapa besar keinginan rekan kerja Anda untuk membaca hal semacam ini, tetapi hal itu dapat memberi Anda lebih banyak kejelasan dan membantu Anda menjelaskannya kepada mereka.