WSO2 API 和 Proxy 有什么区别?

What are the difference between a WSO2 API and Proxy?

我正在学习 WSO2 Enterprise Integrator Developer Advanced 课程的 labkit:https://wso2.com/training/enterprise-integrator-developer-advanced#request_training_enroll

我对APIPROXY.

的概念有什么区别有疑问

在此 labkit 中有一个示例与如何构建自定义连接器相关(该问题与连接器主题并不严格相关)。

在示例中,它首先创建并部署自定义连接器,然后创建并在该代理中使用该自定义连接器:

<?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>

它工作正常,我的连接器被正确调用。但我想问的是,这样的 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 消息。

那么,我错过了什么?

主要区别和你说的一样。代理服务基本上是一个具有自己的 WSDL 文件的 SOAP 服务。 API 被视为 RESTful 资源映射到 HTTP 动词的服务。

那么如何使用上面给定的 curl 命令调用代理以及它是如何工作的?

原因是您随 curl 请求一起发送的 Content-Type header。 WSO2 EI 或 WSO2 ESB 理解各种内容类型 headers 并将读取指定格式的内容(在本例中为 JSON),然后将其传递给底层消息中介引擎。即使服务器将其作为 JSON 消息接受,当消息传递到中介引擎(它执行所有与消息中介相关的工作)时,它也会作为下面的 soap 消息。所以实际上在中介引擎级别,代理服务仍会收到 soap 消息,但在传输级别,我们可以发送任何支持的内容类型。此转换对调用代理服务的用户不可见。所以这就是您可以向基于 SOAP 的代理服务发送 JSON 消息的原因。