对于WSO2 api管理器,处理程序和序列之间有什么区别或关系。
我想为每个 api 添加一些要遵循的条件。根据条件,它将检查 api 请求是否满足条件。我不确定是否需要使用序列或处理程序。
最佳答案
这个答案假设用户所说的“序列”指的是“中介序列”,它是通过 APIManagerExtensionHandler 处理程序运行的(中介可以是全局的,也可以是每个 API 的,但据我所知,它是在同一位置执行的) )。
中介序列和处理程序都是在网关收到响应或请求后运行的代码扩展。处理程序扩展了org.apache.synapse.rest.AbstractHandler
类,需要实现AbstractHandler.handleRequest
和AbstractHandler.handleResponse
;中介者扩展 org.apache.synapse.mediators.AbstractMediator 类并需要实现 AbstractMediator.mediate 。
自定义处理程序和中介序列之间的主要区别在于,使用自定义处理程序需要您编写自己的 Java 类,然后打包并部署您的处理程序。如果您的需求可以通过预定义中介器的组合(由 WSO2 的 ESB 提供)来满足,那么您可以编写 XML 序列来定义中介任务,而无需新代码。
根据我的经验,以下是处理程序和中介序列之间的主要区别。应根据您的具体要求来确定使用其中一种。
处理程序
- 严格来说是“每个 API”,尽管它们可以通过包含在 Velocity-template.xml 文件中添加到每个 API。
- 可以相对于其他处理程序以任何顺序执行。
- 除了在 API 定义序列中包含处理程序之外,不需要序列。所有任务都必须包含在 Java 代码中。
中介序列
- 可以配置为全局或特定于 API。
- 可以相对于其他中介序列以任何顺序执行,但不能在其他处理程序之前进行中介,除非所有其他中介器也这样做(除非您编写自定义中介)处理程序)。
- 允许您调用 XML 树中的其他预定义中介来描述中介任务。除非预定义中介器(由 WSO2 的 ESB 提供)不能满足您的要求,否则您无需编写任何自定义代码。
简而言之:如果现有调解器的某种组合能够实现您的目标,那么使用调解序列是最有意义的(即使是“接近,但不完全”的情况,编写自定义调解器可能比创建完整的调解器更容易)新处理程序)。如果您需要提高自定义级别或需要在执行所有其他中介之前或之后进行中介,则应考虑编写处理程序。
编辑:实际回答特定问题:您可以相当轻松地使用中介序列对请求 header 中的值进行逻辑检查。如果您需要读取正文内容,这些检查会变得更加困难......在这种情况下,自定义处理程序本质上是您唯一的选择。
关于wso2 - 处理程序和序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35592712/