【发布时间】:2021-10-22 10:51:21
【问题描述】:
我阅读了关于如何创建 REST API 的 article。
虽然我的 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_delete和json_response当然是我自己的函数,其中前两个允许我避免mysqli准备语句和绑定参数的所有这些行,而后者基本相同json_encode之前只有一些标头(根据布尔值给出 200 或 500 个 HTTP 响应),然后退出脚本以 die 执行。
【问题讨论】: