apollo 的 plugin 是在 apollo server 启动时候注册的,其形态是一个 js object. 在其中,可以通过 key 指定针对不同事件阶段的自定义处理函数。
events 其实是 apollo 处理请求的 life cycle 中的一系列时间点上触发的。这里既有 pre hooks 也有 post hooks.
plugin 的实现方式是,通常会接受一个 options 对象,然后返回自定义实现的上述 js object 即可。
可见,针对 web 请求的框架设计方式,不同框架有不同的做法。OO 语言通常会通过类继承的方式,如 asp.net 这种。而 js / ts 语言则比较灵活,通过普通 js object + key 即可定义出一个契约,实现方式比较松散自由。
参考:https://www.apollographql.com/docs/apollo-server/integrations/plugins/