作为后端REST服务处理多个PHP脚本的最佳方法?
我有一个典型的网站设置,我使用AJAX与PHP脚本进行通信,然后PHP脚本将数据读写到MySQL数据库。在我以前的项目中,我需要编写的PHP脚本数量很少,因为我需要读取或写入的数据没有太多变化。这个站点有点不同,我通常为每个AJAX调用创建不同的PHP脚本,这导致了大量的PHP脚本 我决定采用不同的方法,在同一个PHP脚本中对类似的查询进行分组。例如,如果我有以下通话: getGroupById作为后端REST服务处理多个PHP脚本的最佳方法?,php,ajax,rest,design-patterns,Php,Ajax,Rest,Design Patterns,我有一个典型的网站设置,我使用AJAX与PHP脚本进行通信,然后PHP脚本将数据读写到MySQL数据库。在我以前的项目中,我需要编写的PHP脚本数量很少,因为我需要读取或写入的数据没有太多变化。这个站点有点不同,我通常为每个AJAX调用创建不同的PHP脚本,这导致了大量的PHP脚本 我决定采用不同的方法,在同一个PHP脚本中对类似的查询进行分组。例如,如果我有以下通话: getGroupById getAllGroups createNewGroup 在我以前的方法中,我会有三个单独的php文件
getAllGroups
createNewGroup 在我以前的方法中,我会有三个单独的php文件,但现在我有一个可以完成所有这三个文件 随着项目的发展,我采取的第二种方法被证明是无法维护的。例如,如果我想在同一个脚本中有多个GET调用,我现在必须从AJAX调用向脚本传递另一个参数,以便PHP脚本知道要执行哪个查询
这两种方法中哪一种更好?有什么众所周知的实践或设计模式可以处理这个问题吗?如果您真的想使用RESTful,请尝试使您的PHP文件结构独立于您希望AJAX请求的方式 一种常见的设计模式是为每个单独的数据实体创建一个表示,然后在该表示上定义-操作。然后,HTTP方法头充当应该执行的操作的标识符 例如,假设您有以下“数据块”:
- 用户:您网站的成员
- 组:一组成员
$.ajax({
网址:'http://example.com/api/user'
方法:“删除”,
数据:{id:415}
成功:{
//它起作用了!
}
});
下一件事是用PHP捕获数据。我建议为每个“数据块”创建一个单独的文件,但当脚本越来越大时,您可以对其进行更改。这只是一个调整HTTP服务器性能的问题
api/user.php
//确定请求了什么操作
开关($\u服务器['REQUEST\u METHOD'])
{
案例“POST”:
$data=$\u POST;
// ...
案例“GET”:
$data=$\u GET;
//例如,如果提供了ID,则获取一个用户,否则获取所有用户
如果(isset($data['id']))
获取用户($id);
其他的
获取用户();
打破
案件‘付诸表决’:
$data=parse\u str(文件获取内容php://input“),$put_vars);//见下文
// ...
案例“删除”:
$data=parse\u str(文件获取内容php://input“),$put_vars);//见下文
// ...
违约:
//405=方法不允许
http_response_code(405);//对于PHP>=5.4.0
出口
}
//用于添加、检索、删除和操作用户的函数的完整列表
函数获取用户($id)
{
$query=“从id=…”的用户中选择*;
// ...
}
函数fetch\u用户()
{
// ...
}
来源:
ArrayAccess
这样的东西也可以),并自由使用PATH\u INFO
。在这一点上,你可以让你所有的资源URL遵循一个标准的约定,有一个脚本来完成所有的导航/路由,并且可能对你公开的每种类型都有一个类。我很感激你提供的详细信息,但是你的回答突出了我试图避免的一些事情。将所有CRUD操作放在一个文件中已被证明是无法维护的。我还需要验证和清理传入的数据。在对所有CRUD操作执行所有这些操作之后,单个php文件开始变得杂乱无章。此外,单个CRUD操作中的分支也开始变得不可维护。正如上面所示,我可能会在同一个php文件中有多个POST请求。