2011-02-04 12 views
13

私はすばらしい.NET(WCF)REST機能に代わるものを探しています。良いオープンソースのREST Webサービス技術がありますか?

なぜですか?

私はオープンソース技術に深い関心がありますが、Webサービスに関しては.NET Webサービス以外の経験はありません。

さらに、私は現在、多くのJavaとPythonを使用しています。私はMicrosoftテクノロジスタックから離れています。

何らかのプログラミング言語で代替案を提案してください。何らかの理由でそれがなぜ良いのか良い理由を説明してください。 (この理由は言語の選択と密接に関係している可能性があります)

何を知りたいですか?

  • 使いやす
    • インストール
    • 設定
    • 生成機能
    • IDEとの統合
    • 展開
  • 学習曲線
  • の長所と短所
  • など

答えて

7

スプリング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で動作します。

3

REST/HTTPクライアント(オープンソースプロジェクト)としてRESTSharp

5

ServiceStackより最近の開発の1つであるOpenRastaあります。私はまだそれをあまりしていないが、これまでのところかなり甘いようだ。

6

Javaを使用していて、Springに精通している場合は、Spring MVC 3.xを確認する必要があります。このバージョンは醜いXML設定から離れていて、その構文はJAX-RSの仕様とよく似ています。つまり、Springを知っていれば、Spring MVC 3.0の学習は最小限に抑えられます。しかし、あなたがIoCのパターンを理解するのに困っている場合は、それは長く苦しい経験になるでしょう。 :)

Spring MVC 3.x は、ではなく、Spring MVC開発者に基づいて、決して将来的には決してできません。彼らの取り組みには、すでに多くの優れたREST実装があり、Spring MVC 3.xを完全にRESTfulにする必要はありません。

私はあなたに確かにお勧めします別のオプションはJerseyです。 Jerseyは純粋なRESTです。つまり、JAX-RSの実装です。ジャージーは30分勉強しました。私の意見では、注釈はSpring MVC 3.xよりもはるかに強力で豊富です。 Spring MVC 3.xのアノテーションはかなりバニラに見えます。 Jerseyは自動的にWADLを生成しますが、それは基本的ですが、1つを持っているよりも優れています。必要に応じて、WADLをカスタマイズすることもできます。 (ところで、WADLはWSDLのRESTのバージョンです。もしあなたがその意味を知らなければ)。 Jerseyは基本的にすべてのResourceクラスを含むパッケージを検出し、あなたが持っている設定に基づいてWADLを生成します。最後に私が指摘したいのは、JerseyはあなたのRestful Webサービスを簡単にテストするための素晴らしいテストフレームワークを持っていることです。言い換えれば、それらのテストフレームワークでは、単体テストでGrizzlyやメモリ内のサーバを簡単に起動して、Webサービスをテストすることができます。それは確かに今まで私がこれまで使ってきた最高のものの一つです。ここであなたの足を濡らすための非常に簡単なチュートリアルです:http://www.vogella.de/articles/REST/article.html。それは本当にTHATです。 :)

参考までに、私はSpring MVC 3.xとJerseyの両方を使用しました。

+0

ジャージーは本当に面白そうに見えます、それを調べます!ありがとう;-) –

+0

ジャージのアノテーションは、少なくともSpring MVC 3.xと比べて、本当に豊かです。'Resource'クラス(基本的にSpring MVCの' Controller'クラスに相当)のプロパティに '@ PathParam'を適用することができます。メソッドパラメータを渡すのではなく、特に' Resource'クラスのすべてのAPIその特定のパス変数が必要です。 Spring MVC 3.xでは、 '@ PathVariable'を' Controller'クラスのすべてのメソッドで同じ効果を達成するように設定する必要があります。少なくとも、Spring MVC 3でどのようにエレガントに行うかはわかりません。バツ。 – limc

5

RubyとRails (Ruby on Rails)は、RESTfulサービスを大きくサポートしています。実際、Railsは設計をサポートし、奨励し、RESTfulな方法で開発します。

ルビーの強力なDSL機能により、RESTサービスの作成は非常に簡単で簡単です。あなたはPythonの経験があるので、ルビーを学ぶのは簡単かもしれません。

残りのURL(レールのルートと呼ばれる)がどのように定義されているかを確認するには、guideを参照してください。

他のRuby Webフレームワーク(Sinatraなど)もこれをうまくやっています。

ところで、ルビーとレールの両方がオープンソースであり、ルビーコミュニティはすごく活発です。

1

完全Recess

と呼ばれているRESTful Webサービス用に開発されたオープンソースのフレームワークでは、それは非常に古いではないが、業界から良いの注意を得たがあります。 Alcatel-Luceneは既に、このフレームワークを使用してサービスの一部を開発するためにa competition on TopCoderを配置しました。

私はあなたがそれはシンプルさとスピードのために設計されており、非常に乾燥し、簡潔なAPIを維持することができると、自動的に外の作品が非常に低い人工概念を紹介しているservicestack.netをチェックアウトする歓迎Recess web site

3

で詳細をチェックしてください構成やコードジェネレーターなしの箱。

リモートサービスを開発するためのMartin Fowlers GatewayとDTOパターンをモデルにしているため、ベストプラクティスを推奨します。

Spring.NETの例の同等のコードは、上記(APPHOSTで)

構成

Routes.Add<Booking>("/hotels/{HotelId}/bookings/{BookingId}"); 

C#コード

public class BookingService : RestServiceBase<Booking> 
{ 
    public IHotelService hotelService { get; set; } //auto-injected by IOC 

    public object OnGet(Booking request) 
    { 
     var hotel = hotelService.GetHotel(request.HotelId); 
     var booking = hotel.GetBooking(request.BookingId); 
     return booking; 
    } 
} 

と同様の例であろう予約サービスはライブNorthwind Web Services demoによって見ることができます。

JSON、XML、JSV、CSV、SOAP 1.1/1.2、およびHTMLエンドポイントとフォーマットを使用して自動的に利用可能な構成とコード(exc DTO) 。

提供されているすべてのエンドポイントとフォーマット、さらに自動生成/メタデータとドキュメントページについては、Hello World exampleをご覧ください。

関連する問題