搜索
首页后端开发php教程如何使用纯 PHP 创建 API?

Como criar API com PHP Puro?

在这个项目中,我们将在任何框架中仅使用 PHP 创建一个简单的 API。我们所需要的只是:

  • PHP - 必备
  • 作曲家 - 必备
  • 编辑器/IDE,如 VScode 或 PHPStorm
  • Docker - 首选但不是必需
  • 邮递员 - 首选,但不是必需

让我们首先为数据库配置定义 docker-compose.yml 文件。如果您不想使用 Docker 在容器中创建数据库,解决方案是在您的计算机上安装数据库。在本教程中,我们将使用 MySQL。

设置

创建应用程序所在的文件夹后,我们首先配置 docker-compose.yaml:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

让我们将此文件分成几部分进行解释:

services:
  mysql:

在此文件中,我们定义将使用的服务。
我将此服务命名为 mysql注意,该服务的名称将用于作为主机连接到数据库

image: mysql:9.1.0

接下来我定义将使用哪个图像来创建我们的数据库,对于这个项目,我使用 mysql9.1.0 版本。
您可以在 Docker Hub 上找到此版本和其他版本。

ports:
      - '3306:3306'

端口正在设置为3306。这是默认的mysql端口!

你可以注意到端口就像3306:3306,这个:意味着我们想要在本地机器上监听这个端口,而不仅仅是在docker容器上,这样我们就可以直接在我们的机器上访问它。

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

作为一个环境,我们必须定义 mysql 服务的凭据。
因此,我们使用环境变量定义用户、密码和数据库名称:

MYSQL_USER: api_user // 





<pre class="brush:php;toolbar:false">MYSQL_PASSWORD: api_password // 





<pre class="brush:php;toolbar:false">MYSQL_DATABASE: api_example // 





<pre class="brush:php;toolbar:false">MYSQL_ROOT_PASSWORD: useroot // 



<p>要启动我们的容器,只需进入 docker-compose.yaml 文件所在的文件夹并在终端中输入以下命令:<br>
</p>

<pre class="brush:php;toolbar:false">docker compose up -d

这将初始化我们容器中的 mysql 服务。
如果你想在终端内访问mysql,可以使用这个命令:

docker exec -it <nome do container> bash
</nome>

输入此命令并按 Enter 键后,您将进入运行 mysql 镜像的容器。

容器名称由文件夹名-主机名-数字组成
在这种情况下,如果我们的应用程序是在“create-api-php”目录中创建的,则容器的名称将为:create-api-php-mysql-1

我们还将创建一个composer.json文件,该文件将作为安装项目中使用的外部库的基础。在这个项目中我们将只使用Dotenv。

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在这一行中,我们添加了 php 中最常用的 dotenv 库。
您可以在以下位置找到此库的存储库:Github Vlucas Repository

services:
  mysql:

在下面的行中,我们基本上是说我们将在 PSR-4 的默认配置中使用自动加载。目前最常用的 PSR 是 PSR-12 和 PSR-4,其中 12 是迄今为止最常用的。但现在我们将继续使用 PSR-4。

image: mysql:9.1.0

创建这两个文件后,我们可以发出命令

ports:
      - '3306:3306'

它将安装 Dotenv 库并配置所需 PSR 的设置。
执行此命令后,将在我们的环境中创建composer.lock.

文件

对于来自 JavaScript 世界的人来说,这些文件可以与 package.jsonpackage-lock.json.

进行比较

您还会看到一个名为供应商的文件夹已添加到您的目录中,它包含我们的 Dotenv 库以及一个非常重要的文件:autoload.php。
我们不需要触摸或更改此文件中的任何内容,因为它将负责在我们的其他文件之间处理 Dotenv 信息。

我们还将创建一个名为 bootstrap.php 的文件,该文件负责初始化我们的应用程序并连接一些重要参数,以便一切按预期工作:

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

然后我们可以创建 .env 文件来添加负责连接到我们的 mysql 数据库的环境变量。
然后我们添加:

MYSQL_USER: api_user // 



