サービスを通じてドメイン エンティティを公開することについてどう思いますか? アプリケーションで試してみましたが、ドメイン モデルをクライアントに公開するのはあまり良い考えではないという結論に達しました。
利点:
- クライアントからクライアントへのデータ転送が非常に簡単
- リスト項目
- (デ)シリアライゼーションは非常に簡単です。クラスパスに jackson を入れるだけで処理されます。追加のロジックは必要ありません。
- エンティティ POJO を複製する必要はありません。少なくとも初期段階では、API リソースはドメイン モデルとほぼ同じになります。
短所:
- API はモデルに非常に密接に結合されており、API に影響を与えずにモデルを変更することはできません
- 部分的な応答。エンティティのすべてのフィールドを返すのではなく、一部だけを返したい場合があります。どうやってそれを達成しますか?
それでは、次の REST の例を見てみましょう。次の API は、ユーザー リソースに対する GET が次の情報を返すことを宣言します。GET /ユーザー/12
{
"firstName":"John",
"lastName":"Poe"
"address":"my street"
}
通常、ユーザー エンティティ、ユーザーを返すユーザー サービス、およびリクエストを処理する REST コントローラーを次のように作成します。
@RequestMapping("/users/{id}")
public @ResponseBody User getUser(@PathVariable Long id) {
return userService.findById(id);
}
User エンティティを返さないようにする必要がありますか? はいの場合、別のクラスを作成して、このクラスとエンティティ間のマッピングを自分で処理する必要がありますか? これにはパターンがありますか?部分展開を行うには?(つまり、ユーザーの firstName と lastName のみを返します)
PS: @JSONFilter と ObjectMapper を使用してパーシャル レスポンスを達成すると、春のデータの美しさが失われるため、私には重すぎるように思えます。