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

时间:2012-04-12 04:28:15

标签: rest servicestack restsharp

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

ServiceStack

赞成

  • 来自我已创建的服务POCO对象的流畅验证
  • 客户端和服务的一个API
  • 代码读取效果更好(即Get<>(),Post<>())

缺点

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

RestSharp

赞成

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

缺点

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

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

所以,问题如下:

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

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

  • 我的调查结果是否错误和/或是否有任何遗漏?

1 个答案:

答案 0 :(得分:53)

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

ServiceStack服务客户端在使用ServiceStack Web服务及其约定时表现出色。即他们内置了对structured validation and error handling的支持以及所有客户端实现相同的接口,因此您可以在每个JSON,JSV,XML,SOAP甚至same unit test to be used as an integration test上拥有Protobuf服务客户端 - 允许您轻松更改服务使用的端点/格式,而无需更改代码。

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

如果您正在使用第三方API,我建议使用RestSharp,这是一个非常适合该任务的更通用的REST客户端。此外,由于ServiceStack只是通过线路返回干净的DTO,它也很容易从RestSharp中消费,如果您更喜欢它的API也是一个不错的选择。


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

ServiceStack现在提供了另一种选择,可以使用HTTP Client Util extension methods来使用第三方API,它提供DRY,可读的API围绕常见的HttpWebRequest访问模式,例如:

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 page提供了更多示例。