web-dev-qa-db-ja.com

Java Spring for Beginner)を使用したRESTfulサービスの構造

Java Web開発スキルの点で比較的新しいです。APIについてほとんど理解していないことから、RESTfulサービスの良い候補になると思うプロジェクトがあります。私はこれがどのように構造化されることになっているのか詳細に行きますが、グーグル検索と私が既に持っている資料の観点から実際にはどこにも行きません。この投稿が私の観点からいくつかの検証および/またはリダイレクトをもたらすことを望んでいますこのトピックに関する知識と仮定。

私の現在の想定では、RESTfulサービスは次のような構造になっています。

  • データベースデータ(SQL)。
  • ORM(私はCPOと呼ばれる比較的人気のないORMを使用していますが、これはほとんどの人でHibernateに置き換えられます)。
  • A Java ORMと通信してデータを取得するメソッドを持つマネージャークラス
  • A Javaリクエストマッピングを処理し、@ResponseBodyを使用してURLおよびHTTP動詞を介してデータを処理する方法のアクションを指示/処理するコントローラークラス/クラス( http: //mysite.com/computers/Dell は、URLに「Dell」という単語を含むGETリクエストであり、Dellコンピューターに関する情報のJSON配列を返すパラメーターであるパラメーターです。
  • このサービスは、Spring Bootで作成する必要があります。または、何らかの方法でスタンドアロンで他のアプリケーションから独立させることができます。

上記が正しいと仮定すると、(非常に基本的なレベルで)データを消費および使用するために任意のアプリケーションが使用できるRESTfulサービスがあります。

だから私は私のウェブアプリケーションを持っていると言います。コンピューターのハードウェア情報に関するWebアプリを作成していて、Springを使用してこのWebアプリを作成しているとします。ここに私の仮定があります:

  • 私は、JSPとしてHTML、CSS、JavaScriptのインクルードを備えた一連のビューを用意します。 JavaScriptは、AJAXこのアプリケーションのコントローラーへの呼び出しを必要に応じて(以下)処理します。
  • このWebアプリには、アプリのURLリクエストとルーティングを処理するための独自のコントローラーもあり、コントローラーは、たとえばModelAndViewオブジェクトなどを使用して、RESTfulサービスのコントローラーと「通信」します。渡されているデータを取得し、そのデータをビュー(JavaScript、JSPなど)に戻して表示します。

私は正しい道を進んでいますか? RESTfulサービスには認証の側面もあると理解していますが、概念的にはまだありません(このプロジェクトはプライベートネットワークで使用されるため、現時点ではセキュリティは優先されません)。

洞察、批評、知識、フィードバック、説明は大歓迎です。

12
aCarella

これが、スプリングレストアプリの構造の私のお気に入りのキックオフ例の1つです。

1.レイヤーの分離、各レイヤーは個別のモジュール/プロジェクト

  • REST API
    • warとしてパッケージ化されています(組み込みサーバーでspring bootを使用している場合はjarの可能性があります。Springboot docは、いわゆる呼び出しをデプロイする方法を明確に説明していますber jar。非常にシンプルです。)
    • リクエスト/レスポンスを処理する残りのコントローラーがあります
    • 依存するService以下のモジュール
  • サービス
    • jarとしてパッケージ化
    • ビジネスロジックの抽象化であるこのレイヤーには、データソースと通信する方法がありません。
    • 残りのコントローラーではautowiredになります
    • 依存DAO /リポジトリ以下のモジュール
  • DAO /リポジトリ
    • jarとしてパッケージ化
    • データソースと直接対話し、一般にCRUDと呼ばれる操作があります。単純なjdbc、JPA、またはファイルアクセスの場合もあります。
    • 以下に依存ドメイン以下のモジュール
  • ドメイン
    • jarとしてパッケージ化
    • ドメインモデル、通常はPOJOクラスがあります。 ORMを使用している場合、それらはORMエンティティです。
    • また、DTO(データ転送オブジェクト)が存在する可能性もあります。それを使用するかどうかはあなたの呼び出しです。
  • ユーティリティ、サードパーティの統合などのモジュールをさらに追加できますが、上記を推奨します。

2.ビルド/依存関係管理ツール(非常に必要なIMHO)

それらはたくさんあります、グーグル検索はあなたを示します。個人的には、SpringでMavenが好きです。上記のプロジェクト構造で機能します。
また、Mavenを使用している場合は、セクション1で説明したすべてのモジュールを集約する親モジュールがあることに注意してください。すべての箇条書きモジュールは、Mavenモジュールにも対応しています。

3.特定のプロジェクトについての考え

RESTを使用しているため、JSPをビューとして使用しないことを強くお勧めします。プレーンHTML5 + JavascriptまたはAngularJSなどの一般的なフレームワークをビューとして使用できます。
JSPの使用を主張する場合は、コントローラーとJSPを備えた別のwar(web app)を導入する必要があります。コントローラーはデータ(通常はJson/xml形式)を取得し、モデル(POJO)に解析して、JSPがコントローラーからデータを取得して表示できるようにします。 JSPからのデータの投稿はその逆です。ここでは省略しました。

このトピックは非常に巨大であり、特定の要件に大きく依存するため、完全なガイドにはほど遠いですが、ここに含まれている用語は、追加の調査を行うのに十分です(Googleです)。うまくいけば、これがあなたにアプローチする方法に関するいくつかのアイデアを与えるでしょう。

19
Minjun Yu

@ Minjun.Yのほとんどの回答に同意しながら、私はRESTとWebページレイヤーに少し異なるアプローチをとるつもりだと思います。あなたの質問を読んだところ、 WebインターフェースとRESTインターフェースの両方を外の世界に公開したいと考えています。データベースからPOJOを読み取り、データをJSONに変換してから、 JSPによる消費。

サービスレイヤーですべての実際の作業を行い、Webアプリ(JSP)とRESTコントローラー)に個別の「プレゼンテーション」レイヤーを追加することをお勧めします。これらは個別のコントローラーであり、または、RESTサービスのみを使用して、前の回答に従ってクライアント側ですべてのプレゼンテーションロジックを構築します。

また、私はMavenモジュールの大ファンではありません。 Javaショップがプロジェクトを実装する方法は、サービスレイヤーの定期的なリリースを作成し、プレゼンテーションレイヤーを最新のリリースに依存させることです。これについては議論の余地がありますが、私たちはWebインターフェースとRESTインターフェースを別々のMavenプロジェクトとして持っています。これらは通常、異なる.warファイルに存在するため、個別のデプロイメントが必要です。

ところで、私はビルドと依存関係管理ツールを使いこなす必要があることを強調します。プロジェクトが適切なサイズになったら、それらが必要です。 Maven、Jenkins、Nexusなどの無料ツールにより、リリース管理の問題が軽減されます。

2
kiwiron