Какой самый простой способ отфильтровать API scrooge на уровне метода / сервиса?
Я хотел бы знать, есть ли простой способ добавить фильтры в Thrift API Scrooge на уровне сервиса или метода (например, для ведения журнала сериализованных запросов)? Я сейчас на скрудже 18.6.0
, но может обновить при необходимости.
Я уже могу добавить фильтры к своему сервису, но код уродлив, и мне будет сложно продать решение своим коллегам. У меня есть следующие проблемы:
- Не существует готового способа фильтрации
MethodPerEndpoint
- Нет кода, сгенерированного для преобразования
ServicePerEndpoint
кMethodPerEndpoint
только наоборот - ИМО расширяет
ServicePerEndpoint
интерфейс намного уродливее и менее понятен. - Даже при расширении
ServicePerEndpoint
базовая реализация имеетfiltered
метод, который просто выбрасывает и игнорирует предоставленный фильтр (очень загадочно!) - Есть сгенерированный
ServicePerEndpointImpl
который имеет рабочую реализациюfiltered
но этот класс является частным дляServicePerEndpoint
объект, а такжеfinal
Все это означает, что помимо необходимости продлить ServicePerEndpoint
Я заканчиваю тем, что добавляю шаблон для добавления необходимых фильтров к каждому методу индивидуально или для создания фильтруемого ServicePerEndpointImpl
от моего ServicePerEndpoint
с чем-то вроде:
//Companion object
object MyApi {
def apply(arg1, ...) {
val myApi = new MyApi(arg1, ...)
MyThriftService.ServicePerEndpoint(
method1 = myApi.method1,
...
methodX = myApi.methodX
)
}
}
Все это кажется очень ненужным. Есть ли более простой способ?