首页 > 解决方案 > 使用 REST API 而不是我的简单方法有什么好处?

问题描述

我阅读了一篇关于如何创建 REST API 的文章。

虽然我的 API(在 /app/api/ 文件夹中)通常只检查$_POST参数并echo json_encode($response); die;在进行一些数据库操作之后,但我在文章中发现设置了一些标头,而我通常不会这样做。

为什么这是必要的和/或这样做更好?

如果我将代码转换为 REST API,我是否仍然能够使用 Fetch API 从 JavaScript 获取 JSON 结果?

我也看到了 SOAP 客户端(我也必须对此进行一些阅读),但我很好奇这三种(或可能任何其他)方式中的哪一种通常是最好的。

在我看来,我的方式更容易使用 JavaScript 获取,但也许直接从 PHP 进行 API 调用(使用 CURL?)也足够了。

我常用的例子:

require_once __DIR__ . '/../../init.php';
require_once env('SHOP_ROOT') . '/inc_functions.php';

$cmd = $_REQUEST['cmd'] ?? null;
$token = $_REQUEST['token'] ?? null;

if ($token !== env('API_TOKEN'))
    json_response(false, ['Incorrect token']);

/*--------------------------------------------------------*
 * cmd : delete                                           *
 *--------------------------------------------------------*
 * parameters : user, uploadId                            *
 *--------------------------------------------------------*/
if ($cmd == 'delete') {

    $email = $_REQUEST['user'] ?? '';
    $uploadId = intval($_REQUEST['uploadId'] ?? 0);

    $selClientQ = <<<SQL

        SELECT id_client
        FROM client
        WHERE
            email = ? AND
            is_active = 1 AND
            is_banned = 0

    SQL;

    $clientId = data_select($selClientQ, $email)[0]['id_client'] ?? 0;

    $delClientUploadQ = <<<SQL

        DELETE FROM client_uploads WHERE client_id = ? AND id = ?

    SQL;

    $isDeleted = data_delete($delClientUploadQ, $clientId, $uploadId);

    json_response($isDeleted, [
        'clientId' => $clientId,
        'success' => $isDeleted,
    ]);
}

data_select,当然是我自己的函数data_deletejson_response其中前两个允许我避免所有那些用于 mysqli 准备语句和绑定参数的行,而后者基本上是相同的,json_encode只是之前有一些标头(基于 200 或 500 HTTP 响应boolean),然后退出脚本执行die

标签: phprestsoap

解决方案


“为什么有必要和/或这样做更好?”

看起来您指的是跨域资源共享 (CORS) 标头。这些标头用于提高 REST API 的安全性,并允许您控制哪些网站可以实际调用您的 API。基本上,如果您将“Access-Control-Allow-Origin”标头设置为您网站的地址,则只有您的网站可以调用此 API。您还可以查看描述其工作原理的链接:https ://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

“如果我将代码转换为 REST API,我还能使用 Fetch API 从 JavaScript 获取 JSON 结果吗?”

绝对 :) 只要您确保在您的请求中将“接受”HTTP 标头设置为“应用程序/json”,并且您的 API 以“应用程序/json”的“内容类型”标头响应。

这是一个显示其工作原理的链接:https ://javascript.info/fetch

如果您想冒险进入 SOAP 世界,我建议您宁愿研究 GRPC。SOAP 现在主要用于遗留系统


推荐阅读