У меня есть 2 службы A и B
Службе A необходимо сделать HTTP-вызов в Службу B и получить ответ
Я не совсем понимаю, как разработать интерфейс в Службе A, который бы вызвать API службы B
ПОДХОД 1
DeliveryClient. java
public interface DeliveryClient {
PostNotificationResponse sendNotifcation(PostNotificationRequest request);
}
DeliveryClientImpl. java
class DeliveryClientImpl implements DeliveryClient{
private static String baseEndPoint = "http://example";
public DeliveryClientImpl() {
}
public PostNotificationResponse sendNotifcation(PostNotificationRequest request) {
String postNotificationEndpoint = new StringBuilder(baseEndpoint).append("/send")
// make the HTTP call
return response
}
}
ПОДТВЕРЖДЕНИЯ ПОДХОДА 1
Запрос интерфейса и ответ привязаны к PostNotificationRequest и PostNotificationResponse
В будущем, если Служба A будет разговаривать со Службой C вместо B, будет трудно вносить изменения при таком подходе
ПОДХОД 2
Design generi c классы запросов и ответов
abstract class BaseRequest {
}
abstract class BaseResponse {
}
class NotificationRequest extends BaseRequest {
}
class NotificationResponse extends BaseResponse {
}
DeliveryClient. java
public interface DeliveryClient {
<R extends BaseResponse> R sendNotification(BaseRequest<T> request);
}
DeliveryClientImpl . java
class DeliveryClientImpl implements DeliveryClient{
private static String baseEndPoint = "http://example";
public DeliveryClientImpl() {
}
public PostNotificationResponse sendNotifcation(PostNotificationRequest request) {
String postNotificationEndpoint = new StringBuilder(baseEndpoint).append("/send")
// make the HTTP call
return response
}
}