HTTP Request Connector(一)

来源:互联网 发布:sqlserver 数据类型 编辑:程序博客网 时间:2024/05/20 20:57

HTTP RequestConnector

HTTP请求连接器提供了最实用的使用外部HTTP服务的方法。在发送HTTP请求时,您可以选择使用什么方法(GETPOST),可能包括一个主体(body)、头(header)、附件(attachment)、查询参数(query parameters)、表单参数和URI参数。然后,连接器接收响应,并将其传递给流中的下一个元素。

该连接器还可以实现HTTPS协议,并通过TLS加密通信,还可以通过基本身份验证、OAuthNTLM或文摘实现身份验证。当使用RAML文件中描述的RESTful API时,请求连接器特别方便。如果您在连接器的配置中引用了APIRAML文件,它会主动向您提供在RAML文件中包含的可用资源和操作,并执行文件中描述的策略。它还将API元数据暴露给Studio,然后可以由DataWeave等其他元素使用,从而使配置更加容易。

连接器还可以将HTTP请求发送到与任何RAML文件没有关联的地址您可以简单地分配一个地址,选择一个HTTP方法,并可选地向您的请求添加额外的参数。


基本用法(Basic Usage

Studio中,将该连接器用作HTTP请求连接器(而不是HTTP侦听器连接器),将其放入流程的流程部分(即除开始之外的任何地方)

drag to process


最小配置Minimum Configuration


下面的示例展示了这个连接器所需的最小配置:

Studio Visual Editor:

连接器实例,提供一个路径(path)和一个方法(method:


此外,您必须引用一个全局元素,如下所示。

创建一个全局元素Creating a Global Element

Studio中的大多数连接器一样,许多配置都封装在一个单独的可重用对象中,然后可以根据您喜欢的连接器的多个实例引用它。

 

当有多个连接器必须使用相同的设置时,具有全局元素变得特别有用,以避免在每个请求中重复相同的配置。Studio中,您还可以在该元素中引用一个RAML文件,然后提供元数据,使其他配置更容易。

 

.全局元素的最小配置

至少,您需要提供一个主机和一个端口


上面的配置执行一个GET请求http://www.example.com/test.

XML Editor:

Studio中的大多数连接器一样,许多配置被封装在一个独立的可重用对象中,该对象位于流外部,然后可以根据您所需要的连接器的多个实例引用。这个元素定义了一个服务器连接到一个特定的网络接口和端口,并处理向它及其响应的出站请求。至少,您需要在全局元素中提供一个主机和一个端口。


连接器实例的最小配置

在您定义了request-config之后,实际上是发送一个HTTP请求,您需要配置一个带有<http:request>元素的流。在连接器实例中,提供一个路径( Path)和一个方法(Method),以及对全局元素的引用

上面的配置执行一个GET请求http://www.example.com/test

HTTP连接器基本配置

Studio Visual Editor:

您需要为您的请求提供一个路径和方法,以及引用一个连接器配置全局元素。请注意,路径字段并不定义完整路径,而是在主机和可选的基本路径中定义的子路径,该路径可以在连接器配置全局元素中指定。您还可以添加任意数量的参数,这些参数可以是头部、查询参数或URI参数。



Property

Description

Display Name

流中的元素的名称。

Request Config

对全局元素的引用。这个字段是必需的。

Path

在全局元素中配置请求的路径(不包括可选的基路径)

Method

发送的HTTP请求类型(GETPOSTDELETE)。可选的,默认是GET

Parameters

您可以在请求中包含附加的参数,比如头部和查询params,单击顶部的绿色加号

如果全局元素引用一个RAML文件,相关的参数将根据所选的资源和方法显示。


如果您在全局元素中引用了一个RAML文件,那么路径和方法字段都为您提供了一个可用选项的下拉列表,这是根据RAML描述的。请注意,您也可以在这些字段中自由地编写自己的值。

全局元素基本配置Global Element Basic Configuration

Property

Description

 Name

配置元素从连接器实例中引用的名称。

Protocol

HTTPHTTPS之间进行选择

Host

发送请求的主机。这个字段是必需的。

Port

发送请求到的端口。这个字段是必需的。

Base Path

主机内的一个基本路径。然后,连接器的实例可以在此路径中指定子路径。

RAML Location

您的连接器可以指向一个RAML文件,这使它更容易配置,因为Studio主动提供基于RAML文件中定义的元数据的智能建议。您可以在您的本地磁盘上引用一个RAML文件,一个在外部URI上,或者您可以通过单击Search RAML在交换中选择一个可用的文件。

Enable Datasense

启用DataSense复选框允许Studio使用DataSense来公开来自RAML文件的元数据,并与Studio中的其他元素进行交互。


注意:如果您首先完成了RAML位置字段,那么所有其他字段都将根据RAML中指定的内容自动填充。

每当您在Studio中打开您的项目时,就会获得来自RAML的元数据,然后保存到缓存中,直到关闭并重新打开项目。

如果修改了RAML文件,您可以通过单击重新加载RAML按钮来刷新它的缓存。

连接器向您的流暴露的元数据可能不会立即更新。在这种情况下,单击元数据浏览器中的刷新元数据按钮。


使用XML编辑器的HTTP连接器基本配置

您需要为您的请求提供一个路径和方法,以及引用一个连接器配置全局元素。请注意,路径字段并不定义完整路径,而是在主机和可选的基本路径中定义的子路径,该路径可以在连接器配置全局元素中指定。作为这个连接器的子元素,您可以添加尽可能多的参数,这可能是头、查询参数或URI参数。

<http:request config-ref="HTTP_Request_Configuration" path="test" method="POST" doc:name="HTTP"/>

Property

Description

doc:name

在flow中元素的名称

config-ref

引用一个可重用的全局元素,该元素包含多个配置参数。这个属性是必需的。

path

在全局元素中配置请求的路径(不包括基本路径)

method

发送的HTTP请求类型(GETPOSTDELETE)。可选的,默认是GET


默认情况下,GETHEADOPTIONS方法不会在请求中发送有效负载(payload)HTTP请求的主体body是空的。其余的方法将消息有效负载(payload)发送为您的请求的主体(body)。

全局元素基本配置

每个HTTP连接器都必须引用一个全局配置元素,该元素位于项目的任何流程之外。这个元素封装了很多常见的配置参数,这些参数可以由项目中的其他连接器重用,并且可以通过连接器的多个实例来引用。至少,您需要提供一个主机和一个端口:

<http:request-config name="HTTP_Request_Configuration"host="example.com" port="8081" doc:name="HTTP RequestConfiguration"/>


Property

Description

XML Sample

name

全局元素的名称,用于在连接器实例中引用。

name="HTTP_Request_Configuration"

protocol

HTTPHTTPS之间进行选择

protocol="HTTPS"

host

用于引用此配置的所有请求元素的主机。

host="example.com"

port

用于引用该配置的所有请求元素的端口。

port="8081"

basePath

发送请求的路径。然后,您可以在连接器实例中指定以下路径下的子文件夹。

basePath="/api/v2"


Child Element

Description

XML Sample

RAML Location

如果您可以访问一个描述您正在连接的APIRAML文件,请在这里显示它的位置。

<http:raml-api-configuration location="t-shirt.raml"/>


以上配置执行一个GET请求到http://www.example.com/test

下面是两个连接相同连接器配置的连接器:

 

<http:request-configname="HTTP_Request_Configuration"host="example.com"port="80"basePath="/api/v2"/>
 
<flowname="test_flow">
    ...
    <http:requestconfig-ref="HTTP_Request_Configuration"path="customer"method="GET"/>
    ...
    <http:requestconfig-ref="HTTP_Request_Configuration"path="item"method="POST"/>
    ...
</flow>

 

第一个连接器示例中发送一个GET请求到http://www.example.com/api/v2/customer。第二个连接器向http://www.example.com/api/v2/item发送一个POST请求。

Mule消息和HTTP请求之间的映射

当一个HTTP请求连接器被执行时,到达它的Mule消息将被转换为生成一个HTTP请求。下面是对Mule消息的每个部分如何生成HTTP请求的解释。

HTTP Request Body

Mule消息有效负载(payload)被转换为一个字节数组(byte array),并作为HTTP请求的主体(Request body)发送。这种行为总是被执行,除非在以下场景中:

 1、Mule消息的有效负载是键和值的映射

  2、该消息具有出站附件 outbound attachments

 

使用内容类型生成请求主体( Request Body): Content-Type:application/x-form-urlencoded

每当消息有效负载(payload )是映射时,连接器就会自动生成带有header Content-Type:application/x-www-form-urlencodedHTTP请求。在有效负载中映射的键和值被转换为HTTP请求正文中的表单参数键和值。


Generate the Request Body with Content-Type:multipart/form-data

每当该消息包含出站附件时,连接器就会自动生成带有Content-Type:multipart/form-data标题的HTTP请求Mule消息的有效负载被忽略,而消息中的每个附件都被转换为HTTP请求主体的一部分。如果您想要创建一个不同的多部件请求,那么可以通过添加添加自定义参数来设置内容类型的头。


HTTP Headers

如果Mule消息中有任何出站属性( outbound properties)到达HTTP请求连接器,这些属性将作为HTTP请求头自动添加。还可以通过HTTP请求连接器的配置显式地添加头。请参阅下面的文档:


 

默认情况下,HTTP连接器使用的Grizzly librariesHTTP请求头部分大小(请求行+)限制在8192字节以下。虽然建议您将HTTP请求头部分保持在这个限制之下,但是您可以通过设置mule.http来覆盖这个限制。headerSectionSize到更大的值(以字节为单位)您可以在包装器( wrapper.conf file中设置这个JVM参数。当您启动Mule运行时,您可以从命令行传递它。
例如,要将HTTP头部分的大小设置为1.6万字节,您可以使用命令启动Mule运行时。/mule -M-Dmule.http.headerSectionSize = 16000

使用Studio可视化编辑器添加自定义参数(Adding Custom Parameters with the Studio Visual Editor

HTTP请求连接器允许您包含以下类型的参数:

·        Queryparams

·        A mapof multiple query params

·        URIparams

·        A mapof multiple URI params

·        Headers

·        A mapof multiple headers

此外,还可以在Mule消息有效负载中发送表单参数,您还可以在您的请求中添加附件,通过添加附件处理器到您的流中。

 

Note

请记住,在使用Studio时,如果您想要访问的API有一个RAML文件,那么在全局元素中引用这个RAML文件就会暴露API的元数据,并且Studio会主动显示API中每个操作的可用属性。

 

查询参数

通过单击【Add Parameter】按钮,您可以向您的请求添加参数。如果您将默认的【 query-param】作为参数类型,您可以添加新的查询参数,并为它们分配名称和值。


以上配置执行一个GET请求到http://www.example.com/test?k1=v1&k2=v2

note:

name和value字段都允许使用MEL表达式。

如果查询参数应该是动态设置的(例如,在设计时,您不知道请求中需要多少查询参数)

然后,您可以将参数类型更改为查询-params,它接受一个数组,您可以为它分配一个返回参数映射的MEL表达式:


对于本例,您必须首先生成一个名为customMap的变量。如果你通过下面的 MEL表达式来赋值一个值:

#[{'k1':'v1', 'k2':'v2'}]

它比前面的示例生成相同的请求,一个GET请求到http://www.example.com/test?k1=v1&k2=v2

query-paramquery-params元素可以组合在一个连接器中。每个请求的参数解析(在当前消息上下文中评估所有的MEL表达式),并按照顺序在请求构建器中指定它们。这允许在必要时覆盖参数。如果相同的参数定义不止一次,则使用最新的值。

URIParameters

当参数应该是路径的一部分时,占位符可以被添加到“path”属性中,每个参数都有一个名称,然后它们必须被一个uri参数引用:

如果您首先将占位符输入到“path”字段中,Studio会自动在参数部分中添加相应的uri-param,为您省去了一些麻烦。

这将执行一个GET请求http://www.example.com/customer/20.

name和value段都允许使用MEL表达式。

动态设置URI参数

如果要动态设置URI参数,可以通过一个返回一个参数映射的MEL表达式来设置:


注意:如果您在path字段中输入值时,会自动添加额外的uri-param参数,删除这些参数,因为它们是由动态uri-params字段所处理的。

对于本例,您需要创建一个名为customMap的变量。如果你将这个变量设置为mel表达式#[{“p1”:“v1”,“p2”:“v2”}],它生成一个GET请求到http://www.example.com/test/v1/v2

与查询参数一样,uri-paramuri-params元素可以在连接器内组合。它们被解析为每个请求(在当前消息上下文中评估所有的MEL表达式),并且在请求构建器中指定它们。这允许您在必要时覆盖参数。如果相同的参数定义不止一次,则使用最新的值。

在任何情况下,在引用URI参数的路径中使用的占位符都应该与请求构建器中URI参数的名称相匹配(在所有的MEL表达式都被评估之后)


Headers

您可以像查询参数一样轻松地将HTTP头添加到请求中


这执行一个GET请求到http://www.example.com/test,添加以下header

1

2

HeaderName1: HeaderValue1

HeaderName2: HeaderValue2


这与通过属性转换器在Mule消息中设置出站属性完全相同。出站属性在请求中映射为HTTP报头。因此,您可以通过在HTTP请求连接器之前添加两个属性转换器来实现相同的功能,一个用于每个需要设置的新标题:


在这两种情况下,响应映射的头部都是在处理完响应后的Mule消息的入站属性。

动态设置headersDynamically Setting Headers

如果标题必须动态设置(例如,在设计时您不知道请求中需要多少额外的头),它们可以通过一个返回一个标题映射的MEL表达式来设置:


对于上面的示例,您首先需要生成一个名为customMap的变量。如果你将这个变量设置为下面的mule表达式:

#[{'TestHeader':'TestValue'}]

它生成一个GET请求到http://www.example.com/test,添加以下header:

TestHeader: TestValue

就像查询参数一样,头和头元素可以在连接器中组合。它们解析每个请求(在当前消息上下文中评估所有的MEL表达式)

按照顺序,它们是在请求构建器中指定的。这允许在必要时覆盖参数。如果相同的参数定义不止一次,则使用最新的值。