ServiceStackとASP.Net Web API [終了]


299

私は新しいRESTスタイルのAPIを書きたいと思っています。ServiceStackを見てきましたが、とても気に入っています。ただし、マイクロソフトがASP.Net Web APIプロジェクトを新しいMVC 4ベータの一部としてリリースしたことを確認しました。新しいWeb APIプロジェクトを見た人はいますか?各システムの長所/短所を教えてください。

回答:


389

ServiceStackプロジェクトの主任メンテナーとして、私はServiceStackの利点とメッセージベースの設計の多くの自然な利点をよく理解しています

ServiceStackは、摩擦のないリモートサービスの正しい設計と実装を促進するという単一の目標を掲げ、2008年からOSSが実行するプロジェクトとして設立されました。

シンプルでエレガントなデザイン

究極のシンプルさを追求して、それはシンプルでエレガントなコアを中心に構築されています -ほとんどの機能はコントローラーではなくモデルに自然にバインドされいます-これはMVC、WebApi(およびMicrosoftが作成した他のすべてのWebサービスフレームワーク)と同じです)。

メッセージベースの設計を採用すると、リモートサービスに優れたアプローチが提供され、拡張性が高く、脆弱性の少ないサービスが促進され、アクセスと呼び出しのパターンが簡素化され、その他の多くの自然なメリットが無料で得られます

中核的な使命として、目に見えない非侵入型のAPIを維持し、今日の.NETまたはWebサービスの開発者にはまだ馴染みのない新しい概念や人工の構成要素の導入を回避することを目指して、あらゆる段階で複雑さと戦います。

例として、IService<T>サービスの実装は、自動配線された依存関係を持つ単なる標準のC#クラスです。薄く軽量なラッパーを使用して、コアランタイムのIHttpRequestおよびIHttpResponseタイプの周りに一貫性のある統一されたAPIを提供します。また、基盤となるASP.NETまたはHttpListenerのRequestクラスとResponseクラスへのアクセスを許可するため、ServiceStackを使用するときに制限を受けることはありません。

WCFおよびWebApiと対照的

ServiceStackとWCFが促進する対照的なAPIスタイルの概要を以下に示します。WebApiはREST-ful API設計を促進するという点でWCFとは異なります。2つの間の例については、これはServiceStackとWebApiの両方で同じサービスを記述した唯一の既知の例です

ベストプラクティスリモートサービス

ServiceStackは、シンプルさ、パフォーマンスに重点を置いており、可能な限り慣用的なC#でMartin Fowlersのリモートサービス設計パターンを採用することを中心としたWeb /リモートサービスのベストプラクティスを推進しています。

  • Facadeパターン -これまであなたは、プロセスの境界を越えて通信batchful、粗粒のインタフェースの使用を示唆しています。

  • DTOパターンMSDN) -あなたのWebサービス応答のワイヤフォーマットを生成するための専用のPOCOSの使用を規定。

  • ゲートウェイ・パターンMSDNクライアントゲートウェイ/ DTOモデルとサービス・インターフェイス階層間、クライアントとサーバーの通信をカプセル化します)。

これらのパターンは、懸念事項を明確に分離し、摩擦のない反復的な開発経験を保証します。

サービスを強化

中核のServiceStack Webサービスは、依存関係のない自動配線された純粋なC#IService<T>インターフェースを中心としており、クリーンなPOCOを使用して独自の要求および応答DTOでWebサービスコントラクトを完全に自由に定義できます-ServiceStackのAPIを実質的に非表示かつ非表示にする-invasive、つまりC#サービスロジックを抽出してServiceStackホストの外部で実行するのは簡単です。

この要点は、ServiceStackの1つのC#.csクラスで得られる良い例です。

  • すべての登録済みフォーマットのメタデータページ
    • WSDL、XSD、C#クライアントの例へのリンク
  • 人に優しいHTMLレポートビュー
    • 単一の自己完結型htmlページのスナップショット(つまり、外部参照なし)。埋め込まれたJSON Webサービス応答が含まれます-プログラムによりデータスナップショットにアクセスできます。
  • ビルトインミニプロファイラー(優れたMVCミニプロファイラーのポート)
    • SQLプロファイリングを含む
  • JSON / JSONP、XML、JSV、CSV、SOAPエンドポイント

