我閱讀了一篇關于如何創建 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_delete和json_response當然是我自己的功能,其中前兩個允許我避免mysqli的準備的陳述句和系結引數的所有這些線路,后者基本上是相同的json_encode僅與某些標頭(得到200或500之前HTTP回應基于所述boolean) 和退出腳本die之后執行。
uj5u.com熱心網友回復:
“為什么有必要和/或這樣做更好?”
看起來您指的是跨源資源共享 (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 現在主要用于遺留系統
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335677.html
