在Micro Services中使用requestUri的HttpClient.GetAsync(String)时键入安全性

时间:2015-06-15 03:19:22

标签: wcf service asp.net-web-api httpclient

在.NET的微服务架构中,有许多WebAPI服务。他们互相互动,主要是字符串。

HttpClient client = new HttpClient()
client.BaseAddress = new Uri("http://localhost:9000/");

HttpResponseMessage response = await client.GetAsync("api/products/1");
HttpResponseMessage response = await client.GetAsync("api/products");

api / products / 1 这样的神奇字符串会导致代码可维护性问题 - 魔术字符串会在代码中传播。如果 apicontroller 操作中的服务更改,则使用者或客户端应用程序可能会中断。没有像WCF这样的代理提供客户端可以使用类型安全服务调用的地方。

如何将类型安全带入webapi服务电话?

1 个答案:

答案 0 :(得分:2)

这些微服务不应该耦合在一起并且彼此直接通信。微服务的关键点之一是解耦,因此服务不依赖于彼此。这样,可以删除或更新一个微服务,并且不影响其余的微服务。如果您使用API Gateway,那么在服务发生变化时,此网关是唯一需要更改的网关。如果需要直接的服务到服务通信,我会使用消息传递或队列服务来促进这一点。现在,每个服务都可以在不知道它的端点(或接口是什么)的情况下从其他服务订阅它所需的内容。只有网关知道微服务的接口,并且可以更新接口是否更改。现在,API网关是外部客户端需要了解的唯一接口。这些接口现在可以具有版本控制策略,并且这些接口是唯一的" public"。不应公开微服务接口。