在PHP中添加执行GET和POST请求所需的参数值

在PHP中添加执行GET和POST请求所需的参数值,php,post,get,slim,Php,Post,Get,Slim,我正在试图找出如何使我的实际应用程序更有用、更复杂(是的,我正在尝试执行一些类似于非常简单的APIrest服务的操作),在这些应用程序中,我执行了一些不同类型的请求,一些作为GET请求,另一些作为POST请求: 获取检索所有图书对象的请求 $app->get('/api/books', function () { require_once('db/connector_test.php'); $statement = $pdo->prepare("SELECT * FROM

我正在试图找出如何使我的实际应用程序更有用、更复杂(是的,我正在尝试执行一些类似于非常简单的APIrest服务的操作),在这些应用程序中,我执行了一些不同类型的请求,一些作为GET请求,另一些作为POST请求:

获取检索所有图书对象的请求

$app->get('/api/books', function () { 
require_once('db/connector_test.php');

    $statement = $pdo->prepare("SELECT * FROM books ORDER BY id");
    $statement->execute();
    $data = $statement->fetchAll(PDO::FETCH_OBJ);

    if (isset($data)) {
       echo "<pre>";
       header('Content-Type: application/json');
       print json_encode($data);
       echo "</pre>";
       }
});
在本例中,我只是通过添加三个参数(title、author、amazon_url)作为主体参数对其进行了测试,其中的值是我要添加到执行POST请求的数据库中的值

我现在需要做什么?(这就是问题的重点)

我已经考虑了一些可以使这些HTTP请求更加安全的方法,可能是在每个请求中添加一些必需的参数,以便更好地控制这些资源的使用……例如authkey或一些强制的特定参数。因此,想要对这些资源发出GET和POST请求的普通用户需要知道需要哪种类型的参数值


有人可以建议我如何在Slim和PHP中包含此逻辑?因为我认为,如果我在PHP中理解了这个概念,那么对于Slim框架,我也可以很容易地理解它

所以您希望通过API进行某种身份验证 这可以使用slim中的中间件来完成

在这里,您可以围绕整个API或特定路由构建一个访问门 在这个中间件中,您可以使用以下命令检查像JWT令牌这样的令牌

您还可以从用户那里检查一些参数值

编辑以添加示例

首先,您需要创建一个路由来生成JWT令牌,如

$app->add(new \Slim\Middleware\JwtAuthentication([
     "path" => ["/"],
    "passthrough" => ["/JWTToken"],
    "secret" => "supersecretkeyyoushouldnotcommittogithub",
    "error" => function ($request, $response, $arguments) {
        $data["status"] = "error";
        $data["message"] = $arguments["message"];
        return $response
            ->withHeader("Content-Type", "application/json")
            ->write(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
    }
]));
此路由将生成仅在10分钟内有效的JWT令牌

第二次添加中间件以检查令牌验证

"firebase/php-jwt": "^4.0",
"tuupola/slim-jwt-auth": "^2.3"
该中间件将检查令牌是否有效 如果为true,将调用您的GET或POST路由;否则,将返回未经授权的错误

您需要根据这些要求更新您的Composer

Authorization: Bearer  "Token String" 
编辑#2 要发送任何请求,您需要发送此标头

邮递员的例子

在Slime中搜索中间件我已经读过了,但我想我没有抓住要点……你能给我一个非常简单的例子,说明我如何处理这个访问门,并考虑到我的实际代码吗?可能需要一个简单的authkey参数来执行我上面显示的GET-ad-the-POST请求。对于“path”,您指的是例如为检索某些资源设置的路径,如
/api/books
?现在您已经设置了“/”路径,所以如果我理解得很好,这个令牌验证将影响到已经声明的每个资源路径?是的,这是真的,这个验证将影响到您所有的Routeso,例如,对于GET方法,考虑到我们需要传递令牌以完成身份验证,请求将如何处理?您将发送带有JWT令牌数据的授权标头,
"firebase/php-jwt": "^4.0",
"tuupola/slim-jwt-auth": "^2.3"
Authorization: Bearer  "Token String"