37

私は決定的な選択をすることができず、誰か(または数人の組み合わせ)がRestSharpとServiceStackのクライアントサービスの使用の違いを指摘してくれることを望んでいました(私はすでにServiceStackをサービスに使用していることに注意してください) 。これが私がこれまでに持っているものです(違いのみ)。それらは実際に非常に類似しているため、リストはかなり小さいです。

ServiceStack

長所

  • すでに作成したサービスPOCOオブジェクトからの流暢な検証
  • クライアントとサービスの両方に1つのAPI
  • コードの読み取りが向上します(つまり、Get <>()、Post <>())

短所

  • 一部の文字列を書き出す必要があります(つまり、クエリパラメータを使用してGETリクエストを行う場合は、コードでその文字列を作成する必要があります)
  • 要求/応答タイプ(JsonServiceClient、XmlServiceClient)ごとに異なるクラスを作成する必要があります

RestSharp

長所

  • ほぼすべてがPOCOになる可能性があります(つまり、クエリパラメーターを使用してGETリクエストを行う場合は、コードを介してパラメーターを追加するだけです)
  • リクエスト/レスポンスタイプの切り替えは簡単です(request.RequestFormat = DataFormat.Json / Xml)

短所

  • 手動検証(データ注釈にあるものを超えて)
  • 学習する2つのAPI(どちらもかなり単純なので、これはマイナーです)
  • コードは一目で(ほとんど)読めません(つまり、request.Method = Get / Post ..であり、メインの呼び出しはExecute <T>()です)

私はRestSharpに傾倒していました。それは、POCOを直接使用し、文字列操作をほとんど行わない傾向があるためですが、ServiceStackは、より読みやすい検証とコードを取得するのに適していると思います。

だから、ここに質問があります:

  • どっちがいい?
  • なぜ一方が他方の上にあるのですか?

私はこれが完全に主観的な質問ではないことを知っていますが、少なくとも私はこの質問に対する答えを探しています(これは主観的です):

  • 私の発見のいずれかが間違っているか、および/または私が見逃したものがありますか?
4

1 に答える 1

54

ServiceStackのプロジェクトリーダーとして、ServiceStackServiceクライアントのいくつかの機能を一覧表示できます。

ServiceStackサービスクライアントは、ServiceStackWebサービスとその規則を利用することで意見が分かれています。つまり、構造化された検証とエラー処理のサポートが組み込まれているだけでなく、すべてのクライアントが同じインターフェイスを実装しているため、JSON、JSV、XML、SOAP、さらにはそれぞれの統合テストとして使用できる同じ単体テストを使用できます。 Protobufサービスクライアント-コードを変更せずに、サービスが使用するエンドポイント/フォーマットを簡単に変更できます。

基本的に、ServiceStack Webサービスを使用している場合は、ServiceStackクライアントを使用することをお勧めします。これにより、Webサービスを定義したDTOを再利用して、型付きAPIをエンドツーエンドで使用できるようになります。

サードパーティのAPIを使用している場合は、タスクに適した、より汎用的なRESTクライアントであるRestSharpをお勧めします。また、ServiceStackはネットワークを介してクリーンなDTOを返すだけなので、RestSharpから簡単に使用することもできます。APIが必要な場合は、これも適切なオプションです。


更新-ServiceStackのHTTPクライアントユーティリティの使用

ServiceStackは、 HTTP Client Util拡張メソッドを使用してサードパーティAPIを使用するための代替オプションを提供するようになりました。これにより、一般的なHttpWebRequestアクセスパターンの周りにDRYで読み取り可能なAPIが提供されます。

List<GithubRepo> repos = "https://api.github.com/users/{0}/repos".Fmt(user)
    .GetJsonFromUrl()
    .FromJson<List<GithubRepo>>();

URL拡張機能

var url ="http://api.twitter.com/statuses/user_timeline.json?screen_name={0}"
    .Fmt(name);
if (sinceId != null)
    url = url.AddQueryParam("since_id", sinceId);
if (maxId != null)
    url = url.AddQueryParam("max_id", maxId);

var tweets = url.GetJsonFromUrl()
    .FromJson<List<Tweet>>();

代替コンテンツタイプ

var csv = "http://example.org/users.csv"
    .GetStringFromUrl(acceptContentType:"text/csv");

HTTPUtilswikiページから入手できるその他の例。

于 2012-04-12T05:55:32.447 に答える