<p>我们还将创建一个 .env.example 文件,其中将保存此信息的副本,以防有人想要克隆我们的存储库,甚至将来如果我们想继续我们的项目,这样我们就可以了解我们需要定义什么以及不需要什么的必要信息。<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_PASSWORD: api_password // 



<p>我们之所以要创建这两个文件,一个包含所有信息,另一个仅包含部分信息,是因为 .env 文件不应该上传到存储库,因为它包含机密信息。假设将来我们要使用第三方 API,需要添加 <strong>token</strong> 进行访问,然后我们会将这些信息存储在 .env 文件中。</p>

<p>为了防止 .env 文件上传到我们的存储库,我们将创建一个名为 .gitignore 的文件并添加以下信息:<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_DATABASE: api_example // 



<p>这样我们就定义了 .env 文件和供应商文件夹的全部内容将不会被提交。</p><p>至此,我们已经完成了项目配置,可以继续编码了。</p>

<h2>
  
  
  编纂
</h2>

<p>我们将创建以下目录 src/System 并在系统内创建文件 DatabaseConnector.php<br>
</p>

<pre class="brush:php;toolbar:false">services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

这里我们为此文件定义一个命名空间,以便我们将来可以在其他文件中使用它。

services:
  mysql:

我们将创建与文件同名的类,并创建一个名为 $dbConnection 并传递 null 值的私有变量。
该变量将负责此类的新实例并将我们与数据库连接起来。
稍后当我们实现 try-catch.
时我们会看到更多

image: mysql:9.1.0

在构造函数中,我们将创建以下变量并使用 Dotenv 检查从 .env 文件捕获的值。

ports:
      - '3306:3306'

仍在构造函数内,我们将执行 try-catch 来验证我们要执行的操作:

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在此尝试中,我们尝试创建类的新实例并将其传递到 $dbConnection 变量中。我们为此使用 PDO 模块,它接收参数

  • DSN - 数据源名称或 URI
  • - mysql:作为我们正在使用的服务/银行
  • - 主机=$主机; 我们的主人
  • - 端口=$端口; 我们的门
  • - 字符集=utf8mb4; 数据库的utf8字符集的定义
  • - dbname=$db 我们数据库的名称
  • USER - 登录数据库的用户
  • PASS - 登录数据库的密码

错误案例:

MYSQL_USER: api_user // 



<p>我们将触发 PDO 异常并返回错误消息。<br>
显然,这只是我们应该如何在开发环境中呈现错误的示例。对于生产环境,最好呈现更简洁的错误,帮助我们更清楚地理解问题。</p>

<p>在构造函数之外但在我们的类内部,我们将创建以下函数:<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_PASSWORD: api_password // 



<p>负责调用包含连接实例的变量。</p>

<p>还记得我们的 bootstrap.php 文件吗?让我们添加以下几行代码:<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_DATABASE: api_example // 



<p>看起来像这样:<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_ROOT_PASSWORD: useroot // 



<p>在文件夹<strong>src</strong>中,我们将创建另一个名为<strong>Database</strong>的目录,并在其中创建文件database_seed.php。<br>
这个文件将负责第一次填充我们的数据库,所以如果我们想与某人共享这个项目,它不会以空数据库结束。</p><p>在此文件中,我们将添加以下代码:<br>
</p>

<pre class="brush:php;toolbar:false">services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

我们导入 require 'bootstrap.php';因为在我们的引导文件中,我们已经导入了负责实例化数据库的变量。

services:
  mysql:

我们创建一个名为 $statement 的变量,其值为 Heredoc

image: mysql:9.1.0

在此Heredoc中,我们将添加一些查询

ports:
      - '3306:3306'

这里我选择删除表删除整个基础,然后开始一个新的,但是如果你愿意,你可以删除这行代码。

下面的代码行指定该表将用于执行事务,并且表之间将建立连接。如果你想了解更多关于这个mysql声明:innoDb文档

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在同一个Heredoc中,我们将添加另一个查询

MYSQL_USER: api_user // 



<p>这里我们将一些数据插入到 person 表中。</p>

<p>我们在文件末尾创建一个 try-catch,尝试初始化<strong>查询</strong>,如果出现错误,我们会返回一条错误消息,就像我们在上面代码中的数据处理中所做的那样.<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_PASSWORD: api_password // 



