Mendix 6.6 包含一项重要的新功能,可帮助您调用 REST 服务和处理数据。它原定于 Mendix 7,但由于我们的社区对此功能非常热情,我们决定立即发布它!
借助我们的新版本,您可以使用新的微流操作调用 REST 服务。由于 REST 响应通常采用 JSON 格式,因此我们扩展了数据映射文档以处理 JSON 和 XML。
REST 和互联网
表述性状态转移 (REST) 背后的理念与互联网的初始架构非常接近:超文本传输协议 (HTTP)。HTTP 旨在将内容从服务器传输到客户端,反之亦然。在早期,内容通常是文本形式,采用 HTML(超文本标记语言)的形式。内容存储在服务器上,并由地址唯一标识:URL(统一资源定位符)。例如,通过在浏览器中输入 URL,您可以获取网页。或者,当您将文件上传到服务器时,您可以将数据发布到 URL。
如果你概括这个初步想法,你就能理解 REST 的含义。它有 6 个基本要素:
- 州。这是服务器上的资源,以某种内部格式存储。例如:数据库中的产品数据。
- 代表性服务器上的数据并非全部相关。通常需要以客户端可以理解的通用格式进行过滤和提交。数据表示通过互联网发送。几种常见的表示形式是 XML、JSON、HTML 或二进制数据(例如图像或 PDF 文件)。
- 网址. 资源的唯一地址。
- 付款方式。HTTP 请求中的文本动词,用于指示您想要对资源执行的操作。例如:
GET一种资源,POST一种新资源,PUT更新的资源,PATCH进行小改动的资源或DELETE资源。此动词在 HTTP 消息中按字面意义陈述。 - 头。HTTP 标头为消息提供额外信息。例如,
Content-Type: application/json指定消息的表示形式为 JSON 格式。 - 状态码。添加到 HTTP 响应消息的简单数字。例如:200 表示 OK,404 表示
Resource not found.
例如:宠物店
开始使用 REST 的一个简单示例是 Swagger 的 Petstore。这是一个公共 REST 示例,互联网上的任何人都可以提交他们的宠物描述并查看其他人的宠物。
GEThttps://petstore.swagger.io/v2/pet/100 returns a pet.POSThttps://petstore.swagger.io/v2/pet adds a new pet to the store.DELETEhttps://petstore.swagger.io/v2/pet/101 deletes a pet.
在 Mendix 建模者,您可以添加 调用 REST 操作 到微流。您可以指定位置(URL)、HTTP 方法和 HTTP 标头。参见下图:
通过向上述 URL 发出 GET 请求,我们将以 JSON 格式获得 ID 为 100 的宠物表示。在 HTTP 标头中,我们指定在响应中接受 JSON:
请注意,任何人都可以将他们的宠物发布到 swagger,因此如果其他人将怪物放入宠物中,您可能需要尝试另一个号码。如果有人删除了宠物,您可以通过以下方式快速恢复宠物: https://petstore.swagger.io/#!/pet/addPet,单击示例值,然后单击“试用!”;这将添加 ID 为 100 的默认宠物。或者,当然,您也可以使用 调用 Rest 操作 (参见本博客的最后一部分)。
JSON 片段和模式提取
JSON 格式是机器可以理解的语言来表示宠物。我们可以轻松地将 JSON 回复转换为 Mendix 对象,例如在 Mendix 生成的页面。REST 服务通常附带文档,说明如何将数据发送回给您。Pet Store 文档附带一个示例 JSON 代码片段(请参阅 https://petstore.swagger.io/#!/pet/getPetById 带有响应内容类型 application/json).
{"id":100,"category":{"id":0,"name":"test"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}
如果你将此代码片段粘贴到 Mendix “JSON 结构”文档(点击 格式 以及 刷新), Mendix 将提取发回数据的结构:
映射
提取的结构用于 导入映射 文档。映射基本上指定了传入的 JSON 数据应如何转换为 Mendix 对象。映射是 Mendix 并且非常强大,可以将 JSON 或 XML 转换为您可以使用的实体。宠物示例相对简单,但在其他服务中,表示可能会变得相当复杂。 Mendix 允许您以非常直观的方式处理数据复杂性。
- 您可以轻松地从架构中选择要在应用程序中使用的元素。您不必用不想使用的数据结构来污染域模型。
- 您可以将实体拖放到映射上,它们将自动与传入数据耦合。
- 如果你想自定义如何将传入数据转换成 Mendix 通过将微流耦合到映射,即可实现此目的。您可以选择更新现有对象;只需选择一个用于查找对象的属性(键).
- 您可以通过单击按钮来生成 JSON 的实体和关联 自动映射。您不必手动创建它们。但当然您可以自由地进行更改或利用现有的数据模型。例如,您可以创建实体 持久的 在域模型中,因此对象可以直接从数据库读取到页面上的数据网格中。
通过练习映射,您将体会到只需单击几下鼠标就可以轻松处理复杂的数据结构。
直接在 REST 调用中使用映射
您可以轻松地将数据映射与 REST 调用耦合。按照我们的宠物示例:从服务收到的任何宠物都将映射到 PET 实体。您不必编写复杂的表达式来做到这一点,一切都由我们的可视化映射器处理。

我们的映射文档也支持 XML 格式。如果您收到的文本数据格式不是 JSON 或 XML,则可以将结果存储在字符串变量中,以便稍后在微流中对其进行分析。如果您的 REST 调用响应的是二进制数据(例如图像或 PDF 文件),我们将允许您将其存储在 FileDocument or Image 对象。将在后续版本中添加对二进制表示的支持 Mendix.
将宠物送往宠物店
在我们的映射示例中,我们重点关注如何 GET 宠物并映射到实体。还支持其他 HTTP 方法:例如, POST 以及 PUT:它们要求您构建一条要发送到服务器的消息(该消息包含您要发送的宠物的表示)。我们的导出映射文档还支持转换 Mendix 对象转换为 JSON 或 XML。它们看起来与导入映射相同,但箭头当然是相反的!您可以重复使用您在项目中创建的所有 JSON 结构文档,以避免重复工作。对于非常简单的请求,您还可以使用字符串模板来构建 HTTP 消息。尝试将此 JSON 代码段粘贴到 POST 向 https://petstore.swagger.io/v2/pet 发出请求:
{"id":100,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":available"}
结语
如今,作为应用开发者,您无法避免与其他系统的集成。我们通过添加 调用 REST 微流操作. 要处理发送到 REST 服务或从 REST 服务接收的数据, Mendix 支持 JSON 和 XML 表示。映射文档非常直观地处理数据结构,并完全集成到我们的 REST 调用中。
亲自尝试一下,了解集成如何变得强大且有趣!





