春HATEOASでないリソースはのDTOを交換しますか?

hakson:

私は春のREST APIをbuldingています。だから今まで、私は唯一のサービス(GET)を読んでいます。このために私は、子要素を参照することをリンクを追加する春HATEOASを使用しました。

今、私はいくつかの書き込みREST-サービスを追加したいです。通常のDTOは、REST-サービスで使用されており、それらは、その後、ドメインモデルにマッピングされます。

だから、私の質問は:私たちは以下の例のように春HATEOASからリソースを使用してのDTOなしで行うことができますか?それとも何か他のリソースを対象としており、私はまだのDTOを必要としていますか?

@PostMapping
public ResponseEntity<String> saveProduct(@RequestBody ProductResource product) {
  ...
}
cassiomolin:

私は春HATEOASはのDTOを置き換えるものではありませんと言うでしょう:それはのDTOの上に構築されています。あなたが作ることができますので、あなたのDTOクラスが拡張しResourceSupportたりして、それを包みますResource<T>

春HATEOAS 1.0.0以来、2019年9月下旬に発売され、ResourceSupportそしてResource<T>名前に変更されているRepresentationModelEntityModel<T>、それぞれ。引用文書を

表現モデル

ResourceSupport/ Resource/ Resources/ PagedResourcesクラスのグループは本当に適切な名前を感じたことはありません。結局のところ、これらのタイプは、実際にはマニフェストではない資源ではなく、ハイパーメディア情報とアフォーダンスを濃縮することができる表現モデルを行います。ここでは、新しい名前が古いものにマッピングする方法は次のとおりです。

  • ResourceSupport 今でしょ RepresentationModel
  • Resource 今でしょ EntityModel
  • Resources 今でしょ CollectionModel
  • PagedResources 今でしょ PagedModel

重要である何、しかし、APIモデルから切り離されたドメインモデルを維持することです。

表すモデルドメインのアプリケーションのをと表すモデルあなたのAPIで扱うデータがある(または少なくともする必要があります)異なる懸念あなたが追加したとき、あなたのAPIクライアントを破るアプリケーションドメインモデルからフィールドを削除したり、名前を変更する必要はありません。

あなたのサービス層は、ドメイン/永続化モデル上で動作している間、あなたのAPIコントローラはモデルの異なるセットで動作する必要があります。ドメイン/永続化モデルは、新しいビジネス要件をサポートするように進化しているので、例えば、あなたはこれらの変更をサポートするためのAPIモデルの新しいバージョンを作成することもできます。また、新しいバージョンがリリースされているとして、あなたのAPIの古いバージョンを廃止することをお勧めします。そして、それは物事が切り離されたときに達成するために完全に可能です。

APIモデル(およびその逆)にドメインモデルを変換する定型的なコードを最小限に抑えるには、次のようなフレームワークに依存している可能性がありMapStructそして、あなたはまた、使用して検討することもできロンボクをゲッター、セッター、生成することequals()hashcode()そしてtoString()あなたのための方法を。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=235216&siteId=1