gpt4 book ai didi

php - 好的 PHP Rest Api 库

转载 作者:IT王子 更新时间:2023-10-29 00:05:06 24 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




我正在开发一个跨平台系统,我需要制作一个休息 API 来将它们联系在一起。我在 PHP 方面有很长的经验,我想将它用于此服务。

我可以 100% 手动开发 API,但我希望有一些很棒的库可以简化我的开发。

有没有人有这样的图书馆的经验?你有什么可以推荐的吗?

最佳答案

我拿到了徽章Popular question对于这个问题,我觉得是时候详细说明我是如何做 REST 解决方案的了。

对于这个 REST Api,我确实查看了 Laravel、Sympfony2 和 Codeigniter。他们都有一些我喜欢的元素和一些我不喜欢的元素。我主要关心的是如何进行身份验证,因为我有一个相当复杂的算法,我的用户可以使用 Google 或 Facebook 提供的应用程序的 access_token 或 access_tokens 登录。我也更喜欢完全控制我的框架,上面提到的框架有一些我觉得没有必要和难以解决的元素。因此,我决定制作自己的 REST 解决方案。它并不像人们想象的那么难,并且可以通过多种方式完成。我这样做的方式需要一些关于 OOP 编程的知识。

好的,所以开始创建一个名为 REST 的基类。这个类负责处理每次调用的所有共同点。像身份验证一样,解析请求的方法路径,检查 access_token等等。

此类中的核心内容之一是请求的路径以及如何将其转换为方法。我在 Laravel 的启发下做了这个。我有一个数组 key => value其中键是它应该匹配的 url,值是要调用的实际方法。我还包括 Lavavel 解析 URL 中变量的方式,如下所示:

'/user/(:id)' => 'user_id',

这将匹配任何/user/[number]。它还检查这是什么类型的请求,所以如果这是一个简单的获取方法,它会尝试调用 get_user_id .任何用 (:id) 解析的内容将在调用该方法时用作参数(因此它实际上是在调用 get_user_id($id) )。

认证后,实际的方法调用被评估。我不想要 REST 类本身中的所有方法(如 get_user_id ),所以我将它们分解到扩展 REST 类的不同 Controller 中。这是通过查看请求的 url 来完成的。如果是 /user/(:id)该脚本将检查是否存在名为 userController.php 的 Controller 。 .如果存在,检查我们要调用的方法是否存在。如果是,请检查参数的数量是否与我们拥有的数量相匹配。如果一切正常,则执行该方法,否则返回错误消息。在制作这样的 API 时,结构和错误消息非常重要。

在不同的 Controller 中,我调用 REST 类的构造函数来获取身份验证、解析 url 等。这里棘手的部分是我不想做:
$controller = new MyController();
$controller->printResponse();

在每个 Controller 的底部。所以我做了一个小技巧和一个名为 run.php 的脚本为每个 Controller 类动态执行此操作。在我包括 run.php 之前我通过简单地执行 $path = explode('/',__FILE__); 来保存 Controller 的路径.这在运行脚本中使用。运行脚本如下所示:
// Splitting the file-name, removing the extension
$name = explode('.',$path[count($path)-1]);

// Uppercasing the first letter to be nice and OOP-ish
$classToCall = ucfirst($name[0]);

// Creating a new instance
$controller = new $classToCall();

// Logging
$controller->doLog();

// Printing the final response
$controller->printResponse();

我发现这是我想要构建 API 的完美解决方案。我可以通过在解析 url 到方法的数组中提供它来轻松添加新方法,并且我可以在很好地分开的 Controller 中添加新方法以获得最大的清洁度。

有些人可能认为这工作量太大,但实际上我只用了几个小时就可以启动并运行它。我也称之为高度动态,因为我可以添加新的 Controller ,如果它们是有效的 url-patterns,系统就会识别它们。

一些友好的建议。

如果您决定采用类似于此解决方案的方法,这些可能是一些不错的提示。在每个 Controller 中,执行如下操作:
public function __construct() {
// Loading the class-name, setting it in the REST-class, so we can check if it holds the method being called
$this->className = get_class($this);

// Calling RESTs constructor
parent::__construct();
}

我们需要存储我们当前正在使用的类。这将是 UserController或类似的东西。

在 REST 类中,我可以使用这个变量来检查实际调用的方法是否存在于这个 Controller 中。我是这样做的:
// Checking if the method exists
if (method_exists($this->className,$method_name)) {
// Check to see if we have the required number of arguments represented
$ReflectionClass = new ReflectionClass($this->className);

if ($ReflectionClass->getMethod($method_name)->getNumberOfParameters() == count($this->methodUrl['args'])) {
$this->response['response'] = call_user_func_array(array($this, $method_name), $this->methodUrl['args']);

我希望这能让你们一切顺利。

快乐编码

关于php - 好的 PHP Rest Api 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com