Ответ 1
В качестве руководства по проекту ServiceStack я могу указать некоторые функции клиентов ServiceStack Service:
Клиенты ServiceStack Service уверены в потреблении веб-сервисов ServiceStack и его соглашений. т.е. они имеют встроенную поддержку структурированной проверки и обработки ошибок, а также все клиенты реализуют один и тот же интерфейс, чтобы вы могли тот же самый unit test, который будет использоваться в качестве теста интеграции для каждого из клиентов службы JSON, JSV, XML, SOAP и даже Protobuf, что позволяет вы можете легко изменить конечную точку/формат, который использует ваша служба без изменений кода.
В основном, если вы используете веб-службы ServiceStack, я бы рекомендовал использовать клиенты ServiceStack, которые позволят вам повторно использовать ваши DTO, с которыми вы определили свои веб-сервисы, предоставив вам типичный API-интерфейс от конца до конца.
Если вы потребляете сторонний API, я бы рекомендовал RestSharp, который является клиентом REST общего назначения, который хорошо подходит для этой задачи. Кроме того, поскольку ServiceStack просто возвращает чистые DTO по проводу, он также будет легко расходуться из RestSharp, который, если вы предпочитаете его API, также является хорошим вариантом.
ОБНОВЛЕНИЕ - Использование клиентских сервисов ServiceStack HTTP
ServiceStack теперь предоставляет альтернативный вариант для использования сторонних API с его методами расширения HTTP-клиента, который обеспечивает DRY, читаемый API вокруг общих шаблонов доступа HttpWebRequest, например:
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>>();
Альтернативный тип содержимого
var csv = "http://example.org/users.csv"
.GetStringFromUrl(acceptContentType:"text/csv");
Дополнительные примеры доступны на странице HTTP Utils wiki.