スプリング3.0 REST:
スプリングは、コントローラ内のメソッドへのURLを結合するために使用することができるアノテーションベースのコントローラを使用します。注釈は、GETメソッドとPOSTメソッドを区別するために使用されます。
@RequestMapping(value="/hotels/{hotel}/bookings/{booking}",
method=RequestMethod.GET)
public String getBooking(@PathVariable("hotel") long hotelId,
@PathVariable("booking") long bookingId, Model model) {
Hotel hotel = hotelService.getHotel(hotelId);
Booking booking = hotel.getBooking(bookingId);
model.addAttribute("booking", booking);
return "booking";
}
予約の場合と同様に、URI文字列の変数 "hotel"はパラメータリストでlongに変換されます。 Spring RESTは、JSONオブジェクトをこの同じテクニックを使用してカスタムクラスにマーシャリングすることもできます。このメソッドにはRequestMethod.GET
と注釈が付けられています。つまり、GETリクエストでは呼び出されますが、POSTリクエストでは呼び出されません。
Spring 3.0 RESTでは、Javaオブジェクトとの間で手作業でJSONテキストのマーシャリング/マーク解除を再作成する必要がなくなり、RESTful Webサービスを簡単に作成できます。
ここには、SpringSourceブログREST In Spring MVCというデモがあります。学習曲線は低いですが、デモを動作させるには依存関係のおかげで時間がかかることがあります。セットアップが完了し、デモが有効になったら、一番難しい部分は終わっているはずです。
IDE統合の場合は、Spring Rooを参照してください。私はそれを使用していませんが、Eclipse IDEと統合され、あなたの人生を楽にする機能がいくつかあると聞いてきました。
Restlets:
はRestletsは単にRESTのために設計されていました。その結果、オーバーヘッドはSpring 3.0よりもずっと低くなります。 Restletは、GUIを持たない場合や、MVCに関心がない場合に適しています。 Restletは簡単にサーバーとクライアントの両方として機能します。また、実行できる組み込みサーバーもあり、JettyやTomcatのようなコンテナは不要です。
私はPythonに晒されていませんでしたが、Google App EngineのWebAppフレームワークの実装で見たことから、ルータのコンセプトは非常に似ています。 Pythonの背景を持つ人々は、学習曲線がたくさん低いように見つけることがあります。
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
getConnectorService().getClientProtocols().add(Protocol.FILE);
// Serve the files generated by the GWT compilation step.
Directory dir = new Directory(getContext(), LocalReference.createFileReference(new File("war/")));
router.attachDefault(dir);
router.attach("/contacts/123", ContactServerResource.class);
return router;
}
それはクライアント側でGWTを使用しています。私はそれがJava Swingをあまりにも思い起こさせるので、その部分を取り除くことを好む。そのような利点がある人もいるかもしれませんが、私の個人的な好みはWebのように感じる技術に固執することです。
次に、スタンドアロンモードを使用するRESTサーバーの簡単な例を示します。サーバーはポート8182で実行され、GET要求を待機します。これはSpring RESTフレームワークと同様の注釈ベースのモデルを持っています。これはまた、さまざまなHTTPメソッドを分割し、それらをクラス内のさまざまなメソッドで指すのに役立ちます。
public class FirstServerResource extends ServerResource {
public static void main(String[] args) throws Exception {
// Create the HTTP server and listen on port 8182
new Server(Protocol.HTTP, 8182, FirstServerResource.class).start();
}
@Get
public String toString() {
return "hello, world";
}
}
チェックアウトより多くの情報とRestletsフレームワークの例については、Restlet Web Site:これは非常に基本的な「Hello World」のRESTの一例です。 Restletは、RESTを対象としているため、Springよりも少し学習曲線が小さくなっています。その結果、Springに含まれている余分な機能がすべて含まれていないため、問題の解決が難しい場合があります。あなたが軽量なものを探しているなら、Restletsは確かに行く方法です。
これらの2つのフレームワークは両方ともTomcat、Jetty、Google App Engineで動作します。
ジャージーは本当に面白そうに見えます、それを調べます!ありがとう;-) –
ジャージのアノテーションは、少なくともSpring MVC 3.xと比べて、本当に豊かです。'Resource'クラス(基本的にSpring MVCの' Controller'クラスに相当)のプロパティに '@ PathParam'を適用することができます。メソッドパラメータを渡すのではなく、特に' Resource'クラスのすべてのAPIその特定のパス変数が必要です。 Spring MVC 3.xでは、 '@ PathVariable'を' Controller'クラスのすべてのメソッドで同じ効果を達成するように設定する必要があります。少なくとも、Spring MVC 3でどのようにエレガントに行うかはわかりません。バツ。 – limc