新しい REST スタイルの API を書きたいと思っており、ServiceStack を見て、とても気に入っています。しかし、Microsoft が新しい MVC 4 ベータ版の一部として ASP.Net Web API プロジェクトをリリースしたことを知りました。新しい Web API プロジェクトを見た人はいますか? 各システムの長所と短所を教えてください。
ベストアンサー1
両者のユースケースは非常に似ており、ServiceStack プロジェクト私はServiceStackの利点とメッセージベースのデザインによる多くの自然な利点。
ServiceStack は、摩擦のないリモート サービスの正しい設計と実装を促進するという唯一の目標を掲げ、2008 年から OSS が運営するプロジェクトとして存在しています。
シンプルでエレガントなデザイン
究極のシンプルさを追求し、シンプルでエレガントなコア- ほとんどの機能は、コントローラーではなくモデルに自然にバインドされます。これは、MVC、WebApi (および Microsoft が作成した他のすべての Web サービス フレームワーク) が行うことです。
メッセージベースの設計を採用すると、より拡張性が高く脆弱性の少ないサービスを促進し、アクセスと呼び出しのパターンを簡素化し、リモートサービスに優れたアプローチを提供します。無料で得られる他の多くの天然の効能が含まれています。
私たちの主な使命は、あらゆる段階で複雑さと戦い、目に見えない非侵入的な API を維持し、今日の .NET や Web サービス開発者にまだ馴染みのない新しい概念や人工的な構造を導入しないようにすることです。
たとえば、IService<T>
サービスの実装は、自動的に依存関係が結び付けられた標準のC#クラスです。薄くて軽量なラッパーは、コアランタイムの周りに一貫性のある統一されたAPIを提供するために使用されます。HTTPリクエストそしてHTTPレスポンス型。また、基盤となる ASP.NET または HttpListener の Request クラスと Response クラスへのアクセスも許可されるため、ServiceStack を使用するときに制限されることはありません。
WCFとWebApiとの比較
ここでは、対照的なAPIスタイルの概要を説明します。ServiceStackとWCFはWebApiはWCFとは異なり、RESTful API設計を推奨しています。2つの例については、これは両方で書かれた同じサービスで私が知っている唯一の例です。サービススタックとWebAPI。
リモートサービスのベストプラクティス
ServiceStack は、シンプルさとパフォーマンスに主眼を置いており、Martin Fowler のリモート サービス設計パターンを可能な限り慣用的な C# で採用することを中心とした Web/リモート サービスのベスト プラクティスを推進しています。
のファサードパターン- これは、プロセス境界を越えて通信するときに、バッチフルで粗粒度のインターフェースを使用することを示唆しています。
のDTO パターン(マイクロソフト) - 特別な目的の POCO を使用して、Web サービス応答のワイヤ形式を生成するように指示します。
のゲートウェイパターン(マイクロソフト) を使用して、クライアント ゲートウェイ/DTO モデルとサービス インターフェイス層間のクライアントとサーバーの通信をカプセル化します。
これらのパターンにより、懸念事項が明確に分離され、摩擦のない反復的な開発エクスペリエンスが保証されます。
サービスの強化
ServiceStack Web サービスは、本質的に、依存関係がなく自動的に接続された純粋な C#IService<T>
インターフェイスを中心に構築されており、クリーンな POCO を使用して独自の要求および応答 DTO で Web サービス コントラクトを自由に定義できます。これにより、ServiceStack の API は実質的に非表示かつ非侵入的になります。つまり、C# サービス ロジックを抽出して ServiceStack ホストの外部で実行するのは簡単です。
このGISTは、ServiceStack 内の C# .cs クラスは 1 つだけ:
- 登録されているすべての形式のメタデータ ページ
- WSDL、XSD、C#クライアントの例へのリンク付き
- 人間に優しいHTMLレポートビュー
- 単一の自己完結型 HTML ページ スナップショット (外部参照なし)。埋め込まれた JSON Web サービス応答が含まれており、データ スナップショットへのプログラムによるアクセスが可能になります。
- 内蔵ミニプロファイラー(優れたMVC ミニプロファイラー)
- SQLプロファイリングを含む
- JSON/JSONP、XML、JSV、CSV、SOAPエンドポイント
RestServiceBaseクラスとServiceBaseクラスは、可能な限り最大限の再利用性を実現するためにカスタムC#ロジックをホストすることを目的としています。たとえば、DTOファースト設計により、遅延実行とプロキシ実行が簡単に可能になり、同じC#サービスがMQホストでもホストおよび実行できるようになります。これは、次のIMessageService
ようなものを登録すると発生します。RedisMQホストエンドポイント経由でサービスを呼び出します/asynconeway
(つまり、client.SendOneWay()
C#クライアントの場合)。
base.ResolveService<T>()
また、選択したサービスの自動接続されたインスタンスを返すメソッドを使用して、複合サービスを簡単に委任および作成することもできます。Northwind 顧客詳細サービス例:
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[] - application/octet-stream コンテンツ タイプ。
カスタムHTTPヘッダーのサポートの例は、次のとおりです。このCORSの例HTTP ヘッダーをグローバルに、またはサービスごとに構成できます。
HTML サポート
ServiceStackでHTMLを返すには複数のオプションがあります。詳細はこちら。
.NET 用の最速のテキストおよびバイナリ シリアライザーが含まれています
弾力性のある高速シリアライザは、APIにおいて、高速な応答時間と既存のクライアントを壊さないバージョン管理可能なAPIを保証するために最も重要です。そのため、ServiceStackには.NET 用最速テキスト シリアライザーNuGetオプションで有効にするマルク・グラヴェルのプロトコル バッファ(.NET の最速バイナリ シリアライザー)。
ServiceStackのテキストシリアライザは非常に回復力があり、極端なバージョン管理に耐えるエラーなし。
エンドツーエンドでスムーズな開発体験
ServiceStackの独自の性質により、エンドツーエンドで高速かつ型付けされた簡潔なWebサービスAPIが実現され、組み込みのサポートが提供されます。同期/非同期 C#/.NETそして非同期Silverlightクライアントコード生成なし:
同期 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を返すだけなので、他のHTTPクライアントでも簡単に使用できます。例:jQuery を使用した JS クライアントの例:
$.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-検証.jsたった1行のコードでレスポンスエラーをHTMLフォームフィールドに簡単にバインドできるJavaScriptライブラリ。SocialBootstrapApi サンプルプロジェクトこれに関する良いデモを提供します。
ASP.NET および MVC との高度な統合
のサービススタック MVC パワーパックASP.NETとMVCの多くの欠点を、代替品で書き直して修正します。壊滅的なセッションXML で制限される ASP.NET プロバイダーを、独自のクリーンかつ依存性のない ICacheClient および ISession API の実装を使用してキャッシュします。
ServiceStackには、より新しくクリーンな認証および認可プロバイダーモデルさまざまな AuthProviders が組み込まれています。
- 資格情報 - /auth/credentials サービスに投稿してユーザー名/パスワードの資格情報で認証します
- 基本認証 - ユーザーが基本認証で認証できるようにする
- Twitter OAuth - ユーザーがTwitterに登録して認証できるようにする
- Facebook OAuth - ユーザーがFacebookに登録して認証できるようにする
認証モジュールは完全にオプションであり、クリーンな ICacheClient / ISession API と OrmLite 上に構築されており、セッションをメモリ、Redis、または Memcached に保存し、UserAuth 情報を OrmLite がサポートする RDBMS の SQLServer、MySql、PostgreSQL、Sqlite、および Redis データ ストアまたは InMemory (開発/テストに便利) に保存できます。
素晴らしいドキュメント
ServiceStackは非常によく文書化されており、フレームワークに関する情報のほとんどはGitHub ウィキフレームワークの他の部分(例:シリアライザ、Redis、OrmLite)のドキュメントは、ドキュメント
のサービススタックの例プロジェクトはServiceStackのライブデモとスターターテンプレートのソースコードを提供し、SocialBoostsrapApi プロジェクトTwitter の Bootstrap テンプレートに基づいて、ServiceStack と MVC を備えた Backbone.js シングル ページ アプリを開発するための優れた出発点を提供します。
上記に加えて、情報の宝庫がGoogleグループに含まれる近年かなり拡大しています。
どこでも実行
ServiceStack は、ASP.NET および HttpListener ホスト上で実行され、.NET または Mono のいずれかでホストできる .NET 3.5 フレームワークです (豆知識:翻訳元CentOS/Mono を搭載しています)。これにより、ServiceStack Web サービスを次のいずれかでホストできるようになります。
.NET 3.5 および 4.0 を搭載した Windows
- IIS 5/6/7 (IHttpHandler を使用)
- VS.NET Web開発サーバー
- コンソールアプリまたはWindows GUI
- Windows サービス
Linux/OSX と Mono
- Apache + mod_mono
- Nginx + MonoFastCGI
- エクストリーム
- コンソールアプリ
オープンソース開発モデルで開発
ServiceStackは、オープンな環境で積極的に開発され、常に自由なOSSライセンス(New BSD)は、その発足以来、今日までに100万人以上の開発者から貢献を受けています。47人の開発者そして現在はGitHub で 3 番目に多く視聴されている C# プロジェクト。
デメリット
最大の欠点は、Microsoft によって開発されていない (または利用可能なオプションとしてリストされていない) 他のほとんどの OSS .NET プロジェクトでも同じだと思います。つまり、フレームワークを評価するときに ServiceStack が最初の選択肢になることはほとんどありません。ほとんどの採用者は、WCF の強制的な摩擦や脆弱性、または推奨される Microsoft Stack のパフォーマンスに不満がある場合に、最後の手段としてのみ ServiceStack を評価します。
フィードバックとコミュニティリソース
ServiceStackは、多くの人から肯定的なフィードバックを受け、非常に好評を博しており、メーリンググループ内の肯定的な感情今年から@サービススタックツイッターアカウントは追跡しているお気に入りへの言及とフィードバック。
のコミュニティリソースWiki ページは、ブログ投稿、ポッドキャスト、プレゼンテーション、Gist などへのリンクがあり、実際の ServiceStack についてさらに詳しく知るのに適した場所です。