我正在遵循 WSO2企业集成商开发人员高级课程的实验工具包:https://wso2.com/training/enterprise-integrator-developer-advanced#request_training_enroll
我怀疑 API 和 PROXY 之间的区别。
在此实验工具包中,有一个示例与如何构建自定义连接器有关(该问题与连接器主题并不严格相关)。
在示例中,它首先创建并部署一个自定义连接器,然后在此代理中创建并使用此自定义连接器:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="googlebooks_listVolume"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="searchQuery"
expression="json-eval($.searchQuery)"/>
<googlebooks.listVolume>
<searchQuery>{$ctx:searchQuery}</searchQuery>
</googlebooks.listVolume>
<respond/>
</inSequence>
<outSequence>
<log/>
<send/>
</outSequence>
</target>
<description/>
</proxy>
它工作正常,并且我的连接器已正确调用。但是我问这样的代理和API之间的确切区别是什么。
我读了这个:Difference between Proxy Service and API Service in wso2 Esb
好吧...使用API,我可以定义执行不同CRUD操作的多个资源,而使用代理时,我只有一个入口点。事实是,鉴于此,舒适度似乎只有一个差异:
我需要多次CRUD操作吗?我实现了一个API。我需要进行一次隔离手术吗?我实现了代理。
但是我认为还必须有其他...
我知道API是基于 REST 概念的。我还读到 proxy 用于公开 SOAP 网络服务。
最后一个断言对我来说还不清楚。要调用先前的PROXY(实现类似WS的功能),我要做:
curl -v -X POST -d "{"searchQuery":"rabbit"}" -H "Content-Type: application/json" http://localhost:8280//services/googlebooks_listVolume
在我看来,这不是一个 SOAP 请求,因为我正在传递一个 JSON 对象,该对象包含此Web服务使用的参数。
这也不是纯粹的 REST Web服务,但我认为它绝对不是 SOAP 服务(据我所知,使用 WSDL XML消息。
那么,我想念什么?
答案 0 :(得分:3)
主要区别与您提到的相同。代理服务基本上是具有自己的WSDL文件的SOAP服务。 API被认为是RESTful服务,其资源映射到HTTP动词。
那么如何使用上面给定的curl命令调用代理以及它如何工作?
原因是您与curl请求一起发送的Content-Type
标头。 WSO2 EI或WSO2 ESB可以理解各种内容类型标头,并将以指定的格式(在这种情况下为JSON
)读取内容,然后将其传递给基础消息中介引擎。即使服务器将其作为JSON
消息接受,但当消息传递到中介引擎(该引擎完成所有与消息中介相关的工作)时,它也将作为下面的一条肥皂消息。因此,实际上在中介引擎级别,代理服务仍会收到一条肥皂消息,但在传输级别,我们可以发送任何支持内容类型。调用代理服务的用户看不到此转换。因此,这就是您可以向基于JSON
的代理服务发送SOAP
消息的原因。