<p>在 <strong>src</strong> 中,我们将创建另一个名为 TableGateways 的目录,并在其中创建文件:PersonGateway.php。<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_DATABASE: api_example // 



<p>此文件夹中的文件将负责与我们的数据库交互,几乎就像存储库。</p>

<p>在我们的 PersonGateway 类中,我们将添加以下构造函数:<br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_ROOT_PASSWORD: useroot // 



<p>我们将添加这个构造函数,因为我们的类将在其他文件中被调用,以便我们可以触发我们类的一些方法。</p>

<p>请参阅以下方法:</p>

<p><strong>负责列出表中所有用户的方法</strong><br>
</p>

<pre class="brush:php;toolbar:false">docker compose up -d

负责列出表中单个用户的方法

docker exec -it <nome do container> bash
</nome>

将用户插入到我们的表中的可靠方法

{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}

负责更新表中用户信息的方法

"require": {
      "vlucas/phpdotenv": "^2.4"
},

负责从表中删除用户的方法

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }

我们将在 src 中创建一个名为 Controller 的目录,并在其中创建文件:PersonController.php。
该目录中的文件负责与我们的应用程序路由交互。在这里,我们直接与银行交互,但我们可以使用服务层并将所有逻辑和业务规则限制在该层。
如果你想创建服务层,那就像这样:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

但是,我们的目的不是深入研究这种类型的架构,现在我们将继续控制器文件:

services:
  mysql:

在我们的 PersonController 类中,我们将添加:

image: mysql:9.1.0

这样我们就可以保证与数据库的新实例进行交互。

我们还创建了一个方法来处理我们的请求:

ports:
      - '3306:3306'

这个标头负责传输状态代码,如果创建了一个正文,它会返回相同的正文以供查看。

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

我们还创建了与路线交互的方法:

负责与用户的列表路由交互的方法

MYSQL_USER: api_user // 



<p><strong>负责与用户的创建路由交互的方法</strong><br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_PASSWORD: api_password // 



<p><strong>负责与用户更新路由交互的方法</strong><br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_DATABASE: api_example // 



<p><strong>负责与用户删除路由交互的方法</strong><br>
</p>

<pre class="brush:php;toolbar:false">MYSQL_ROOT_PASSWORD: useroot // 



<p><strong>负责验证的方法</strong><br>
</p>

<pre class="brush:php;toolbar:false">docker compose up -d
docker exec -it <nome do container> bash
</nome>
{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}

最后,我们将在文件夹 src 之外创建一个名为 Public 的目录。
该文件夹负责包含 php 显示文件。
我们将在其中创建文件:index.php
我们将添加以下代码:

"require": {
      "vlucas/phpdotenv": "^2.4"
},

此文件负责设置标头并检查对 url 的访问。如果访问成功则返回内容,否则返回错误。

要访问您的应用程序,只需使用内部 PHP 服务器上传服务器即可:

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }

如果您还没有初始化容器,请在终端中输入以下命令:

composer install

现在只需使用邮递员或任何其他可以帮助您与网址交互的应用程序即可。

我的社交网络:
Github Linkedin

以上是如何使用纯 PHP 创建 API?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP行动:现实世界中的示例和应用程序PHP行动:现实世界中的示例和应用程序Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:轻松创建交互式Web内容PHP:轻松创建交互式Web内容Apr 14, 2025 am 12:15 AM

PHP可以轻松创建互动网页内容。1)通过嵌入HTML动态生成内容,根据用户输入或数据库数据实时展示。2)处理表单提交并生成动态输出,确保使用htmlspecialchars防XSS。3)结合MySQL创建用户注册系统,使用password_hash和预处理语句增强安全性。掌握这些技巧将提升Web开发效率。

PHP和Python:比较两种流行的编程语言PHP和Python:比较两种流行的编程语言Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP的持久相关性:它还活着吗?PHP的持久相关性:它还活着吗?Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP的当前状态:查看网络开发趋势PHP的当前状态:查看网络开发趋势Apr 13, 2025 am 12:20 AM

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP与其他语言:比较PHP与其他语言:比较Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP与Python:核心功能PHP与Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP:网络开发的关键语言PHP:网络开发的关键语言Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中