37

我一直无法做出明确的选择,并希望有人(或几个人的组合)可以指出使用 RestSharp 与 ServiceStack 的客户端服务之间的区别(请记住,我已经在使用 ServiceStack 作为我的服务) . 这是我到目前为止所拥有的(仅差异)。该列表相当小,因为它们确实非常相似:

服务栈

优点

  • 来自我已经创建的服务 POCO 对象的流利验证
  • 一个 API 用于客户端和服务
  • 代码可读性更好(即 Get<>()、Post<>())

缺点

  • 必须写出我的一些字符串(即,如果我使用查询参数发出 GET 请求,我必须在我的代码中创建该字符串)
  • 我必须为每个请求/响应类型(JsonServiceClient、XmlServiceClient)创建一个不同的类

RestSharp

优点

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

缺点

  • 手动验证(超出数据注释中的验证)
  • 两个要学习的 API(这是次要的,因为它们都相当简单)
  • 代码一目了然(几乎没有)可读性(即 request.Method = Get/Post.. 并且主要调用是 Execute< T >())

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

所以,这里有几个问题:

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

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

  • 我的任何发现是否不正确和/或我错过了什么?
4

1 回答 1

54

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

ServiceStack 服务客户端在使用 ServiceStack Web 服务及其约定方面固执己见。即它们具有对结构化验证和错误处理的内置支持,并且所有客户端都实现相同的接口,因此您可以使用相同的单元测试作为JSON、JSV、XML、SOAP 甚至Protobuf服务客户端 - 允许您轻松更改服务使用的端点/格式,而无需更改代码。

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

如果您使用的是第 3 方 API,我会推荐 RestSharp,它是一个更通用的 REST 客户端,非常适合该任务。此外,由于 ServiceStack 只是通过线路返回干净的 DTO,它也可以从 RestSharp 轻松使用,如果您更喜欢它的 API,它也是一个不错的选择。


更新 - 使用 ServiceStack 的 HTTP 客户端工具

ServiceStack 现在提供了一个使用 3rd Party API 的替代选项,其HTTP Client Util 扩展方法围绕常见的 HttpWebRequest 访问模式提供 DRY、可读 API,例如:

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

网址扩展

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");

更多示例可从HTTP Utils wiki 页面获得。

于 2012-04-12T05:55:32.447 回答