私は春のREST APIをbuldingています。だから今まで、私は唯一のサービス(GET)を読んでいます。このために私は、子要素を参照することをリンクを追加する春HATEOASを使用しました。
今、私はいくつかの書き込みREST-サービスを追加したいです。通常のDTOは、REST-サービスで使用されており、それらは、その後、ドメインモデルにマッピングされます。
だから、私の質問は:私たちは以下の例のように春HATEOASからリソースを使用してのDTOなしで行うことができますか?それとも何か他のリソースを対象としており、私はまだのDTOを必要としていますか?
@PostMapping
public ResponseEntity<String> saveProduct(@RequestBody ProductResource product) {
...
}
私は春HATEOASはのDTOを置き換えるものではありませんと言うでしょう:それはのDTOの上に構築されています。あなたが作ることができますので、あなたのDTOクラスが拡張しResourceSupport
たりして、それを包みますResource<T>
。
春HATEOAS 1.0.0以来、2019年9月下旬に発売され、ResourceSupport
そしてResource<T>
名前に変更されているRepresentationModel
とEntityModel<T>
、それぞれ。引用文書を:
表現モデル
ResourceSupport
/Resource
/Resources
/PagedResources
クラスのグループは本当に適切な名前を感じたことはありません。結局のところ、これらのタイプは、実際にはマニフェストではない資源ではなく、ハイパーメディア情報とアフォーダンスを濃縮することができる表現モデルを行います。ここでは、新しい名前が古いものにマッピングする方法は次のとおりです。
ResourceSupport
今でしょRepresentationModel
Resource
今でしょEntityModel
Resources
今でしょCollectionModel
PagedResources
今でしょPagedModel
重要である何、しかし、APIモデルから切り離されたドメインモデルを維持することです。
表すモデルドメインのアプリケーションのをと表すモデルあなたのAPIで扱うデータがある(または少なくともする必要があります)異なる懸念。あなたが追加したとき、あなたのAPIクライアントを破るアプリケーションドメインモデルからフィールドを削除したり、名前を変更する必要はありません。
あなたのサービス層は、ドメイン/永続化モデル上で動作している間、あなたのAPIコントローラはモデルの異なるセットで動作する必要があります。ドメイン/永続化モデルは、新しいビジネス要件をサポートするように進化しているので、例えば、あなたはこれらの変更をサポートするためのAPIモデルの新しいバージョンを作成することもできます。また、新しいバージョンがリリースされているとして、あなたのAPIの古いバージョンを廃止することをお勧めします。そして、それは物事が切り離されたときに達成するために完全に可能です。
APIモデル(およびその逆)にドメインモデルを変換する定型的なコードを最小限に抑えるには、次のようなフレームワークに依存している可能性がありMapStruct。そして、あなたはまた、使用して検討することもできロンボクをゲッター、セッター、生成することequals()
、hashcode()
そしてtoString()
あなたのための方法を。