这些是RestSharp和ServiceStack客户端代码的主要区别吗?

我一直无法作出明确的select,并希望有人(或几个人的组合)能够指出使用RestSharp与ServiceStack的客户端服务之间的差异(请记住,我已经使用ServiceStack为我的服务) 。 这是我到目前为止(仅差异)。 名单相当小,因为它们确实非常相似:

ServiceStack

优点

  • Fluentvalidation从我已经创build的服务POCO对象
  • 一个客户端和服务的API
  • 代码读取更好(即Get <>(),Post <>())

缺点

  • 我的一些string必须写出来(即如果我使用查询参数进行GET请求,我必须在我的代码中创build该string)
  • 我必须为每个请求/响应types(JsonServiceClient,XmlServiceClient)创build一个不同的类,

RestSharp

优点

  • 几乎所有的东西都可以是POCO(即,如果我使用查询参数进行GET请求,我只是通过代码添加参数)
  • 在请求/响应types之间切换很简单(request.RequestFormat = DataFormat.Json / Xml)

缺点

  • 手动validation(超出在数据注释中find的)
  • 两个API学习(这是很小的,因为它们都相当简单)
  • 代码不是一目了然(几乎没有)(即request.Method = Get / Post ..和主要调用是执行<T>())

我倾向于RestSharp,因为它更倾向于直接POCO的使用和很less的string操作,但是我认为ServiceStack可能是可以接受的,以获得更容易阅读的validation和代码。

所以,这里是问题:

  • 你喜欢哪个?
  • 为什么一个在另一个?

我知道这不是一个完全主观的问题,但至less我正在寻找这个问题的答案(这是主观的):

  • 我的发现是否有任何错误和/或是否有我错过的?

作为ServiceStack的项目负责人,我可以列出ServiceStack服务客户端的一些function:

ServiceStack服务客户端在使用ServiceStack Web服务及其约定方面有自己的见解。 即,它们内置了对结构化validation和error handling的支持,以及所有客户端实现相同的接口,因此您可以使用相同的unit testing作为每个JSON,JSV,XML,SOAP 的集成testing Protobuf服务客户端 – 允许您轻松更改您的服务使用的端点/格式而无需更改代码。

基本上,如果您使用ServiceStack Web服务,我build议使用ServiceStack客户端,这将允许您重新使用您定义Web服务的DTO,从而为您提供端到端的types化API。

如果您正在使用第三方API,我build议您使用RestSharp,这是一个非常适合该任务的更通用的REST客户端。 另外,因为ServiceStack只是通过电线返回干净的DTO,所以它也可以很容易地从RestSharp中消耗,如果你喜欢它的API,也是一个不错的select。


更新 – 使用ServiceStack的HTTP客户端实用程序

ServiceStack现在提供了一个替代选项,用于使用HTTP客户端实用程序扩展方法来消费第三方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>>(); 

替代内容types

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

HTTP Utils wiki页面提供了更多示例。