RestServiceBaseクラスとServiceBaseクラスは、可能な限り最大限の再利用のためにカスタムC#ロジックをホストすることを目的としています。たとえば、DTOファーストの設計により、同じC#サービスをMQホストでホストおよび実行できる遅延実行およびプロキシ実行が簡単に可能になります。これはIMessageServiceRedisMQホストのようなものを登録し、/asynconewayエンドポイントを介して(つまりclient.SendOneWay()、C#クライアントで)サービスを呼び出すとどうなるかです。

Nortwind CustomerDetailsサービスの例にあるbase.ResolveService<T>()ように、選択したサービスの自動接続インスタンスを返すメソッドを使用して、複合サービスを簡単に委任して作成することもできます。

var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
    new Orders { CustomerId = customer.Id });

プレーンなC#オブジェクトを返す

ほとんどの場合、ServiceStackはほとんどのC#オブジェクトを期待どおりにシリアル化します-返される可能性のある型のリストを以下に示します(この回答から):

  • 任意のDTOオブジェクト-> Response ContentTypeにシリアル化
  • カスタマイズされたHTTP応答のHttpResult、HttpError、CompressedResult(IHttpResult)

次のタイプは変換されず、応答ストリームに直接書き込まれます。

  • ストリング
  • ストリーム
  • IStreamWriter
  • byte []-アプリケーション/オクテットストリームのコンテンツタイプ。

カスタムHTTPヘッダーサポートの例は、このCORSの例で確認できます。このCORSの例では、HTTPヘッダーをグローバルに、またはサービスごとに構成できます。

HTMLサポート

ここで詳しく説明されている ServiceStackでHTMLを返すための複数のオプションがあります

.NET用の最速のテキストおよびバイナリシリアライザーを含む

弾力性と高速シリアライザは、高速な応答時間を確保するためのAPIで第一に重要であるとServiceStackが含まれる理由は、既存のクライアントを破壊しないバージョン管理API for .NETの最速テキストシリアライザ有効にするにはNuGetオプション付き@marcgravellをプロトコルバッファ(.NETの最速のバイナリシリアライザ)。

ServiceStackのテキストシリアライザーは非常に復元力があり、エラーなしで極端なバージョン管理に耐えることができます。

エンドツーエンドの摩擦のない開発体験

ServiceStackの独断的な性質により、コード生成なしのSync / Async C#/。NETおよびAsync Silverlightクライアントの組み込みサポートにより、エンドツーエンドで高速で型指定された簡潔なWebサービスAPIが可能になります

同期C#の例

var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

非同期C#の例

client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
    r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });

純粋なJSONを返すだけなので、jQueryを使用したJSクライアントの例など、他のHTTPクライアントでも簡単に使用されます。

$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
    alert(todos.length == 1);
});

高度にテスト可能

すべてのC#/。NET ServiceClientは同じインターフェイスを共有するため、高度なテストとスワップが可能になり、同じユニットテストでXML、JSON、JSV、SOAP統合テストとしても機能させることができます。

組み込みの豊富な検証とエラー処理

フリクションフリーでクリーンな開発体験を提供するという使命に基づいて、ServiceStackには型付き検証とエラー処理が組み込まれており、C#例外をスローしたり、組み込みのFluent検証を使用したりすると、Webサービスクライアントで構造化された型付きエラーに簡単にアクセスできます、例:

try {
    var client = new JsonServiceClient(BaseUri);
    var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
    /*
      webEx.StatusCode  = 400
      webEx.ErrorCode   = ArgumentNullException
      webEx.Message     = Value cannot be null. Parameter name: Name
      webEx.StackTrace  = (your Server Exception StackTrace - if DebugMode is enabled)
      webEx.ResponseDto = (your populated Response DTO)
      webEx.ResponseStatus   = (your populated Response Status DTO)
      webEx.GetFieldErrors() = (individual errors for each field if any)
    */
}

JavaScriptでエラーを消費するのを簡単にするために、軽量のss-validation.js JavaScriptライブラリを使用して、1行のコードで応答エラーをHTMLフォームフィールドに簡単にバインドできます。SocialBootstrapApiのプロジェクト例は、この良いデモを提供します。

ASP.NETおよびMVCとの豊富な統合

ServiceStack MVCパワーパックの再書き込みと修正そのための代替とASP.NET MVCとの不振の解決策の多くは壊滅セッション ICacheClientとISessionのAPIの独自のクリーンと依存関係のない実装ととキャッシュのXML-邪魔ASP.NETプロバイダ。

