RAML 模拟服务 POST 请求在 Mule 设计中心显示 404 错误

Posted

技术标签:

【中文标题】RAML 模拟服务 POST 请求在 Mule 设计中心显示 404 错误【英文标题】:RAML mocking service POST request showing 404 Error in Mule design center 【发布时间】:2018-08-13 09:01:02 【问题描述】:

我正在使用模拟服务功能为其中一个 POC 构建和测试 API 设计。通过模拟服务从设计中心发布消息时,我收到 HTTP 错误代码 404。

另见附图:

不带 URI 参数的 GET、PUT 和 POST 请求都可以正常工作,但每当我尝试使用 POST 方法显式传递特定 gid 或 cid 时,它就会显示上面的错误。

我正在附加 RAML 文件:

https://forums.mulesoft.com/storage/temp/6224-test.txt

我已阅读文档并了解我们可以在使用模拟服务测试 API 时传递任何参数值。

能否请您帮我查一下,为什么带有特定 gid 或 cid 的 POST 请求会返回错误代码?

【问题讨论】:

您能澄清一下您的问题吗?目前尚不完全清楚您要达到的目标。我已尝试回答您的问题,但我不完全确定这是您的问题,因为目前的描述并不完全清楚。 【参考方案1】:

根据附加的截图,您正在尝试将某些内容发布到 API 模拟服务的根路径。

而不是删除参数并将 HTTP POST 请求发送到如下 URL:

https://mocksvc.mulesoft.com/mocks/29b2eb87-675e-4aa2-8ae3-c5d13e99e441/

请尽量保持 URI 格式正确:

https://mocksvc.mulesoft.com/mocks/29b2eb87-675e-4aa2-8ae3-c5d13e99e441/groups/gid/channels/cid/chatthreads

在此 URL 中,您只需将花括号中的 gid 和 cid 参数替换为实际值即可。

使用正确格式的 RAML 文件和 URI,例如以下示例:

https://mocksvc.mulesoft.com/mocks/29b2eb87-675e-4aa2-8ae3-c5d13e99e441/groups/10/channels/5/chatthreads
https://mocksvc.mulesoft.com/mocks/29b2eb87-675e-4aa2-8ae3-c5d13e99e441/groups/10/teams

我收到“204 无内容”:

但是当我删除参数并尝试在错误的路径上执行 HTTP POST 时,我得到“404 Not Found”:

根据您提供的屏幕截图;您的 HTTP 请求中的资源路径不完整。这可能会导致 HTTP 错误代码“404 Not Found”。

请确保在 API 控制台中设置了资源的完整路径。这需要能够识别您要发布(创建)的资源。

有关在资源名称中使用特殊字符(如“-”或“$”)的详细信息;请参阅raml-js-parser。 API Designer 正在使用此解析器。

目前仍然存在与处理特殊字符(如“-”)相关的未解决问题。请在 raml-js-parser 的 github 仓库中查看相关的 bug 报告:Resource name is invalid: illegal character #129。

我建议不要在资源名称中使用特殊字符。 (尽管当前的 RFC 标准最终确实允许使用 '$')

据此;资源名称“$ref”似乎在您的 RAML 中引起问题。请考虑提交bug report for the API designer in their github repository。但是这个问题也可能是由解析器引起的......

【讨论】:

我正在尝试 POST mocksvc.mulesoft.com/mocks/739d853a-0af1-4357-9f40-ad4644a3cdfc/…,但它显示 404 not found 错误。 你到底想用“/$ref”实现什么?美元符号最终被认为是一个特殊的字符... 我想调用developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/… doc 中给出的 POST /groups/id/members/$ref API。通常有几个 API 我正在为它们创建 API 规范。有很多 API在使用 $ref 作为 URI 的 microsoft graph 中。 这可能是错误报告的一个很好的论据。如果在 Microsoft API 中经常使用“$”字符,那么您可以期待快速的反馈。也可能有一种解决方法...将“$”转义为 URI“%24”中的 unicode 字符,或者可能使用 html 转义序列“$”。虽然我找不到让它工作的方法......我无法让它工作,但它实际上可能就这么简单......我认为如果你在正确的地方寻求帮助,他们会帮助你。或者至少告诉你这是一个错误还是有一个可行的解决方案。

以上是关于RAML 模拟服务 POST 请求在 Mule 设计中心显示 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 mule 中手动解析 RAML 文件的简单方法是啥?

使用 RAML 在 HTTP 请求中发送多个文件

Mule 应用程序不断触发错误的流程 - 可能的 RAML 问题

如何在 RAML 中设置多个示例请求及其响应

如何在 Anypoint Studio 项目中更改 RAML 版本

Anypoint Platform RAML模拟服务中的响应标头“Content-Type”不正确