Mengapa Anda harus menggunakan DTO di REST API Anda
DTO adalah singkatan dari D ata T ransfer O bject .
Pola ini dibuat dengan tujuan yang sangat jelas: mentransfer data ke antarmuka jarak jauh , seperti halnya layanan web . Pola ini sangat cocok di API REST dan DTO akan memberi Anda lebih banyak fleksibilitas dalam jangka panjang.
Model-model yang mewakili domain aplikasi Anda dan model-model yang mewakili data yang ditangani oleh API Anda adalah (atau setidaknya seharusnya) keprihatinan yang berbeda dan harus dipisahkan satu sama lain. Anda tidak ingin memecah klien API Anda ketika Anda menambah, menghapus, atau mengganti nama bidang dari model domain aplikasi.
Sementara lapisan layanan Anda beroperasi di atas model domain / kegigihan, pengontrol API Anda harus beroperasi di atas serangkaian model yang berbeda. Sebagai model domain / ketekunan Anda berkembang untuk mendukung persyaratan bisnis baru, misalnya, Anda mungkin ingin membuat versi baru dari model API untuk mendukung perubahan ini. Anda juga mungkin ingin mencela API versi lama saat versi baru dirilis. Dan sangat mungkin untuk mencapai ketika hal-hal dipisahkan.
Untuk menyebutkan beberapa manfaat dari mengekspos DTO daripada model ketekunan:
Pisahkan model-model persistensi dari model-model API.
DTO dapat disesuaikan dengan kebutuhan Anda dan sangat bagus ketika mengekspos hanya seperangkat atribut entitas kegigihan Anda. Anda tidak akan memerlukan anotasi seperti @XmlTransientdan @JsonIgnoreuntuk menghindari serialisasi beberapa atribut.
Dengan menggunakan DTO, Anda akan menghindari banyak anotasi dalam entitas kegigihan Anda, yaitu, entitas kegigihan Anda tidak akan membengkak dengan anotasi yang tidak terkait dengan kegigihan.
Anda akan memiliki kontrol penuh atas atribut yang Anda terima saat membuat atau memperbarui sumber daya.
Jika Anda menggunakan Swagger , Anda dapat menggunakan @ApiModeldan @ApiModelPropertyanotasi untuk mendokumentasikan model API Anda tanpa mengacaukan entitas kegigihan Anda.
Anda dapat memiliki DTO berbeda untuk setiap versi API Anda.
Anda akan memiliki lebih banyak fleksibilitas saat memetakan hubungan.
Anda dapat memiliki DTO berbeda untuk berbagai jenis media.
DTO Anda dapat memiliki daftar tautan untuk HATEOAS . Itu adalah hal yang tidak seharusnya ditambahkan ke objek kegigihan. Saat menggunakan Spring HATEOAS , Anda dapat membuat kelas DTO Anda diperluas RepresentationModel(sebelumnya dikenal sebagai ResourceSupport) atau membungkusnya dengan EntityModel(sebelumnya dikenal sebagai Resource<T>).
Berurusan dengan kode boilerplate
Anda tidak perlu memetakan entitas kegigihan Anda ke DTO dan sebaliknya secara manual . Ada banyak kerangka pemetaan yang bisa Anda gunakan untuk melakukannya. Misalnya, lihat MapStruct , yang berbasis pada anotasi dan berfungsi sebagai Maven Annotation Processor. Ini berfungsi baik di aplikasi berbasis CDI dan Spring.
Anda juga mungkin ingin mempertimbangkan Lombok untuk menghasilkan getter, setter equals(), hashcode()dan toString()metode untuk Anda.
Terkait: Untuk memberikan nama yang lebih baik ke kelas DTO Anda, lihat jawaban ini .