Saya sedang membaca dokumentasi Spring Cloud Netflix ketika saya menemukan cara untuk berbagi antarmuka antara server HTTP dan kliennya. Mereka menggunakan contoh ini untuk layanan microser, meskipun tidak ada alasan mengapa itu tidak dapat meluas ke komunikasi HTTP umum:
// The shared interface, in a common library
public interface UserService {
@RequestMapping(method = GET, value = "/users/{id}")
User getUser(@PathVariable long id);
}
// The controller, on the server
@RestController
public class UserResource implements UserService {
}
// The same interface used for the client
@FeignClient("users")
public interface UserClient extends UserService {
}
Ini mendefinisikan antarmuka yang digunakan sebagai server (Pegas @RestController
mengubahnya menjadi server HTTP) dan klien (Feign @FeignClient
mengaturnya untuk penggunaan klien HTTP). Implementasi server dan kelas klien dapat digunakan dalam proyek terpisah tetapi masih menggunakan antarmuka yang sama untuk memastikan bahwa jenisnya cocok.
Namun, di bawah contoh mereka menempatkan peringatan berikut:
Catatan: Pada umumnya tidak disarankan untuk berbagi antarmuka antara server dan klien. Ini memperkenalkan kopling ketat, dan juga sebenarnya tidak berfungsi dengan Spring MVC dalam bentuk saat ini (pemetaan parameter metode tidak diwariskan).
OK, jadi tidak terintegrasi dengan baik sekarang ... tetapi bagian itu muncul setelah peringatan terhadap kode berbagi dan memperkenalkan sambungan antara server dan klien, yang menurut mereka lebih penting. Mengapa menurut mereka itu ide yang buruk untuk berbagi antarmuka dengan cara ini?
Tanpa itu, Anda kehilangan kemampuan untuk menjamin bahwa server dan klien saling mengirim data yang mereka berdua bisa mengerti. Anda bisa menambahkan bidang ke satu tetapi tidak yang lain dan hanya menemukan ketidakcocokan sampai runtime. Menurut saya, ini bukan memperkenalkan kopling, tetapi hanya mengungkapkan kopling yang sudah ada. Apakah kebutuhan untuk membuat server benar-benar independen lebih besar daripada kebutuhan untuk memberi tahu mereka jenis data apa yang akan mereka terima?