Я обычно не заморачиваться с дополнительными библиотеками клиента, как RestSharp. Я чувствую, что цель REST состоит в том, чтобы как можно ближе подойти к золотому старому HTTP, отрицая необходимость чего-либо другого, кроме HttpWebRequest/Response. Работа с запросом/ответами напрямую дает отличный контроль и побуждает вас думать о том, что происходит на самом деле, вместо того, чтобы абстрагироваться от всего, как с традиционным сервисом WCF или ASMX.
Для микросервисов, которые я построил в прошлом, я сохранил объекты запроса и ответа в отдельных библиотеках, и я распространил источник на другие разработчики в моей организации, чтобы дать им опору для вызова службы, но вероятно, это было бы непрактично для внешних потребителей; опять же я предполагаю, что точка перехода на микросервис по полномасштабному сервису WCF заключается в том, что по своей природе передаваемые запросы/ответы малы и просты. Я также почувствовал себя немного неудобно с этой практикой в начале; однако, когда я начал получать действительно отзывчивые веб-приложения, вызывающие микросервисы с javascript (обычно jquery) так же легко, как и традиционные .NET, я начал видеть потенциал для действительно хорошей интеграции наших внутренних систем. В конечном итоге наши интрасети предоставляли действия и представления в бизнес-приложениях, которые ранее были невозможны.
HttpWebRequest webRequest = WebRequest.Create("http://localhost:51467/api/email/send") as HttpWebRequest;
webRequest.Method = "POST";
webRequest.Credentials = CredentialCache.DefaultCredentials; //or account you wish to connect as
webRequest.PreAuthenticate = true;
webRequest.ContentType = "application/json"; // or xml if it's your preference
string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(requestObject);
using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream()))
{
streamWriter.Write(jsonData);
streamWriter.Flush();
streamWriter.Close();
}
HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
if (webResponse.StatusCode != HttpStatusCode.Accepted)
throw new ApplicationException("Unexpected Response Code. - " + webResponse.StatusCode);
string response;
using (System.IO.StreamReader readResponse = new System.IO.StreamReader(webResponse.GetResponseStream()))
{
response = readResponse.ReadToEnd();
}
//swap out for regular xml serializer if you've used xml
dynamic responseObject = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(response);
Также еще один совет, если вы работаете с Web API, я действительно предлагаю добавлять на страницах справки Web API и тестового клиента.У вас не будет автоматически созданного wsdl, который вы получите с WCF и ASMX, но вы можете получить действительно хорошую документацию о вашем микросервисе для других разработчиков (даже лучше, на мой взгляд, автогенерированные классы прокси) и тестовый жгут, позволяющий использовать услуга от вашего браузера
https://github.com/wuchang/WebApiTestClient https://www.nuget.org/packages/Microsoft.AspNet.WebApi.HelpPage/
Во-первых, только потому, что ваш сервис небольшой или мало что делает, не делает его микросервисом. Микросервисы имеют довольно четко определенное значение, и они не должны быть спокойными. –