PlayFrameworkを使用して完全にRESTfulなバックエンドを構築しています。また、RESTfulAPIを呼び出す別のテクノロジースタックを使用して別のWebフロントエンドを構築しています。
両方のアプリを同じドメイン名にデプロイし、一部のURLをバックエンドAPIに使用し、一部のURLをフロントエンドビューに使用するにはどうすればよいですか?
たとえば、MyDomain.comにアクセスすると、フロントエンドにホームページが表示されますが、GETをMyDomain.com/product/24に送信すると、バックエンドが製品情報を含むJSONオブジェクトを返します。さらに、WebブラウザがMyDomain.com/product/24を表示し、フロントエンドにHTMLページが表示され、そのWebページが同じURLへのバックエンド呼び出しから作成された場合も考えられます。
最後に、これには2つの専用サーバーが必要ですか?または、フロントエンドとバックエンドを同じサーバー(OpenShift、Herokuなど)にデプロイできますか?
間違いなく最も単純で最もクリーンなアプローチは、BEとFEの両方のデータを提供する単一のアプリケーションを作成することです。ここでは、URL、疑似ルートによって応答(JSONとHTML)が異なります。
GET /products/:id controllers.Frontend.productHtml(id)
GET /backend/products/:id controllers.Backend.productJson(id)
利点:
2つの別々のアプリを作成することに本当に決心している場合は、プロキシとしてHTTPサーバーを使用します(例:nginx
)。これにより、すべてのリクエストがdomain.tld/*
に送信され、ポート9000
で動作するアプリケーションに送信されます( HTML)ただし、domain.tld/backend/*
へのリクエストは、JSONで応答するポート9001
で動作するアプリケーションにリダイレクトされます。
呼び出し元に応じてJSONまたはHTMLで応答する場合は、ヘッダーを比較して、要求がブラウザーから送信されたか、各コントローラーのAJAX呼び出し)から送信されたかを確認できますが、それを信じてくださいあなたよりも早く悪夢になります...コインを挿入し、味を選択してください
他の可能性(したがって別の答えとして)は、Play 2.1.x
a Content negotiation
で追加された可能性を使用することです。最初に取得したいものに最も近いと思います:)
実際、MEAN STACK APPを作成し、たとえばHerokuのような1つのホスティングを使用する方がはるかに簡単です。フロントエンドはそれが何であるか、バックエンドのフロントエンドです。次のように、バックエンド/ restfulAPIとフロントエンドに簡単にアクセスできます。
http:// localhost:3000/api/contacts (APIエンドポイントにアクセスして使用するため)
http:// localhost:3000/contacts (フロントエンド)
注意:localhost:3000または http://yourapp.com/api/contacts (api) http://yourapp.com/contacts (フロントエンド)
.....それはURLにあります:)