跳到主要内容

发布 REST API Mendix

发布 REST API Mendix

发布 REST API Mendix

应用程序编程接口或 API 已成为当今网络上两台计算机或系统相互通信的标准方式。我在这里谨慎使用“标准”一词,因为如果您从事过 API 开发,您就会知道它们在不同项目中往往是特殊且独特的。

您遇到的大多数 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 的世界。

选择你的语言