Какой самый простой способ отфильтровать API scrooge на уровне метода / сервиса? - PullRequest
0 голосов
/ 25 сентября 2018

Хотелось бы узнать, есть ли простой способ добавить фильтры в Thrift API Scrooge на уровне сервиса или метода (например, для ведения журнала сериализованных запросов)?В настоящее время я нахожусь на Scrooge 18.6.0, но могу обновить при необходимости.

Я уже могу добавить фильтры к своему сервису, но код уродлив, и мне будет трудно продать решение длямои коллеги.У меня возникают следующие проблемы:

  • Нет готового способа фильтрации MethodPerEndpoint
  • Нет кода, сгенерированного для преобразования ServicePerEndpoint до MethodPerEndpoint, только наоборот
  • IMO, расширяющий интерфейс 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
      )
    }
  }

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

...