使用 REST API 而不是我的简单方法有什么好处?

What is the benefit of using REST API instead of my simplistic approach?

我阅读了一篇关于如何创建 REST API 的 article

虽然我的 APIs(在 /app/api/ 文件夹中)通常只检查 $_POST 参数和 echo json_encode($response); die; 在进行一些数据库操作后,我在文章中找到,设置了一些 headers,我通常不这样做。

为什么有必要and/or这样做更好吗?

如果我将我的代码转换为 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_selectdata_deletejson_response 当然是我自己的函数,其中前两个允许我避免 mysqli 准备语句和绑定参数的所有这些行,以及后者与 json_encode 基本相同,只是之前有一些 headers(根据布尔值给出 200 或 500 HTTP 响应),然后退出脚本用 die 执行。

“为什么有必要and/or这样做更好吗?”

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

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

绝对 :) 只要您确保根据您的请求将 'Accept' HTTP header 设置为 'application/json',并且您的 API 以 'Content-Type' header 共 'application/json'。

这里有一个 link 展示了它是如何工作的:https://javascript.info/fetch

如果您想涉足 SOAP 世界,我建议您更愿意研究 GRPC。现在 SOAP 主要用于遗留系统