您遇到的大多数 API 都遵循一组称为表述性状态转移(简称 REST)的规则。在这篇博客中,我将重点介绍 REST API 及其在 Mendix.
现在代表什么?
简单来说,REST 是一组控制数据传输的“规则”或协议。当 API 遵循这些规则时,我们将其称为 RESTful API。REST 一词是由 Roy Fielding 在其 2000 年发表的博士论文“架构风格和基于网络的软件架构的设计”中创造的。别担心,您不必阅读他的论文即可理解 RESTful API——它们已成为当今网络上系统之间传输数据的实际方式。
那么这些规则是什么?简而言之,它们在不同的 API 之间有所不同,但一些普遍接受的标准有助于使 API 变得 RESTful:
- 它将实体或资源组织成唯一的 URIURI 代表统一资源标识符。它们由两部分组成——网络位置和您尝试访问的资源。网络位置通常是网站 URL,而资源则是网站保存的数据表。
- 这是 无国籍。这意味着您可以按任意顺序调用任何 API,只要您为其提供所需的正确详细信息即可。它也适用于高性能应用程序,因为服务器不需要存储客户端的会话数据。
- 它用 HTTP方法。RESTful API 有不同的类型或 HTTP 方法。您想要与数据交互的方式决定了要使用哪种类型的方法。(的GET 检索数据, 解决方案&帖子 创建数据, 补丁 更新数据, 删除 破坏或删除数据,还有更多,但这些是*主要的*)
- 数据有效载荷的格式为 JSON or XML。大多数 REST API 会将数据格式化为 JSON 或 XML 有效负载。其他格式包括 HTML、标记、图像和文档(当 API 支持多种有效负载格式时 — 您可以使用“接受”页眉)
如果你有兴趣了解更多关于 REST 的历史和标准,你可以阅读更多关于它们的内容 维基百科上的数据.
消费 VS 发布
在 API 开发中,发布 API 供他人使用和自己使用之间存在差异。 Mendix 允许您同时执行这两项操作,您可以使用其他系统的 REST API 并发布您自己的 API,所有这些都在同一个应用程序中完成。有些应用程序甚至会调用它们自己公开的服务,这是它们架构的一部分。
由于我之前的文章是关于消费的,所以在这篇博客中 我将讨论发布 REST API in Mendix.
这里值得一提的是 Mendix 还支持 OData API 开箱即用,在某些情况下具有许多优势,并且具有一些强大的过滤器,如跳过、过滤、排序和选择。但是,这篇文章是关于标准 REST API 的,我更愿意在下一篇博客中介绍 OData — — 因为这是一个广泛的主题,我想详细介绍它。
创建公开的 REST 服务
学习某件事的最好方法是实践——因此本节将是关于如何发布 REST API 的实用指南。为了使用一个简单的用例,我将向您展示如何创建一个简单的 API 集合——与我已经构建的简单电影目录应用程序进行交互。

如您所见,该应用只是一个主页,显示电影标题列表和该电影的 IMDB 页面链接。让我们用数据填充它,这样我们就可以与之交互了。

如果我们想要公开领域模型中实体的数据,我们可以简单地选择该实体,右键单击它,然后选择“公开为 REST 资源”

它会要求您在项目中创建一个服务,但您可以选择在项目的任何模块中创建一个新服务。在这个例子中,我将我的服务命名为 Movielist。
然后,您需要确定一个关键属性。仅当您想与特定数据交互并使用 HTTP 方法(如通过密钥获取、Patch 和 Delete)时才需要这样做

单击“确定”后,Studio Pro 将处理其余部分并生成将您的实体作为 REST API 提供服务所需的所有映射和逻辑。
此时,您可以在本地运行您的项目,并通过 Postman 或其他 API 测试软件与 API 交互。
一旦您的应用程序运行,您的新服务将可访问(在您的本地开发机器上),并且您将能够在 {Your_app_URL/api-doc/} 上看到您应用程序已发布的所有 API 的摘要,在我的示例中为: http://localhost:8080/api-doc/
使用 Postman 测试 API
一旦您的应用程序运行并且您 Postman 安装并在同一台机器上打开后,您可以通过双击来打开 Studio Pro 为我们生成的 GET 方法的详细信息。
您会注意到,有一个名为示例位置的字段。这是一个示例,因为它使用了应用程序本地副本的本地主机和运行时端口。这对于 Postman 来说很合适,因此我们可以复制此 URI 并在那里使用它。

在 Postman 中创建一个新请求,并将 URI 粘贴到请求 URI 字段中,然后单击发送。

您应该会在下面的窗口中看到返回的结果,格式为 XML。请注意,我们还收到了一个状态字段,即 200 OK。这意味着请求已成功处理。
自己动手
听起来很简单——但如果我想更好地控制服务功能怎么办?好吧,您不必依赖 Studio pro 为您生成它。您还可以从头开始创建 API,并根据自己的喜好指定每个细节。
上面我提到,我们创建的自动生成的服务将以 XML 格式返回数据。这在大多数情况下都很好,但是如果您想以 JSON 格式返回结果怎么办?
我们可以打开处理此端点逻辑的微流。在本例中,它被称为“Movies_Get_All”

目前,微流只是检索所有记录并返回它们。转换为 XML 的操作由连接到名为“Movies_Export”的 REST 服务的导出映射处理。
更改返回类型 我们可以 使用“Accept”标头 值为“应用程序/JSON正如我上面提到的。
无需重新运行您的应用程序,请在 Postman 中再次测试它,无需更改除添加“Accept” - “Application/JSON”标头之外的任何细节。
如果一切顺利,您将收到 JSON 格式的有效负载。请注意,服务的响应时间减少了近 400 毫秒(毫秒),这是 API 响应时间的一个显著改善。这是因为 JSON 是专门为数据传输而设计的。您可以使用优化最佳实践来微调服务以获得更快的响应时间,例如 应用索引 以加快数据库检索时间。

从头开始构建
您可以更进一步,从头开始创建 API 的所有组件。我们现在可以尝试为这个公开的服务构建一个新资源,它将特别欢迎用户。
首先,单击公开服务的资源下的“添加”,为新资源命名 - 我将我的命名为“hellothere”,然后单击“确定”。

接下来,我们需要为该资源创建一个操作。选择新资源后,单击“操作”下的“添加”。
我们将方法保留为 GET,并且不会改变操作路径 — 我们只需要提供一个微流来处理逻辑。单击“选择”,选择您想要流程的位置,然后单击“新建”,我使用了自动生成的微流名称“GetHelloThere”。
打开流程,然后双击微流端点,这样我们就可以将数据负载指定为自定义 JSON 字符串。
'{''问候'':''https://www.youtube.com/watch?v=eaEMSKzqGAg”}'
注意引号 围绕问候语和 Youtube 链接的 JSON 键值对。 这些不是双引号,而是两个单引号。这是对字符串进行转义,因为 Studio pro 通常将引号解释为字符串变量中的中断, 这指示 Studio pro 在响应中包含引号.
现在我们可以重新运行我们的应用程序并在 Postman 中测试新服务,如果一切顺利,我们应该看到我们的自定义有效负载返回 200 OK 状态.

搞定!
现在你已经了解了开始使用以下工具创建你自己的 REST API 所需的一切 Mendix。如果您想了解更多信息,例如为您的服务添加安全性、身份验证或自定义标头,请务必访问 academy.mendix.com 并进行学习。请留意我的下一篇文章,我将在其中深入介绍 OData 的世界。