MuleSoft从零开始搭建 API(下)
本文,主要介绍的是在开发完成 API 之后,怎么发布上云并监控 API 健康。
STEP4 验证和错误处理
至此,我们已经闯进啊了一个 API 和在第三方客户端测试 HTTP 请求,并且将我们的 API 发布到了 Exchange。现在我们将使用 Studio 来增加验证和一个单元测试。在 Studio 中我们将使用之前创建的脚手架:
- 使用验证模块,验证输入
- 为一个错误条件创造一个错误处理器
STEP4.1 验证
将验证模块中的操作项添加到 API 实现,来确保用户输入合适的API。我们的API很简单,所以我们测试也比较简单。我们将测试在一个可以接受的范围内负载能力的大小。
增加 Validate size 操作到 ”hello“ 项目中。
-
在 hello 项目工作台,打开 hello.xml 如果它并没有被打开的话,确保你的画布的视图是 Message Flow
-
在 Mule Palette 中将 Add modules 中的 Validate size拖拽到左侧栏
截屏2021-11-30 下午4.10.02.png
-
从这个操作展示列表中,拖拽 Validate size到这个画布中,并且拖拽到 Set Payload 右侧,在这个 endpoint 模块的内部
截屏2021-11-30 下午4.11.29.png
-
点击 Validate size展示的 General 配置项
截屏2021-11-30 下午4.12.23.png
-
里面的值进行如下配置:
- Value:点击 fx 按钮将输入模式改编成表达式模式,然后输入 在这个字符输入框中输入:payload 注意结束括号已经给你提供了
- Min:6
- Max:30
-
Error options > Message:The specified message is either too long or too short.
截屏2021-11-30 下午4.15.43.png
-
在这个 Studio 的主菜单,选择 File > Save All 来保存你的变更
-
在画布上右击,选择 Run project hello
截屏2021-11-30 下午4.16.50.png
-
然后你可以在 Console 指示台中看到 hello 已经部署,通过之前 Advanced Rest Client 这个第三方请求工具来访问:
http://localhost:8081/api/greeting

这个演示,是当问候语在我们刚刚 Validate size 连接器中设置的限制范围内的正常行为。
- 右击画布,选择 stop project hello
接下来测试当这个负载过小,通过debugger 来按步执行在错误触发之前 error 情况-
在 hello 项目中,打开 hello.xml
-
点击 Set payload,然后将值变成 : hi
-
在 Mule Palette 中选择 Favorites > Logger 然后拖拽到 Set Payload 和 Validate size 之间。Logger 将会帮助我们停止这个
流程来帮助 debug。
截屏2021-11-30 下午4.24.32.png
- 右击 Set Payload 选择 Add breakpoint
截屏2021-11-30 下午4.26.12.png
- 右击 Set Payload 选择 Add breakpoint
-
右击 Logger 然后选择 Add breakpoint
截屏2021-11-30 下午4.28.59.png
-
右击 Validate size 然后选择 Add breakpoint
-
右击画布,选择 Debug project hello
截屏2021-11-30 下午4.28.59.png
-
可以选择 Remember my decision 然后点击 Yes
8. 打开 REST 客户端,然后发送 /greeting 请求进行测试http://localhost:8081/api/greeting
9. 返回到 Studio 然后注意,在 Set payload 周边的虚线

10. 在画布中,选择 set payload来打开 set payload 看到它的 value 是 hi,2个字符
11. 点击位于debugger窗口上方的黄色箭头标志

12. 再次点击,则会移动到 Validate size 连接器

13. 再点击这个按钮,你会注意一个你定义的 error message 出现在debugger 面板的 error 对象中,增加一个红点虚线来验证 validate size 连接器

14. 紧接着再点击这个黄色箭头按钮,注意,当前的画布已经展示在你的 message flow 顶部,红色的虚线出现在 APIkit Router 周边,导入时添加的脚手架之一。这个 router 处理器也是报错的。
15. 再点击黄色箭头按钮,完成这个流程,注意,Mule debugger 面板现在是空的,因为这个流程已经结束了
16. 在 Advanced Rest Client 中你可以看到 500 Server Error 和 payload 值。
要查看我们定义的错误返回,而不是有效负载,我们需要配置错误处理器。
17. 画布右击,选择 stop project hello
18. 选择 window > perspective > open perspective > mule deign 来退出 debugger 视图。

