带有嵌套路由的 PHP REST API

问题描述 投票:0回答:2

我想创建一个纯粹的PHP REST API,我在后端开发领域相当陌生,但我是经验丰富的软件开发人员,所以我知道一些概念。

但是,在观看了几个有关如何使用 PHP 创建 REST API 的教程后,所有讲师都使用更简单的示例,其中不存在嵌套。

简单示例:

GET /api/category/read.php

但是,我想创建这样的东西:

GET /api/{user_id}/{folder_id}/{file_name}/read.php

我正在努力寻找任何涉及 PHP 的教程。我花了几个小时试图通过修改我在教程视频中看到的代码来自己解决这个问题。我的意思是,如果我确实像他们那样,这意味着在我的项目文件夹中为每个

{user_id}
手动创建文件夹,等等为每个子文件夹......但我不认为这种硬编码是解决方案。

我在这里发现了一些与我的问题密切相关的 Stack Overflow 问题,但没有一个有令人满意的答案 - 让我想知道这是否可以做到,但这似乎很常见(例如,我知道 GitHub API 有只是支持

/{user}/repos
)所以我认为这应该是可行的。

如果有人能帮助我实现我的目标,我将非常感激。如果没有的话,指出一个可以做到这一点的教程/文档同样值得赞赏!

php rest backend
2个回答
1
投票

您不需要创建文件夹结构来实现此目的。使用诸如 Apache Mod Rewrite 或类似 Laravel 之类的框架会更有利,以帮助避免创建您正在描述的文件结构并拥有用于处理特定路由的单个端点:

在 Apache2 中使用 mod rewrite 会产生如下效果:

.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^api/(.+)/(.+)/(.+)/read /api/read.php?user_id=$1&folder_id=$2&file_name=$3

这将在 /api/read.php 中的 $_GET 和 $_REQUEST supergobals 中提供 URI 变量


使用 Laravel 框架,您可以利用其 MVC 方法并创建动态 routes,它可以捕获 URL 变量并将它们传递到所需的控制器端点:

在你的路线文件中:

Route::get('api/{user_id}/{folder_id}/{file_name}/read', Controller@read)

在控制器中:

public function read(user_id,folder_id,file_name){ /* do stuff */ }

关于 MVC 的细节和使用 Laravel 创建 API 还有很多需要了解,但是,他们有很棒的 文档教程


0
投票

创建一个接收每个请求的 PHP 脚本(让 Apache 将所有请求定向到它),然后处理

$_SERVER['REQUEST_URI']
变量以将路径分割成段,将各部分存储在您选择的变量中。然后根据需要将请求分派给子组件。

© www.soinside.com 2019 - 2024. All rights reserved.