簡體   English   中英

RESTful服務API

[英]RESTful Service API

幾周以來,我一直在使用RESTful Service API,但是我開始遇到使用/API/login調用我的API的問題,它告訴我<p>The requested URL /API/login was not found on this server.</p>請參閱我用來測試Chrome的Advanced Rest Client Extension的屏幕截圖。

測試的屏幕截圖

現在可以通過在代碼內部創建一個.htaccess文件來解決此問題:

RewriteEngine On    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

完成此操作后,出現下一個問題,我不再使用授權,因為它被忽略了。

如您所見,服務器在Apache服務器上運行,所以應該不成問題,對嗎?

現在,我的想法是,使用.htacces文件並不是真正理想的選擇,我寧願僅使用標頭中的授權來調用url,如果發送方被授權,則返回json對象。

我是朝着正確的方向前進,還是我完全錯了?

編輯:情況草圖

應該可以從任何知道授權密鑰和令牌的應用程序或網站上調用此API,以識別誰在跟我說話,例如,我是一家擁有多個辦公室的超市老板,有人想知道那里有多少個辦公室他會問我。

http://jeanpaulvanhouten.nl/API/getOffices

我會告訴他;

{"office":{"address":"nowhere street 123","country":"holland","employees":0}}

甚至多個辦公室。

但是問問者無需對url做任何事情,它只會向url提出問題,並會得到json響應,然后對話就完成了。

編輯:授權部分

在我的index.php(每個用戶調用我的API時都會通過的主頁)中,我進行了標頭檢查:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Authorization, token, Content-Type');

// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

然后,我告訴服務器允許哪些頭,我檢查它們是否真的設置好了:

// Simpel authorisation
$headers = apache_request_headers();

if (isset($headers['Authorization']) == true) {
    $api_key = $headers['Authorization'];
    $token = $headers['token'];

    if ($api_key == 'test' && $token == '123') {

        $app->run();

    } else {
        $app->status('401');
        echo json_encode('No Access');
    }
}

我會嘗試這種方法,並使用專門為SLIM構建的Auth庫,該庫過去曾用過: http : //www.appelsiini.net/projects/slim-basic-auth

這比嘗試創建自己的要好。

很好的是,它不需要數據庫,並為您處理所有授權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM