带有嵌套路由的PHP REST API

时间:2018-09-28 17:02:26

标签: php rest api web backend

我想创建一个纯粹的 PHP REST API ,我在后端开发领域还很新,但是我是经验丰富的软件开发人员,所以一些概念对我来说是众所周知的。

但是,看了几本有关如何使用PHP创建REST API的教程之后,所有讲师都在使用 simpler 示例,其中没有嵌套。

简单示例:

GET /api/category/read.php

但是,我想创建以下内容:

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

我正在努力寻找任何有关PHP的教程。我花了几个小时试图通过修改教程视频中看到的代码来自己弄清楚。我的意思是,如果我喜欢它们,那就意味着在我的项目文件夹中为每个{user_id}手动创建文件夹,并为每个子文件夹依次创建...但是我不认为这种硬编码是解决方案。 / p>

我在这里找到了一些与我的问题密切相关的SO问题,但是没有一个令人满意的答案-让我怀疑这是否可以做到。但这似乎很常见(例如,我知道GitHub API才支持/{user}/repos),所以我认为它应该可行。

如果有人可以帮助我实现目标,我将非常感激。如果不是其他的话,那么指向一个这样做的教程/文档同样值得赞赏!

2 个答案:

答案 0 :(得分:1)

您无需创建文件夹结构即可实现此目的。使用Apache Mod Rewrite之类的东西或Laravel之类的框架会更有利于避免创建您正在描述的文件结构并具有用于处理特定路由的单个终结点的需求:

使用Apache2进行mod重写将类似于:

.htaccess

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

这将在/api/read.php中的$ _GET和$ _REQUEST超级对象中提供URI变量


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

在您的路线文件中:

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的知识还有很多,但是它们具有出色的tutorials和{{3}}。

答案 1 :(得分:0)

创建一个PHP脚本来接收每个请求(Apache将所有请求都定向到该脚本),然后处理$_SERVER['REQUEST_URI']变量以将路径分成多个段,并将各部分存储在您选择的变量中。然后根据需要将请求分派给子组件。