web-dev-qa-db-ja.com

.netのRESTfulサービスに使用するフレームワーク

私は同様の質問がされたことを知っていますが、それらのほとんどは時代遅れです。だからここにもう一度行きます:)。アプリケーションに完全なRESTサービスレイヤーを実装する必要があります。この問題を解決するには、どのフレームワークが最適かという問題があります。 RESTまたは必要なものではありません。認証は必須の機能です。ここに私のアイデアの一部があります。どう思いますか?

  • WCF:私の意見では、これはオーバーロードされたフレームワークであり、物事を複雑にします。
  • ServiceStack:素敵で軽量なオープンソースの代替手段のようです。しかし、開発を中止することを決定した場合はどうなりますか?
  • this などのasp.net mvcを使用したカスタム実装ですが、なぜホイールを再発明するのですか?
22
raisr

私は最初に ServiceStack を開始しました。これは、非効率(開発と実行時)と代替.NETフレームワークを使用したWebサービスの作成に課せられる摩擦のためです。

MVCよりも3-4倍高速なJsonシリアル化

ServiceStackは、私たちが信じているように強力なフォーカスパフォーマンスを備えています 最高のエンドユーザーUXを提供します ---を含む組み込み キャッシングプロバイダーの強力なセット - 。NETの最高速JSONシリアライザー - -4x倍高速 .NETおよびMVCに同梱されているシリアライザーよりも(デフォルトのJavaScriptSerializerは.NETで最も遅い)。最大のパフォーマンスを得るために、実行時の反映や正規表現は使用されません。スマートな非線形ルートマッチングを採用しているため、より高速な組み込みのキャッシュプロバイダーを使用して ASP.NETのセッションのパフォーマンスが低い を回避することをお勧めします。

型付き、反復、コードファースト開発に焦点を当てた

ServiceStackを使用すると、最小限のコードを使用して自動的になしcode-gen、config、pre/postビルドステップなど.

簡単な Hello World サービスの例:

public class Hello { public string Name { get; set; } }
public class HelloResponse { public string Result { get; set; } }

public class HelloService : IService 
{
    public object Get(Hello request) 
    {
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
}

これらのクラスだけで、すべてのWebサービスが自動的にさまざまな異なる形式(JSON、XML、JSV、CSV、SOAP)で利用可能になり、すべてゼロの労力で

C#を使用した厳密に型指定されたクライアントAPIの例:

var client = new JsonServiceClient("http://localhost/Service");
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

JQueryを使用したJavaScriptの例:

$.getJSON("http://localhost/Service/hello/World!", function(r) {
    console.log(r.Result);
});

開発にやさしい

Webサービスを繰り返し開発する場合、Webサービスを視覚化することが重要であるため、ブラウザーでWebサービスを表示するときのデフォルトのContent-Typeは、人にやさしい JSON HTML5 Report 形式(スタンドアロンでも http://ajaxstack.com/jsonreport/ )これにより、Webサービスの応答を一目で視覚化できます。

また、WebサービスAPIを文書化するための優れた方法として機能する 自動生成されたメタデータページ (独自のカスタム説明で注釈を付けることができます)も取得します。

しかし、もし彼らが開発をやめることに決めたら

ServiceStackの作成者として、私は近い将来に開発を放棄することはないと思います。それを使ってシステムを毎日構築しているのは、それを開発するのに、よりクリーンで、より高速で、より生産的なフレームワークであることがわかったからです。

ベストプラクティスを促進する

DTO-first message-based アーキテクチャ Service Interface pattern を有効にするアーキテクチャを促進する.NET Webサービスフレームワークはほとんどありません= =で一般的に見られるWebサービスのベストプラクティスJavaエコシステムにより、バッチフルで粗粒度のSOAベースのWebサービスを簡単に開発できます。

0リスクがあり、別の.NET Webサービスフレームワークのために破棄されます。他の.NETフレームワークがWebサービスのベストプラクティス(つまり、DTO /リモートファサードとサービスインターフェースのパターン)を積極的に宣伝し、パフォーマンスに重点を置いているとは信じていないからです。

しかし、20人近くの貢献者がいるオープンソースプロジェクトであっても、この恐れは緩和されます。 MSが放棄し、誰もが後継者に移行することを余儀なくされた独自のクローズドソースフレームワークはいくつありますか?オープンソースソフトウェアは進化し、放棄されたり書き直されたりすることはありません。

ServiceStackのソースコード全体は http://github.com/ServiceStack の下にあります。ロックインはなく、GitHubを使用すると、多くの人がすでに行っているように、誰でも簡単にフォークして開発を続行できます。

どこでも動作します

最後に、ServiceStackはIIS 6/7のWindowsまたはLinux/OSXのMonoを使用して6/7の任意のASP.NETホストで実行できます。スタンドアロンのHttpListenerホストもサポートしているため、 Webサーバー、つまり、Windowsサービス内のコンソールまたはWindowsアプリケーションに埋め込まれ、さらに MonoTouch iPhoneアプリケーション内でホストされる .

22
mythz

最近 Nancy で遊んでいて、私も Manos de Mono を検討しています。ナンシーのホームページの例です。

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters => "Hello World";
    }
}
22
kenny

私にとって、最も簡単でクリーンなソリューションは、JsonResultを返すメソッドを使用してASP.NET MVC3のコントローラーとしてサービスを実装することです。

利点:

  • MVCフレームワークが面倒な作業を行います

  • コードの代わりに属性を使用してモデル検証を実装できます

  • IISの任意のバージョンへのXCopy展開

7
DaveRead

今日これを始めていたなら、ASP.NET MVC3でカスタムを実行するか、以下のフレームワークの1つを使用するという3番目のオプションから選択します。

3
Mark Perry

CodePlex および NuGet ...を介して、Ghouds Of Giantsソリューションが利用可能になり、Resources Over MVCに名前が変更されました。

1
Piers Lawson