来自负载的 Mulesoft HTTP 请求路径

Mule Soft HTTP Request Path from payload

我创建了简单的流程,我在 url 中发送 id,如下所示:

路径:

/api/courses/find/{id}

结果:

 http://localhost:88/api/courses/find/60ee9678070e104b2c57be46

然后我将这个 id 部分设置为 payload。我接下来要做的是调用 REST API 并将此有效负载插入 URL 但无论我尝试什么它都不 return 正确 JSON.

这是我需要的样子:

路径:

http://localhost:1234/api/courses/find/60ee9678070e104b2c57be46

转换消息的结果:

%dw 2.0
output application/json
---
{
    isPublished: payload.isPublished,
    tags: payload.tags map ( tag , indexOfTag ) -> tag,
    "_id": payload."_id",
    dishName: payload.dishName,
    category: payload.category,
    author: payload.author,
    ingredients: payload.ingredients map ( ingredient , indexOfIngredient ) -> {
        "_id": ingredient."_id",
        quantity: ingredient.quantity,
        unit: ingredient.unit,
        description: ingredient.description
    },
    cookingTime: payload.cookingTime,
    sourceUrl: payload.sourceUrl,
    imageUrl: payload.imageUrl,
    price: payload.price,
    date: payload.date,
    "__v": payload."__v",
    id: payload."_id"
}

我试图通过将 id 放入 URI 参数来做到这一点,但它是 URL 的一部分而不是 URI 参数,所以这不起作用,类似这样的事情:

HTTP 请求的请求路径:

/api/courses/find/#[payload]

有谁知道我是否可以像这样在 URL 中插入负载?我在文档中找不到任何相关信息。

感谢您的帮助!

编辑:如果我想为每个方法 GET、POST、PUT、DELETE 创建路径,您能否告诉我它是否可以具有相同的侦听器路径 /api/courses 并且仅在此之后不同HTTP 请求元素(例如 http://localhost:1234/api/courses/ 和方法 POST)或者我必须为每个元素更改它?我想知道,因为我找不到它是否知道它应该根据该流中的 HTTP 请求元素选择流,还是它只选择具有该路径的第一个 /api/courses.

我的理解是你需要为一个HTTP请求设置一个URI参数。请在下面找到一个流程示例,它使用字段 id 设置有效负载,然后使用该字段的值设置 URI 参数。 URI 参数在花括号 ({}).

括起来的 HTTP 请求的路径属性中设置
    <flow name="testUriParamsFlow" >
        <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
        <ee:transform doc:name="Transform Message">
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
                    output application/java
                    ---
                    {
                        id: "123456"
                    }]]>
                </ee:set-payload>
            </ee:message>
        </ee:transform>
        <http:request method="GET" path="/api/courses/find/{id}" config-ref="HTTP_Request_configuration" doc:name="Request">
            <http:uri-params ><![CDATA[#[output application/java
                ---
                {
                    id : payload.id
                }]]]>
            </http:uri-params>
        </http:request>
    </flow>

使用HTTP Wire logging我们可以确认请求替换了 URI 参数作为 URI 的一部分:

GET /api/courses/find/123456 HTTP/1.1