我一直无法做出明确的选择,并希望有人(或几个人的组合)可以指出使用RestSharp与ServiceStack的客户端服务之间的区别(请记住我已经使用ServiceStack我的服务)。这是我到目前为止(仅差异)。该列表相当小,因为它们确实非常相似:
我倾向于使用RestSharp,因为它更倾向于直接使用POCO和非常少的字符串操作,但是我认为ServiceStack可以接受验证和更容易阅读的代码。
所以,问题如下:
我知道这不是一个完全主观的问题,但至少我正在寻找这个问题的答案(这是主观的):
答案 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 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提供了更多示例。