ServiceStackには、新しく、よりクリーンな認証および自動化プロバイダーモデルも含まれており、さまざまなAuthProviderが組み込まれています。

  • 資格情報-/ auth / credentialsサービスに投稿してユーザー名/パスワード資格情報で認証するため
  • 基本認証-ユーザーが基本認証で認証できるようにする
  • Twitter OAuth-ユーザーがTwitterで登録および認証できるようにする
  • Facebook OAuth-ユーザーがFacebookに登録および認証できるようにする

認証モジュールは完全にオプションであり、クリーンなICacheClient / ISession APIとOrmLiteに組み込まれているため、セッションをメモリ、Redis、またはMemcachedに保存でき、ユーザー認証情報は、SQLServer、MySql、PostgreSQL、SqliteのOrmLiteでサポートされているRDBMSに保持されます。 RedisデータストアまたはInMemory(開発/テストに便利)も同様です。

素晴らしいドキュメント

ServiceStackは非常によく文書化されており、フレームワークに関するほとんどの情報はGitHub wikiでホストされています。フレームワークの他の部分(シリアライザ、Redis、OrmLiteなど)のドキュメントは、servicestack.net / docs /にあります。

ServiceStack.ExamplesながらプロジェクトはServiceStackのライブデモやスターターテンプレートのすべてのソースコードを提供SocialBoostsrapApiプロジェクトは、 Twitterのブートストラップテンプレートに基づいServiceStackとMVCとBACKBONE.JS単一ページのアプリケーションを開発するの偉大な出発点を提供します。

上記に加えて、情報の宝庫は、近年かなり拡大しているGoogleグループに含まれています

どこでも走る

ServiceStackは、ASP.NETおよびHttpListenerホストで実行される.NET 3.5フレームワークであり、.NETまたはMonoでホストできます(雑学:www.servicestack.netはCentOS / Monoによって提供されています)。これにより、ServiceStack Webサービスを次のいずれかでホストできます。

.NET 3.5および4.0を搭載したWindows

Linux / OSXとMono

  • Apache + mod_mono
  • Nginx + MonoFastCGI
  • XSP
  • コンソールアプリ

オープンソース開発モデルで開発

ServiceStackは、オープンソースで積極的に開発されているオープンソース開発モデルを強く信じており、創業以来、常にリベラルなOSSライセンス(New BSD)の下でホストされてきました。現在、47人以上の開発者から寄稿を受けており、現在、GitHubで3番目に多く視聴されているC#プロジェクトに参加しています

短所

最大の欠点は、Microsoftによって開発されなかった(または利用可能なオプションとしてリストされていた)他のほとんどのOSS .NETプロジェクトでも同じだと思います。これは、フレームワークを評価するときに最初の選択肢になることはめったにないことを意味します。ほとんどの採用者は、ServiceStackを最後の手段として評価するだけで、WCFに課せられた摩擦と脆さ、または優先されるMicrosoft Stackのパフォーマンスに不満を感じます。

フィードバックとコミュニティリソース

ServiceStackは、メーリンググループのポジティブな感情によって目に見えるものとしてそれを評価したほとんどの人々から提供されたポジティブなフィードバックで非常に好評です。今年の時点で、@ ServiceStackの Twitterアカウントは、お気に入りの言及やフィードバックを追跡しています

コミュニティリソースのwikiページには、より多くのServiceStackについて野生で投稿、ポッドキャスト、プレゼンテーション、要旨などをブログにリンクを持つを見つけるのに良い場所です。


30
WCF、webapi、そして現在はServiceStackを使用したことがある人として、ServiceStackを使用してください。1)WCFはほとんどの人にとって不必要に複雑すぎます。それは古い「すべての問題を解決しよう」デリマです。2)web-apiが新しすぎる。最終リリースを待ちます。マルチパートフォームの投稿もサポートしていません。コードは流動的な状態にあります。その上で商用アプリを実行することはありません。ところで、この質問は閉じるべきではありません。
Michael Silver

13
リリースされたばかりのASP.NET WebAPI用にこれを編集してください。
Blake Niemyjski

26
あなたのウェブサイトをよりユーザーフレンドリーにしてください。これは素晴らしいツールのようです。しかし、あなたのサイトは混乱しています。プロジェクトが何であり、それが解決することを目指しているものは明らかではありません。対照的に、この答えは素晴らしいです。
Kugel

