Какой самый простой способ отфильтровать 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
      )
    }
  }

Все это кажется очень ненужным. Есть ли более простой способ?

0 ответов

Другие вопросы по тегам