主にモバイル アプリにコンテンツを提供するプロジェクトを計画していますが、ウェブサイトが必要です。
私の質問は、Jersey または Restlet を使用してモバイル アプリ用の REST API を開発し、次に Play! を使用することが理にかなっているということです。ウェブサイトを提供するため。
それとも、Play! を使用する方が理にかなっていますか? それをすべて行うには?もしそうなら、Play で REST を行う方法! フレームワーク?
主にモバイル アプリにコンテンツを提供するプロジェクトを計画していますが、ウェブサイトが必要です。
私の質問は、Jersey または Restlet を使用してモバイル アプリ用の REST API を開発し、次に Play! を使用することが理にかなっているということです。ウェブサイトを提供するため。
それとも、Play! を使用する方が理にかなっていますか? それをすべて行うには?もしそうなら、Play で REST を行う方法! フレームワーク?
リクエストに応じて、シンプルな REST のようなアプローチ。Codemwncis のソリューションとほぼ同じように機能しますが、コンテンツ ネゴシエーションに Accept ヘッダーを使用します。最初にルートファイル:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
ここではコンテンツ タイプを指定しません。そうすることは、特定のリソースに「特別な」URIが必要な場合にのみ必要です。/users/feed/
Atom/RSS で常に戻るようにルートを宣言するようなものです。
アプリケーション コントローラは次のようになります。
public static void createUser(User newUser) {
newUser.save();
user(newUser.id);
}
public static void updateUser(Long id, User user) {
User dbUser = User.findById(id);
dbUser.updateDetails(user); // some model logic you would write to do a safe merge
dbUser.save();
user(id);
}
public static void deleteUser(Long id) {
User.findById(id).delete();
renderText("success");
}
public static void user(Long id) {
User user = User.findById(id)
render(user);
}
ご覧のとおり、getUserJSON メソッドのみを削除し、getUser メソッドの名前を変更しました。さまざまなコンテンツ タイプを機能させるには、いくつかのテンプレートを作成する必要があります。必要なコンテンツ タイプごとに 1 つ。例えば:
ユーザー.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
ユーザー.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
すべてのブラウザーが Accept ヘッダーで text/html コンテンツ タイプを送信するため、このアプローチではブラウザーに常に HTML ビューが提供されます。他のすべてのクライアント (おそらく一部の JavaScript ベースの AJAX 要求) は、独自の目的のコンテンツ タイプを定義できます。jQuerys ajax() メソッドを使用すると、次のことができます。
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
ID 1 のユーザーに関する詳細を JSON 形式で取得する必要があります。Play は現在、HTML、JSON、および XML をネイティブにサポートしていますが、公式ドキュメントに従うか、コンテンツ ネゴシエーション モジュールを使用することで、別のタイプを簡単に使用できます。
開発に Eclipse を使用している場合は、ルートとそれに対応するコンテンツ タイプをテストできるREST クライアント プラグインを使用することをお勧めします。
プレイを使おう!すべてを行うこと。Play で REST サービスを作成するのは非常に簡単です。
まず、ルート ファイルを使用すると、REST アプローチに準拠するルートを簡単に記述できます。
次に、作成する API メソッドごとにアクションをコントローラーに記述します。
結果を返す方法 (XML、JSON など) に応じて、いくつかの方法を使用できます。たとえば、renderJSON メソッドを使用すると、結果を非常に簡単にレンダリングできます。XML をレンダリングする場合は、View で HTML ドキュメントを作成するのと同じ方法で行うことができます。
これがきちんとした例です。
ルートファイル
GET /user/{id} Application.getUser(format:'xml')
GET /user/{id}/json Application.getUserJSON
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
アプリケーションファイル
public static void createUser(User newUser) {
newUser.save();
renderText("success");
}
public static void updateUser(Long id, User user) {
User dbUser = User.findById(id);
dbUser.updateDetails(user); // some model logic you would write to do a safe merge
dbUser.save();
renderText("success");
}
public static void deleteUser(Long id) {
// first check authority
User.findById(id).delete();
renderText("success");
}
public static void getUser(Long id) {
User user = User.findById(id)
renderJSON(user);
}
public static void getUserJSON(Long id) {
User user = User.findById(id)
renderJSON(user);
}
getUser.xml ファイル
<user>
<name>${user.name}</name>
<dob>${user.dob}</dob>
.... etc etc
</user>
JAX-RS 実装との統合は、Play の組み込み HTTP ルーティングを使用するための可能な代替アプローチです。RESTEasy の例については、RESTEasy Play!を参照してください。モジュール。
このアプローチは、すでに JAX-RS に投資している場合、またはコンテンツ ネゴシエーションなどの JAX-RS が提供する高度な機能 REST が必要な場合に適しています。そうでない場合は、Play を直接使用して、HTTP リクエストに応答して JSON または XML を提供する方が簡単です。
あなたは見てみるべきです
http://www.lunatech-labs.com/open-source/resteasy-crud-play-module
これは、crud モジュールが自動的に管理エリアを構築するのと同じように、rest インターフェイスを自動的に構築する play 用のモジュールです...
このアプローチは Play バージョン 1.2.3 では壊れているようです。@seb によって作成され、前述のhttps://github.com/sebhoss/play-user-sampleによって行われたソースをダウンロードすると、JSON オブジェクトで POST を使用して新しいユーザー オブジェクトを作成することはできなくなります。
json および xml POST を使用して作成するための特定のメソッドが必要です。ここで概説: https://groups.google.com/forum/#!topic/play-framework/huwtC3YZDlU