Ответ 1
Это лучшее представление того, что я искал:
Веб-API ASP.NET <# = Прокси для T4 #>
Он поместил свой пример кода на github:
https://github.com/RestCode/WebApiProxy
Надеюсь, что это может выйти официально позже.
В предстоящем проекте мы хотим использовать ASP.NET WebAPI 2 для отображения функциональности сервиса как для наших веб-сайтов, так и для клиентов браузера.
Поскольку мы хотим как можно больше "конечных точек", где это возможно, мы хотим, чтобы все вызовы, даже "внутренние", потребляли наши серверы из веб-служб WebAPI. (т.е. не только новый экземпляр контроллера напрямую)
Я ищу что-то, чтобы помочь создать или подкрепить С# "клиент", который обертывает HTTPClient и доставляет строго типизированные "прокси". Подобно WCF при генерации прокси через "Добавить новую ссылку на службу".
Я читал другие вопросы, задавая похожие вещи (как видно HERE), но хотел задать более прямой вопрос, не связанный с MVC или проблемами тестирования.
Это лучшее представление того, что я искал:
Веб-API ASP.NET <# = Прокси для T4 #>
Он поместил свой пример кода на github:
https://github.com/RestCode/WebApiProxy
Надеюсь, что это может выйти официально позже.
В настоящее время я работаю над инструментом Swagger с открытым исходным кодом для .NET. С помощью этих инструментов вы можете выбрать контроллер веб-API из существующей DLL и создать спецификацию Swagger или код клиента для С# и TypeScript. Используя шаблоны T4 в Visual Studio, процесс генерации работает как ссылки на службы WCF.
Посмотрите здесь: http://NSwag.org
Наиболее распространенным способом, который я видел для предоставления простой в использовании функциональности веб-api, является сборка, которая определяет основные классы, а также некоторые функции почты. Эта сборка использует JSON для передачи данных.
Посмотрите, как работает интегрированный API PayPal. По сути, они дают вам сборку, которая содержит определения для различных используемых классов. Существует класс для передачи данных на сервер.
Идея заключается в том, что клиентам все равно, как они на самом деле общаются с вами (все это в черном ящике), однако у них есть возможность использовать предопределенные классы или сворачивать свои собственные.
Я бы сказал, что вам не нужна полная библиотека для доступа к данным; если у вас есть объекты данных, определенные в общей библиотеке, вы можете использовать общие вспомогательные методы, чтобы сделать что-то вроде
public static TItem GetItem<TItem>(this HttpClient httpClient, string queryString) where TItem : class
{
var response = httpClient.GetAsync(queryString).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<TItem>().Result;
}
throw new HttpRequestException(response.ToString());
}
но измените вашу собственную обработку ошибок и т.д.