OData API 中的 Mendix | Mendix

跳到主要内容

OData API 中的 Mendix

OData API 中的 Mendix

在过去的几周里,我一直在写有关 REST API 及其工作原理的文章 Mendix。今天我将讨论一种略有不同但至关重要的 REST API 类型:OData。

什么使得 OData 如此特别?

OData 是一种 REST API,但它标准化了 REST API 所没有的某些功能。首先,OData 支持查询和过滤请求本身。一旦实施,OData 还会创建对应用程序数据更改的功能审计跟踪。如果试图用一句话来总结 OData:OData 是构建 REST API 的最佳实践,因此您可以更好地利用 REST 的功能。

下面是摘自 OData.org 官方网页的一段话,他们用自己的话解释了什么是 OData:

“OData(开放数据协议)是一种 已获得 ISO/IEC 认证, OASIS 标准 它定义了一套构建和使用 RESTful API 的最佳实践。OData 可帮助您在构建 RESTful API 时专注于业务逻辑,而无需担心定义请求和响应标头、状态代码、HTTP 方法、URL 约定、媒体类型、有效负载格式、查询选项等的各种方法。OData 还提供了跟踪更改、定义可重用程序的函数/操作以及发送异步/批处理请求的指南。” — OData网站

OData 数据集可用于其他工具,如 Microsoft Excel 和 Power BI。 Mendix 支持 OData 版本 3,返回 Atom XML 格式的数据,以及 OData 版本 4,它以 JSON 和 XML 格式返回数据,具体取决于客户端请求的格式。

我们如何在 Mendix?

In Mendix Studio Pro 中,创建 OData API 相对容易。与常规 REST 服务类似,Studio Pro 还为我们提供了直接从域模型生成 API 的选项。

一旦我们创建了 OData 服务,我们只需将您的应用部署到云环境即可将其发布到 Datahub。Datahub 是一个开放元数据目录,基本上意味着您可以在您的 Mendix 在 Datahub 上注册 OData 服务后,您就可以开始使用 OData 应用程序。它还有助于发现和理解 API 本身。

但是,您不必使用 Datahub 即可在 Mendix,您仍然可以通过下载 API 本身的 $metadata 契约手动完成此操作。

一旦在 Datahub 中注册,将数据集成到另一个 Mendix 应用程序非常简单,只需将远程实体(数据中心注册的 OData 服务)拖放到您的域模型中即可。

在写这篇文章的时候, Mendix 刚刚发布了 Studio Pro 9.17.0,它在使用 OData 方面有一些惊人的新改进 Mendix,下面是 9.17.0 版本说明摘录:

我们在 Studio Pro 中扩展了 OData 功能,允许您 使用 OData 包装服务、API 和数据库 并使其更容易 建立连接器 访问外部数据。然后可以轻松发现并使用 OData 服务 数据中心目录。新功能包括能够[将非持久性实体发布为 OData 资源](](https://docs.mendix.com/refguide/wrap-services-odata/#npe-published-odata),以及 使用微流定义如何检索和存储资源。我们还提供 OpenAPI的 轻松签约 测试已发布的 OData 资源.

访问 API 文档

OData 的一个非常强大的功能 Mendix 一旦您的应用程序在本地部署或运行​​,您就可以访问已发布的 OData 服务的 API 文档 你的应用的基本 URL + ‘/odata-doc/’.

例如,在端口 8080 上运行的本地应用程序上的文档位置为:

https://localhost:8080/odata-doc/

对于 OData,OData $metadata 合同和 OpenAPI 合同均可在此处获得。您甚至可以使用 OpenAPI 页面来测试对您的 API 的 OData 调用。

OData 实践

下一节将是关于如何在您的 Mendix 应用程序,在Datahub上注册该服务,然后在另一个应用程序中作为远程实体使用数据 Mendix 应用程序。

场景:

想象一下你创建了一个电子商务 Mendix 应用程序。在您的应用程序中,您有一个包含订单的实体,这些订单将传递给仓库员工以完成订单并将其发送给客户。当工人存货时,他们会在 excel 表中对每种产品的存储位置进行分类。目前,仓库从 Excel 表中打印出订单,并在自己的 excel 文档中查找物品的存储位置,这效率低下并减慢了整个流程。

您现有的应用包含敏感的客户信息,因此您不想将这些信息暴露给外部仓库工作人员。您决定创建一个单独的应用,允许工作人员查看订单和完成订单所需的物品,并决定使用 OData 和 Mendix 数据中心。

从域模型生成 OData API

在我们的电子商务应用程序中,我们在域模型中有以下实体:$Order 和 $Orderline,它们具有一对多关联。

当我们右键单击某个实体(在我们的例子中是 $Orders)时,它会给我们“公开为 OData 资源”的选项

当我们单击此按钮时,它会询问我们想要在项目中哪里创建新的 API,以及想要如何命名该资源。

然后,系统会自动带我们查看生成的资源并编辑其属性。我们可以保留这些属性,因为我们只需要仓库员工查看订单信息,而不应允许他们编辑订单详细信息。

虽然我们没有使用这些功能,但我认为我应该指出,Datahub 不再是只读的—— 现在,除了读取数据之外,您还可以插入新记录、更新和删除。

然后,我们可以将 $Orderline 实体添加到资源中,为此,我们可以单击实体下的添加按钮,浏览 $orderline 并单击确定

一旦我们做 Studio Pro 识别出这些实体是相关的,并询问你是否要发布它们之间的关联,单击是。

一旦我们这样做,你会注意到控制台中的一些错误,如下所示:

我们需要确保 $Itemname 和 $OrderNumber 不能为空,因为它们是用作 API 的键。

我们需要向 $ItemName 添加唯一性验证规则,我们可以在域模型中执行此操作

将 OData 资源发布到 Datahub

这部分非常简单,只需将您的应用部署到云环境即可!任何人都可以使用,从免费云到任何其他托管解决方案 Mendix 提供。

您在 Mendix cloud 将自动注册 — 这意味着您的 API 也将自动更新。这可确保文档始终是最新的,并且始终与您要连接的环境相关。目录将向您显示测试、验收和生产中正在运行的版本,因为我们提供了在 API 上使用语义版本控制的功能。

如果你没有在 Mendix 在 Cloud 中,您可以使用目录 API 在您自己的 CICD 流程中自动注册部署。或者,您也可以在数据中心目录中手动执行此操作。

对于这个例子,我将部署到 Mendix 免费云。一旦您的应用部署完毕,您将收到一封来自 Mendix Datahub 告诉您,您的新 OData 资源已自动在目录中注册。

从数据中心使用外部实体

在我们的新应用程序(针对仓库工人的应用程序)中,我们有一个名为 Product 的表

我们希望在此模块中包含发布到数据中心的 $Order 和 $Orderline 实体。

在域模型中,转到右侧的数据中心窗格,然后搜索已注册服务的名称(如果您部署到免费云,则需要在过滤器上启用开发环境)

找到您的服务后,只需将两个实体拖入新应用程序的域模型中,Studio Pro 将处理剩下的事情。

现在,您可以随意在应用程序中使用 $order 和 $orderline 数据!做得好!

需要考虑的一些事项

记住谁应该能够访问您应用中的信息非常重要。在任何应用中使用远程实体时,请务必检查应用的安全性。

选择你的语言