STEP4.2 错误处理
现在我们将增加一个 error handler 用于我们设置的验证
-
在 Studio Mule Palette 选择 Core > On Error Propagate 然后拖拽到 Error handling 在 get:\greeting: hello-config
截屏2021-11-30 下午4.56.18.png
-
在画布下方 General 选项中,配置这个 error handler:
- Display Name: On Error Propagate
- Settings Type:点击查询图标,从这个下拉的菜单中选择 VALIDATION:INVALID_SIZE
-
不要改变别的默认值
截屏2021-11-30 下午4.58.54.png
-
拖拽 Set Payload 连接器到新的 On Error propagate error handler
-
配置一个新的 Set Payload 连接器:
- 双击 Set Payload 打开 General 选项
-
在 Settings > Value: 将 payload 替代成 error.description
截屏2021-11-30 下午5.01.31.png
-
点击 File > Save All 来保存你的变更
-
增加端点到 Set Payload、Logger 和 Validate size 如果你之前把这些端点移除了的话。
-
右击画布,选择 Debug project hello
-
在这个程序部署之后,发送 http://localhost:8081/api/greeting 请求进行测试,然后通过黄色箭头观察每一步骤
-
当你触达到 Set Payload 的 On Error propagate,你可以看到我们在 Validate size 中创建的错误消息的 payload 就是当前 payload 对象
中
截屏2021-11-30 下午5.06.50.png
-
当你执行到 message flow 最上方的 APIKit Router ,你可以看到错误信息被原始的 payload 中的
Hi 替代。
![[图片上传中...(截屏2021-11-30 下午5.11.40.png-af34bc-1638432054241-0)] -
当你运行完所有的步骤,并且观察请求的返回情况,你可以看到 500 Server Error 伴随着错误信息 被一起返回
截屏2021-11-30 下午5.11.40.png
-
把 payload 重新设置成原先的 “Today the greeting is Hello”
-
设置原先Studio视图,Window > perspective > open Perspective > Mule Degisn
接下来我们将发布我们的修改后的 API。
STEP4.3 发布修改后的 API
向 Exchange 中提交改进后的 API:
- 在 Studio 的 Package Explorer ,右击 hello 项目
- 选择 Anypoint Platform > Publish to Exchange
- 确保选择跟你之前一样选择同一个 business group。然后选择 Finish
- 版本号是自动给你增加的
- 在 project type 中选择 Example
-
点击 Finish
Studio 想你展示最新发布的 API 版本链接,可以复制并分享。
截屏2021-11-30 下午5.24.19.png
接下来,我们将部署发布我们的 API,这样任何人都可以发送一个请求给 /greeting endpoint.
STEP 5 部署 API 到 CloudHub
到这一步,你已经完成了一个在 Studio 中包含你心的 API 接口的Mule app 的创建和测试。接下来,我们将把这个 API 部署到 CloudHub。
首先,我们将创造一个 API 代理,可以使我们能够在 Exchange 上测试我们的 API。
然后,我们将设置限速策略,来保护我们的 API 免受 denial-of-service 攻击。
STEP 5.1 部署 API 到 CloudHub
要以 Mule app 的形式来部署这个 api:
- 在 Studio 的 Mule Design 透视图中,右键单击Package Explorer 中的 hello 项目,然后选择 Anypoint Platform > Deploy to CloudHub

-
如果出来一个弹框,你就输入你 Anypoint Platform 的用户名和密码,点击登陆。
-
你必须要在你的账号沙盒中去部署这个 API。如果你看到 Design 环境选项而不是 Sanbox:
- 选择 Design 来启动切换环境对话框
- 选择 Sandbox
-
点击
截屏2021-12-02 上午11.05.09.png
-
输入 hello-greeting-firstname-lastname;每个 app 和 api 名称在 CloudHub上都必须是唯一的。我这个样例,将使用 hello-greeting-c-zh。
-
确认这个 Deployment Target 是 CloudHub
-
不要改变其它默认选项
-
点击 Deploy Application,在短暂的停留之后,一个窗口将展示这个部署状态。
截屏2021-12-02 上午11.08.08.png
-
选择 Open in Browser来查看Runtime Manager显示的状态
截屏2021-12-02 上午11.08.55.png
当这个项目成功部署之后,Runtime Manager器将会显示的状态为 Started
-
测试这个 API 部署,从 Advanced Rest Client(或浏览器)发送请求:
截屏2021-12-02 上午11.13.09.png
- 点击 Started 来显示 App url
- 复制这个值: hello-greeting-c-zh.us-e2.cloudhub.io
- 在 Advanced Rest Client 中发送这个你刚刚复制的 URI 请求,确保这个 API endpoint 是 /greeting
GET
http://hello-greeting-c-zh.us-e2.cloudhub.io/api/greeting
4. 如果你看到的是 200 OK,并且这个你定义的响应内容“Today the greeting is Hello.” 被返回了,说明你创建的这个 API 已经发布成功了。
现状,我们需要为这个 API 创建 API 代理应用,来限制访问保护我们的服务。我们需要加入限速策略,这个是可以在 API 运行过程中配置的。
STEP 6 操作已发布的 API
Mulesoft 提供了一些工具来帮助你管理已经发布的 API。

检查你 API 的健康:
- 从 Anypoint Platform 入口中进入,Runtime Manger
- 切换到 Sandbox 环境
- 点击任意一行
如果你看到一些代理请求的测试,你可以 Mule messages 界面中看到流量信息
另外,你还可以在 Runtime Manager 中获得以下信息:- 点击 Logs 来看查看所选程序在过去 30 天的每笔交易
-
点击 Settings 来查看这个程序的配置,你同样可以在 Setting 页面配置监控和可视化工具
截屏2021-12-02 上午11.52.44.png
深入探讨
你 API 执行的工作越多,Runtime Manager 可以提供的数据就越多。 Runtime Manager documentation .具体可以查看 Runtime Manager 文档。