82
これは、実際にはWeb APIとの比較にはあまり思えません。それは理にかなっています-答えの時点で、Web APIはまったく新しいものでした。これはもう当てはまりません。私は実際の内訳を見たいと思っています。この答えが古くなっているのではないかと心配しています。
ジョージマウアー2013年

35
ServiceStackがv4.0の時点で商用のみ/バイナリのディストリビューションに移行していることを指摘する価値があるかもしれません。詳細については、DemisのGoogle+投稿を参照してください。
Nick Jones

137

考慮する必要がある新しい主な違いがあります-ServiceStackはv4から無料で使用できなくなりました。 SSプロのかなり明確な答えがあるので、Web APIのカップルを捨てたかった

Web API

プロの:

  1. プロジェクトで自由に使用できます(商用利用を許可するVSライセンスがある場合)
  2. StackOverflow.comを含め、MicrosoftおよびWeb全体で非常に高いレベルの無料サポートを利用できます。
  3. Microsoftショップで非常に人気のあるASP.NET MVCなどの他のMicrosoftテクノロジースタックとすばやく統合
  4. MicrosoftスタックでのRESTful認証および承認の組み込みサポート

コンの:

  1. SOAPをサポートしていません

付随的なメリット

(Web APIに利点がある、または私が追加できる長所/短所がある理由を追加して、以下にコメントを残してください)


84
SOAPをサポートしていないことは間違いである
D.Rosado

11
MVCとWebAPIが共存するのはCONです。
Phill

4
ServiceStack v3は引き続き無料で使用でき、AFAIKは常に使用できます。言及されている神話はv4固有のものではないと思います。
カイルゴーベル

14
うわー、「もはや無料」は控えめな表現です。10人を超える従業員を抱える会社の開発者1人あたり 999ドルですか?
Ryan Lundy 14

7
Service StackからWeb APIに切り替える最大の理由は、Service Stack v3がiOS(Xamarinを使用)では新しい64ビットアーキテクチャー要件でサポートされなくなったことです。もちろん、アップデートは有料版であるv4にあります。
SgtRock 2015

21

ServiceStackについてはあまり言えませんが、Web APIには多くの優れた機能があり、現在はバージョン2です。

Web APIでできることのいくつか:

  • OWINアプリケーションの自己ホスト(つまり、どこでも実行)。
  • フルサポートasyncawait
  • 良いデフォルトのテンプレートとたくさんのオープンソースの例。
  • 優れたJson.Net JSONシリアライザーを使用しました。
  • デフォルトで残りっぽい(ハイパーメディアを自分で行う必要がある)。
  • もっと...

1
このリストのすべてがServiceStackにも存在するか、またはconと見なすことができます。ServiceStackのJSON シリアライザーは、あまり 一般的ではありませんが、JSON.NETよりもはるかに高速です。@mythzがこのテクノロジーに対して強い意見を持っているため、OWINサポートが実装される可能性は低く、かなり健全です(この機能リクエストに関する彼のコメントを参照してください)。
ygormutti 2015

3
3年前に公開されてからアップグレードされていないOWINのnugetパッケージを見ると、OWINのサポートを巡るこの誇大宣伝にはあまり意味がありません。マイクロソフトはかつてクールだと言っていたので、人々は本当にOWINを欲しがっているようです。そうでなければ、おそらくOWINについてまったく聞いたことがないでしょう。マイクロソフトは喜んでそれを彼らの新しいおもちゃKに賛成して落としました。マイクロソフトは彼らによって強く押し付けられたプロジェクトを殺す強い傾向があるので、これは「マイクロソフトはこれの後ろにあるので永遠に生きます」という議論を緩和します。
Alexey Zimarev

ServiceStackの経験がない場合に回答するのはなぜですか?
ブライアンオグデン


3

私がSSを使用して1年になりますが、それはすべて素晴らしいです。ORMLiteは純粋な魔法です。awfull MySQL DBを再マッピングして、モバイルアプリに統合することができました。データベースに変更がないため、別のアプリのphpバックエンドで使用されています...

神話はサポートと説明に関する例です。アプリの設計とメンテナンスの簡素化に関する私の知識をアップグレードしました。是非お試しください。

また、SSをWebAPIと比較しないでください。それは十分ではありません、SSはあなたのツールボックスにより多くのものをもたらします。ServiceStack.Textも優れたAutomapperです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.