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

Jus*_*ony 37 rest restsharp servicestack

我一直无法做出明确的选择,并希望有人(或几个人的组合)可以指出使用RestSharp与ServiceStack的客户端服务之间的区别(请记住我已经在使用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可能是可以接受的,可以获得更容易阅读的验证和代码.

那么,这里有一些问题:

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

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

  • 我的任何发现都不正确和/或有没有我错过的?

myt*_*thz 53

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

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,该方法提供DRY,可读的API围绕常见的HttpWebRequest访问模式,例如:

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

网址扩展名

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>>();
Run Code Online (Sandbox Code Playgroud)

替代内容类型

var csv = "http://example.org/users.csv"
    .GetStringFromUrl(acceptContentType:"text/csv");
Run Code Online (Sandbox Code Playgroud)

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

  • 作为RestSharp的项目负责人,我完全赞同这个答案. (70认同)
  • 很高兴见到你们相处:D (15认同)
  • 不要使用RestSharp.使用仍在使用的东西. (9认同)
  • 我想补充一点,我认为ServiceStack的项目负责人没有意识到他拥有的东西.ServiceStack使创建服务更容易,更快速,并且同样地使用自己的服务,因此它也使得第三方REST API的使用变得非常容易.它简单的Request DTO对查询字符串的序列化以及它对响应DTO的简单快速的JSON解析具有一个很好的API,只能用作针对Google和许多其他REST API的客户端.在我看来,对于RestSharp没什么,但ServiceStack在客户端使用起来更简单,更清晰. (2认同)