web-dev-qa-db-ja.com

これらはRestSharpとServiceStackのクライアントコードの主な違いですか?

私は決定的な選択をすることができず、誰か(または数人の組み合わせ)が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は、より簡単に検証とコードを取得するのに適していると思います。

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

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

私はこれが完全に主観的な質問ではないことを知っていますが、最低限、私はこの質問に対する回答を探しています(これは主観的です)。

  • 私の発見事項のいずれかが間違っていますか、および/または私が逃した何かがありますか?
37
Justin Pihony

ServiceStack のプロジェクトリーダーとして、ServiceStackサービスクライアントのいくつかの機能をリストできます。

ServiceStackサービスクライアントは、ServiceStack Webサービスとその規約の利用に積極的です。つまり、それらは 構造化検証とエラー処理 の組み込みサポートを備えており、すべてのクライアントが同じインターフェイスを実装しているため、 同じユニットテストを統合テストとして使用できます =各JSON、JSV、XML、SOAPおよび Protobuf サービスクライアント-コードの変更なしでサービスが使用するエンドポイント/フォーマットを簡単に変更できるようにします。

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

サードパーティのAPIを使用している場合は、より一般的な目的であるRestSharpをお勧めしますRESTタスクに適しています。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>>();

代替Content-Type

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

HTTP Utils wiki page から利用できる他の例。

54
mythz