REST API を作成する場合、データ転送オブジェクト (DTO) を使用するかどうかの問題が生じます。ドメイン モデルを直接公開することを主張する人もいますが、DTO を好む人もいます。 DTO が REST API コンテキストでより有益である理由を詳しく見てみましょう。
アプリケーションのドメイン モデルは、コア ビジネス ロジックとエンティティを表します。一方、API モデルは、クライアントへのデータ転送を目的として設計する必要があります。 DTO を使用してこれらの懸念事項を分離することで、ドメイン モデルへの変更が API に影響を与えるのを防ぎます。これにより、API コンシューマーの安定性が確保されます。
DTO により、API の特定のニーズに合わせたカスタマイズが可能になります。 API クライアントは、ドメイン モデルで公開されている属性のサブセットのみを必要とする場合があります。 DTO は、必要なデータのみを公開し、帯域幅の使用量を削減し、パフォーマンスを向上させるように設計できます。
ドメイン モデルを直接公開するには、特定のデータを除外するために @XmlTransient や @JsonIgnore などのアノテーションを使用する必要があります。シリアル化からの属性。 DTO は、データ転送用に別個のモデルを定義することでこの必要性を排除し、永続エンティティに永続関連以外のアノテーションを付けないようにします。
DTO は、受信したデータを完全に制御します。 API によって処理されます。これにより、API との間でデータをやり取りする前に、データの検証、変換、フィルタリングが可能になります。これは、データの整合性とセキュリティを維持するために特に重要です。
DTO を使用すると、@ApiModel と @ApiModelProperty を使用して API モデルに注釈を付けることができ、Swagger を使用した包括的なドキュメントが可能になります。これにより、開発者の理解が深まり、API の利用が容易になります。
API バージョンごとに異なる DTO を使用すると、下位互換性とスムーズなバージョン アップグレードが可能になります。これは、異なるバージョンを使用する複数の API コンシューマーをサポートするために不可欠です。
MapStruct などのマッピング フレームワークを使用すると、ドメイン モデルと DTO の間のマッピング プロセスを自動化し、定型コードを削減し、一貫性を確保できます。 .
DTO は、HateOAS リンクを簡単に統合できます。 API ナビゲーションとリソース検出が改善されました。 Spring HATEOAS は、この目的のために RepresentationModel や EntityModel などのクラスを提供します。
結論として、DTO の使用にはある程度のオーバーヘッドが伴いますが、利点は欠点をはるかに上回ります。 DTO は、API モデルからドメイン モデルを分離し、カスタマイズされたデータ セットを提供し、煩わしい注釈を回避し、API ドキュメントとバージョン管理を強化することにより、開発者が柔軟で保守可能な REST API を作成できるようにします。
以上がREST API はデータの分離と柔軟性のために DTO を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。