Saya sedang membangun REST API untuk mengekspos sebagian besar fungsionalitas Java API yang ada. Kedua API untuk penggunaan internal dalam organisasi saya; Saya tidak harus mendesain untuk penggunaan eksternal. Saya memiliki pengaruh atas kedua API tetapi menerapkan yang REST. Java API akan terus digunakan untuk aplikasi lokal (tidak sedang "dihentikan"), tetapi REST API akan digunakan untuk pengembangan baru yang signifikan.
Beberapa kelas Java API hanyalah data (biji dengan properti, getter, setter). Dan setidaknya beberapa dari ini masuk akal untuk mengirimkan (dalam beberapa bentuk) melalui REST API sebagai data (yang akan disusun ke XML atau JSON). Misalnya, kelas yang menyimpan info tentang mesin server. Saya dihadapkan dengan pilihan berikut untuk kelas data ini: Apakah saya ...
- mengekspos kelas Java asli (atau subkelas) langsung di API REST, atau
- membuat kelas transfer data baru (pola DTO) khusus untuk REST API?
Either way saya akan memiliki kelas transfer data REST; pertanyaannya adalah apakah akan membuat anotasi dokumen asli atau membuat yang baru (yang mungkin dekat dengan aslinya). Mungkin ada pilihan lain, tetapi saya akan fokus terutama pada keduanya.
Argumen untuk # 1:
- KERING (jangan ulangi diri Anda sendiri)
- Lebih cepat diimplementasikan
- Lebih mudah untuk meningkatkan API REST
Argumen untuk # 2:
- Bagaimana jika REST API perlu diversi secara terpisah dari Java API? (Ini agak mungkin.)
- Bagaimana jika ada perubahan signifikan pada kelas data Java seperti penghapusan properti, penambahan perilaku, atau perubahan hierarki kelas? (Ini juga agak mungkin.)
Intinya adalah bahwa tampaknya seperti tradeoff antara KERING (# 1) dan decoupling (# 2).
Saya condong ke arah mulai dengan # 1 dan kemudian jika muncul masalah pindah ke # 2 nanti, mengikuti pedoman lincah tidak membangun apa yang Anda tidak dapat membuktikan Anda butuhkan. Apakah ini ide yang buruk; haruskah saya mulai dengan # 2 jika saya pikir saya akan berakhir di sana?
Apakah ada argumen / konsekuensi utama yang hilang dari daftar saya?