118

主にモバイル アプリにコンテンツを提供するプロジェクトを計画していますが、ウェブサイトが必要です。

私の質問は、Jersey または Restlet を使用してモバイル アプリ用の REST API を開発し、次に Play! を使用することが理にかなっているということです。ウェブサイトを提供するため。

それとも、Play! を使用する方が理にかなっていますか? それをすべて行うには?もしそうなら、Play で REST を行う方法! フレームワーク?

4

6 に答える 6

113

リクエストに応じて、シンプルな 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 クライアント プラグインを使用することをお勧めします。

于 2010-12-13T18:30:09.033 に答える
26

プレイを使おう!すべてを行うこと。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>
于 2010-12-07T20:44:47.947 に答える
5

JAX-RS 実装との統合は、Play の組み込み HTTP ルーティングを使用するための可能な代替アプローチです。RESTEasy の例については、RESTEasy Play!を参照してください。モジュール

このアプローチは、すでに JAX-RS に投資している場合、またはコンテンツ ネゴシエーションなどの JAX-RS が提供する高度な機能 REST が必要な場合に適しています。そうでない場合は、Play を直接使用して、HTTP リクエストに応答して JSON または XML を提供する方が簡単です。

于 2010-12-09T21:17:53.650 に答える
4

あなたは見てみるべきです

http://www.lunatech-labs.com/open-source/resteasy-crud-play-module

これは、crud モジュールが自動的に管理エリアを構築するのと同じように、rest インターフェイスを自動的に構築する play 用のモジュールです...

于 2011-02-17T04:36:28.523 に答える
2

このアプローチは 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

于 2011-11-22T09:29:04.480 に答える