Механизм / Техника для аудита API запросов / методов интерфейса - PullRequest
2 голосов
/ 02 апреля 2019

В моем Web-API у меня есть различные методы, объявленные на уровне интерфейса. И реализация каждого метода написана на уровне сервиса. При каждом объявленном методе я добавлял аннотации аудита, что-то вроде этого

 CreateStackResponse createStack(@AuditId("id") String id, @AuditModule("module") String module, CreateStackRequest createStackRequest)

Столбцы моей таблицы аудита: id, context-id, message, details, user-id, module, submodule, ...

Как создать сообщение (например, «запрос на создание стека инициирован пользователем abc») для хранения. Одно из решений, например, на уровне обслуживания, я вызову один метод (скажем, logEvent (обязательные параметры)), который будет хранить аудит в базе данных. Можем ли мы сделать это с помощью простых аннотаций, на самом уровне интерфейса? Например, как я могу сохранить журналы аудита, как показано на вкладке событий awsastic beanstalk.

message shown in details column is dynamic

1 Ответ

1 голос
/ 02 апреля 2019

Аннотации не обеспечивают никакого поведения для вашего кода сами по себе. Все эти аннотации - это то, что подразумевает их название ... дополнительная информация, прикрепленная к вашему коду. Сила аннотаций проявляется, когда у вас есть код, который использует самоанализ во время выполнения, чтобы посмотреть определения вашего скомпилированного кода и выполнить действия на основе этих аннотаций.

Spring Framework делает это экстенсивно. Он просматривает аннотации в вашем коде и использует их, чтобы решить, как подключить ваше приложение. Он часто создает классы-обертки вокруг ваших собственных классов, так что он может внедрить свою собственную логику поверх вашего кода.

Вы, конечно, можете сделать что-то подобное самостоятельно, но это не тривиально. Я бы посоветовал взглянуть на AspectJ или какую-то другую аспектно-ориентированную программу программирования (AOP) . Я бы предложил изучить идею аспектно-ориентированного программирования в целом, так как то, что вы хотите сделать, является одной из самых распространенных проблем, которые он пытается решить. Использование Spring Framework также может помочь в решении таких проблем. В него входит модуль для выполнения АОП «Spring AOP».

Независимо от того, как вы поступите с аннотациями, вы будете много изучать и, возможно, реструктуризировать свой код для использования сторонних пакетов. Возможно, вы захотите отказаться от идеи использования аннотаций и просто поместить простой код регистрации в основную логику.

Я только что прогуглил для «использую аспектно-ориентированное программирование для аудита» и получил много интересных хитов. Вот один такой хит. Я не знаю, является ли это лучшим ресурсом для ваших целей, но он даст вам представление о том, о чем я говорю здесь:

http://idanfridman.com/2014/05/13/clean-auditing-infrastructure-for-your-app-using-aop-custom-annotations-and-reflection/

...