什么是GPT-4?完整指南
如何通过6个简单的步骤创建MySQL REST API
根据 StackOverflow 2022 年的调查,46% 的专业开发人员将 MySQL 评为了他们工作区中最受欢迎的数据库。身为程序员,我们不应为那些现成的、经过充分测试且可靠的代码而重复编写,这无疑是低效的。
然而,在 REST API 的领域中,这一问题依然存在,尽管其实现过程往往机械且重复,但错误和疏忽却时有发生,且代价高昂。原因如下:
- 最终用户并不在意 API 的具体实现方式,因为每个项目从零开始打造 API 并不能带来竞争优势。
- API 在实施和部署阶段若存在错误和疏忽,可能会因安全漏洞和性能问题而付出高昂的代价。
- 重复构建一次性 API 意味着它们无法通过一个统一的平台进行管理,除非团队决定投入更多的时间和精力来打造自定义的管理解决方案。
幸运的是,对于程序员而言,DreamFactory 平台能够轻松地帮助您的团队解决这些问题,以及更多麻烦。它通过为 API 文档、生成和安全性提供集中式解决方案,让构建、保护和部署 MySQL 数据库的 REST API 变得轻而易举。在本教程中,您将了解到为 MySQL 数据库构建、保护和部署 REST API 是多么简单快捷。
什么是 MySQL REST API?
MySQL API 是一套包含函数、协议及工具的集合,它使开发人员能够从他们的应用程序或脚本中,以编程的方式与 MySQL 数据库进行交互。
这套 API 为应用程序提供了一种途径,使其能够向 MySQL 数据库发送查询、检索所需数据、修改数据以及执行各种数据库相关操作。它作为应用程序代码与数据库服务器之间的桥梁,确保了两者之间的无缝通信和数据操作。
MySQL 提供了多种 API,以满足不同需求,其中常见的包括 MySQL Connector/ODBC(适用于ODBC环境)、MySQL Connector/J(专为Java设计)以及MySQLi(特别为PHP打造)等。每种 API 都针对其特定的编程语言或框架进行了优化。
为什么 MySQL REST API 如此重要?
MySQL REST API 在软件开发中扮演着至关重要的角色,它极大地促进了应用程序与 MySQL 数据库之间的交互。
这些 API 起到了“中介”的作用,它们简化了数据库操作的复杂性,为开发人员提供了一个标准化的接口。其重要性在于,它们使得应用程序能够高效地存储、检索、修改和管理数据。
MySQL REST API 提供了与多种编程语言和框架的兼容性,这意味着开发人员可以自由选择他们熟悉的工具来与 MySQL 进行交互。此外,这些 API 还通过提供诸如准备好的语句和输入验证等功能来增强安全性,从而有效防范 SQL 注入等常见的安全威胁。
在性能方面,连接池和缓存等优化功能显著提升了数据库交互的效率。MySQL REST API 的可移植性意味着,当应用程序需要迁移到不同的数据库系统时,无需对代码进行大幅修改。同时,这些 API 的可扩展性使其能够轻松应对工作负载的增加。
MySQL REST API 还受益于 MySQL 开发人员社区的广泛支持,这意味着开发人员可以获得丰富的资源、库和工具,以帮助他们更有效地使用这些 API。
如何创建 MySQL REST API
DreamFactory 可以为多种数据库生成 REST API,其中包括 MySQL、Microsoft SQL Server、Oracle、PostgreSQL 和 MongoDB。
1. 使用DreamFactory
为此,您需要执行以下步骤:首先,登录到 DreamFactory 的管理界面,然后在界面中导航到“Services”部分。接着,点击屏幕左侧的“Create”按钮,进入服务创建的流程。在服务创建界面中,您需要选择“API 生成数据库”这一选项,并从数据库选项列表中挑选出 MySQL,以此来确定要创建的 MySQL 服务类型(请参见下面的屏幕截图)。
接下来,系统会要求您输入一些基本信息,包括名称、标签和描述,这些信息会出现在屏幕截图的下方区域。其中,标签和描述主要用于管理界面中的参考和识别,而名称则具有特别的重要性,因为它将作为 API URL 的一部分,稍后您就会看到这一点。
最后,请点击“Config”选项卡。在这个页面上,您需要填写数据库的连接凭据(请参考下面的屏幕截图)。这些信息对于您来说可能并不陌生;您需要提供数据库的主机名、用户名、密码以及要连接的数据库名称。
此外,系统还允许您选择性地指定其他配置选项,例如驱动程序参数、时区设置以及缓存偏好等。不过,在本教程中,我将仅关注必填字段,并保留所有可选功能为默认设置。
获取到所需的数据库连接凭据后,您只需点击屏幕底部的“Save”按钮,令人难以置信的是,REST API 就已经被成功创建了!
2. 查看 Swagger 文档
在创建 API 的同时,DreamFactory 还会为您的 API 自动生成一套全面的交互式 Swagger 文档。要访问这些文档,您只需点击管理界面顶部的“API Docs”选项卡,然后按照名称选择您刚刚创建的新服务。一旦进入,您将发现多达44个终端节点可供使用,这些节点支持执行存储过程、进行CRUD(创建、读取、更新、删除)操作、查询视图等多种功能。值得注意的是,以下屏幕截图仅仅展示了新生成的 MySQL REST API 端点中的一小部分!
3. 创建角色和 API 密钥
DreamFactory 所生成的所有 API 都至少会受到 API 密钥的自动保护。在身份验证方面,您可以选择使用基本身份验证、单点登录(SSO)或目录服务(如 LDAP 和 Active Directory)。此外,您还可以将每个 API 密钥和/或用户与一个特定的“角色”相关联,这个角色将精确决定用户能够访问哪些服务。更进一步,您还可以将交互限制在特定的数据库表或表集合、特定的端点,甚至是对允许的 HTTP 方法进行限制。
在 API 的开发和集成过程中,保护那些代表 API 与 MySQL 数据库进行交互的用户是至关重要的。
现在,让我们以一个实例来说明如何创建一个新角色,这个角色将关联的 API 密钥限制为在新创建的 MySQL API 中以只读方式与单个表进行交互。为此,请按照以下步骤操作:首先导航到“Roles”选项卡,并点击“Create”按钮。接下来,您将看到类似下面屏幕截图中的界面。在截图中,我已经为这个角色指定了一个名称和描述,并通过勾选“Active”(活动)复选框来激活它
然后,请点击“Access”选项卡。在这里,您可以定义角色能够执行的操作。在下面的屏幕截图中,您可以看到我已经将角色的权限限制为只能与 MySQL 服务交互,并且在该服务中,角色仅能通过 GET 方法与“_table/employees*”终端节点进行交互。一切已锁定,确保安全!
单击“Save”按钮以保存所创建的角色。接下来,我们的任务是创建一个新的 API 密钥,并将这个密钥与我们刚刚创建的角色进行关联。为了完成这一步,请按照以下操作进行:首先,点击位于 API 类型下拉列表下方的“API 密钥”选项卡;其次,在 API 密钥列表中选择一个(如果是首次创建,则直接操作即可);然后,点击“+”按钮以新增一个 API 密钥。在新增 API 密钥的界面中,为您的应用程序分配一个具有描述性的名称和详细的描述,确保将其状态设置为“Active”。然后,在角色分配部分,选择我们之前为 MySQL 设置的默认角色,就像我在下面的屏幕截图中展示的那样。
关于应用程序位置设置,如果您打算通过 Web 应用、移动应用或其他 Web 服务来与 API 进行交互,那么您应该选择“无需存储”这一选项。这意味着 API 密钥将不会与特定的设备或位置进行绑定,从而提供了更大的灵活性。
点击“Save”按钮后,您将会被带回到 Apps 的索引页面。在这个页面上,您将能够看到刚刚创建的新 API 密钥。为了方便日后使用,建议您将这个密钥复制到文本文件中保存起来!
4. 为您的 MySQL API 配置 CORS
在能够从 DreamFactory 管理界面外部成功测试 API 之前,我们还需要完成一个关键的配置步骤,那就是为新 API 启用 CORS(跨域资源共享)。为了操作方便,您可以选择使用默认的 CORS 设置,就像我在下面的屏幕截图中所展示的那样。这样的设置将允许来自所有网络地址的 API 请求通过,从而方便您进行测试和集成工作。
5. 测试 MySQL REST API
完成 API 的生成、API 密钥的创建与角色的关联,以及 CORS 的配置之后,您就可以着手通过客户端与 API 进行交互了!我个人在 MacOS 系统上倾向于使用 Insomnia 来进行 HTTP 测试,当然,Postman 也是另一个广受欢迎的选择。
在以下的屏幕截图中,我展示了如何使用 Insomnia 发起一个 GET 请求,以访问 /api/v2/_table/employees
这个终端节点。
值得注意的是,我们已经为此 API 密钥设置了权限限制,即仅允许使用 GET 方法与 /api/v2/_table/employees/*
端点进行交互。因此,如果我们尝试通过 POST 方法向该表发送数据,将会收到一个 401(未授权)状态码的响应,正如以下屏幕截图所展示的那样。
创建 MySQL API 的其他途径
显然,DreamFactory 并非创建 MySQL REST API 的唯一选择。尽管手动编码的方式耗时更长且难度更大,但它仍然是构建此类 API 的另一种可行方法。然而,在手动开发 API 的过程中,开发者还需关注 API 的安全性等其他问题。以下是一些关于如何着手手动编写 API 的简要建议。
1.安装并配置 Web 服务器、PHP 及 MySQL
构建 MySQL REST API 的首要步骤是搭建一个 Web 服务器环境。您可以选择 Apache 或 Nginx 等 Web 服务器来处理客户端的 HTTP 请求,并返回相应的内容作为响应。同时,您还需要在服务器上安装 PHP,这是一种流行的服务器端脚本语言,能够与 MySQL 数据库进行交互,以实现数据的检索或存储。此外,MySQL 作为关系型数据库管理系统,能够在表中存储和管理数据。当这些组件全部安装并配置完毕后,您就可以开始着手构建 REST API 了。
2. 设计并构建 MySQL 数据库与表,以存储通过 API 公开的数据
数据库是数据的集合,这些数据以结构化的方式(如包含列和行的表)进行组织。MySQL 作为一种流行的关系数据库管理系统,允许用户创建并管理这些数据库和表。
在 MySQL 中新建数据库,您可以选择使用 MySQL 命令行界面执行 CREATE DATABASE
命令,或者借助 phpMyAdmin 等工具来完成。
3. 编写 PHP 脚本以连接数据库并执行 SQL 查询
为了从 PHP 连接到 MySQL 数据库,您需要使用 MySQLi、PDO 等扩展。一旦连接建立,您就可以执行 SQL 查询,从数据库中提取所需数据。这些 SQL 查询需要精心设计,以确保能够检索到计划通过 API 公开的数据,并且必须采用参数化查询,从而有效防范 SQL 注入攻击。
数据从数据库检索出来后,您可以利用 PHP 的内置函数,将其转换成 JSON 格式。JSON 是一种轻量级的数据交换格式,易于解析,且广泛兼容多种编程语言。
4. 使用 PHP 数据对象 (PDO) 扩展以安全的方式准备和执行 SQL 语句,并获取结果。
PDO 是一个功能强大且灵活的 PHP 扩展,它提供了访问各种数据库的统一接口。PDO 支持多种数据库驱动程序(例如 MySQL),并具备预编译语句和参数绑定等特性,这些都有助于防范 SQL 注入攻击。
若要使用 PDO 连接 MySQL 数据库,您需要创建一个 PDO 对象,并传入数据库的连接信息。随后,您可以调用 prepare()
方法来准备 SQL 语句,使用 bindParam()
或 bindValue()
方法来绑定参数(如果适用),最后通过 execute()
方法执行该语句。执行完成后,您可以利用 fetch()
、fetchAll()
或 fetchColumn()
等方法检索查询结果。
5. 将数据转换为 JSON 格式,并通过适当的 HTTP 头输出到客户端
json_encode()
是 PHP 的一个内置函数,它能够将数据转换为 JSON 格式的字符串。您可以向该函数传递任何数据类型(例如数组或对象),它将被转换成 JSON 字符串,这种格式非常便于客户端应用程序进行解析和使用。
在获得 JSON 字符串后,您需要通过设置适当的 HTTP 头来将其输出到客户端。在 PHP 中,这可以通过 header()
函数来实现,该函数允许您指定内容类型和其他有关响应的元数据。例如,为了输出 JSON 数据,您应该将 Content-Type
头设置为 "application/json"
。
通过将数据以 JSON 格式输出,并设置正确的 HTTP 头,您可以确保客户端应用程序能够轻松地使用 REST API,并遵循标准的 Web 通信规范。
6. 处理来自客户端的 HTTP 请求
HTTP 请求是客户端(例如,Web 浏览器或移动应用)与您所构建的 API 进行数据请求或执行其他操作的主要通信手段。为了妥善处理这些请求,您需要编写 PHP 代码,使其能够接收请求并返回相应的响应。
PHP 提供了一系列函数,帮助您获取当前请求的相关信息。例如,$_SERVER
变量包含了 HTTP 方法(GET、POST 等)、URL 路径、查询参数以及请求体数据等关键信息。同时,$_GET
和 $_POST
数组则分别用于存储 GET 和 POST 请求中的参数。
在处理不同类型的请求时,您需要编写相应的 PHP 代码,以分析传入的数据并确定执行的操作。例如,若客户端通过 GET 请求从 API 获取数据,您的代码可能会执行 SQL 查询来检索数据,并将其作为 JSON 格式的响应返回。若客户端通过 POST 请求创建新记录,您的代码则可能会将新数据插入 MySQL 数据库,并返回操作成功的消息。
7. 强化错误处理与验证,确保 API 的稳健与安全
在 API 中实施有效的错误处理和验证至关重要,这要求您编写能够检测并响应错误,同时验证用户输入的 PHP 代码。PHP 提供了多个内置函数,助力您进行错误处理,例如 trigger_error()
用于触发一个用户级别的错误/警告/通知信息,而 set_error_handler()
则允许您设置一个用户自定义的错误处理函数。
在验证方面,您可能需要借助正则表达式、PHP 过滤器或自定义验证函数来确保用户输入的数据符合预期格式和范围。通过实施严格的错误处理和验证机制,您可以显著提升 API 的稳健性和安全性。
8. 将 API 部署到您的 Web 服务器,并使用 cURL 或 Postman 等工具对其进行测试。
要将 API 部署上线,您需将 PHP 文件及任何必需资源(例如 CSS、JavaScript 文件或图像)上传至您的 Web 服务器。这一步骤可能还需根据您的 Web 服务器配置调整 .htaccess
文件,以确保 API 路由准确无误。
一旦 API 部署完成,您即可借助 cURL 或 Postman 等工具来对其进行测试。这些工具功能强大,能让您轻松地向 API 发送 HTTP 请求,并即时查看响应数据。通过它们,您可以测试各种请求类型(例如 GET、POST、PUT 或 DELETE),验证错误处理与数据验证机制的有效性,并确保 API 能够以正确的格式(如 JSON 或 XML)返回准确无误的数据。
在测试 API 时,请重点关注性能、安全性及可用性。您应在不同环境下(例如高流量时段或网络状况不佳时)对 API 进行测试,以确保其响应迅速且运行稳定。同时,务必检查 API 是否存在潜在的安全隐患(例如 SQL 注入或跨站脚本攻击),并确保 API 的设计便于客户端使用与理解。
下面是一个从 MySQL 数据库检索数据的简单 REST API 的示例 PHP 代码:
原文链接:https://blog.dreamfactory.com/create-a-mysql-rest-api-in-minutes-using-dreamfactory