REST API'nizde neden DTO'lar kullanmalısınız?
DTO , D ata T ransfer O bject anlamına gelir .
Bu model çok iyi tanımlanmış bir amaç için oluşturulmuştur: tıpkı web hizmetleri gibi verileri uzak arabirimlere aktarın . Bu model bir REST API'sine çok iyi uyuyor ve DTO'lar uzun vadede size daha fazla esneklik sağlayacak .
Temsil modelleri domain temsil Başvurunuzun ve modelleri API'nızdan tarafından ele verileri (veya en azından olmalıdır) farklı kaygılar ve gerektiği ayrılmış birbirinden. Uygulama etki alanı modeline bir alan eklediğinizde, kaldırdığınızda veya yeniden adlandırdığınızda API istemcilerinizi kırmak istemezsiniz.
Hizmet katmanınız etki alanı / kalıcılık modelleri üzerinde çalışırken, API denetleyicileriniz farklı modellerde çalışmalıdır. Alan adı / kalıcılık modelleriniz yeni işletme gereksinimlerini desteklemek için geliştikçe, bu değişiklikleri desteklemek için API modellerinin yeni sürümlerini oluşturmak isteyebilirsiniz. Ayrıca, yeni sürümler yayınlandıkça API'nızın eski sürümlerini kullanımdan kaldırmak isteyebilirsiniz. Ve işler ayrıştırıldığında başarmak mükemmel bir şekilde mümkündür.
Kalıcılık modelleri yerine DTO'ları ortaya çıkarmanın birkaç faydasından bahsetmek gerekirse:
Kalıcılık modellerini API modellerinden ayırın .
DTO'lar ihtiyaçlarınıza göre uyarlanabilir ve kalıcılık varlıklarınızın yalnızca bir dizi niteliğini ortaya koyarken harikadır. Bazı özelliklerin serileştirilmesini önlemek için @XmlTransient
ve gibi ek açıklamalara ihtiyacınız yoktur @JsonIgnore
.
DTO'ları kullanarak, kalıcılık varlıklarınızdaki cehennem ek açıklamalarından kaçınacaksınız , yani kalıcılık varlıklarınız kalıcılık ile ilgili olmayan ek açıklamalarla şişirilmez.
Sen sahip olacak tam kontrol oluşturma veya kaynak güncellerken aldığınız nitelikleri üzerinde.
Swagger kullanıyorsanız , kalıcılık varlıklarınızı bozmadan API modellerinizi belgelemek için @ApiModel
ve @ApiModelProperty
ek açıklamaları kullanabilirsiniz .
API'nizin her sürümü için farklı DTO'larınız olabilir.
İlişkileri eşlerken daha fazla esnekliğe sahip olacaksınız.
Farklı ortam türleri için farklı DTO'larınız olabilir.
DTO'larınız HATEOAS için bir bağlantı listesine sahip olabilir . Bu, kalıcılık nesnelerine eklenmemesi gereken bir şey. Spring HATEOAS kullanırken , DTO sınıflarınızı genişletebilir RepresentationModel
(eski adıyla bilinir ResourceSupport
) veya bunları EntityModel
(daha önce bilinen adıyla ) sarabilirsiniz Resource<T>
.
Isıtıcı kod ile başa çıkmak
Kalıcı varlıklarınızı DTO'larla eşlemenize gerek yoktur veya tam tersi de mannely . Bunu yapmak için kullanabileceğiniz birçok harita çerçevesi vardır . Örneğin , ek açıklama tabanlı ve Maven Ek Açıklama İşlemcisi olarak çalışan MapStruct'a bir göz atın . Hem CDI hem de Spring tabanlı uygulamalarda iyi çalışır.
Ayrıca düşünebilirsiniz Lombok getters, ayarlayıcılar, üretmek için equals()
, hashcode()
ve toString()
sizin için yöntemler.
İlgili: DTO sınıflarınıza daha iyi adlar vermek için bu cevaba bakın .