我發現的最佳方法是給你的用戶一個API_KEY和一個SECRET_KEY。
構建您的REST API請求,傳遞API_KEY,時間戳和進行調用所需的任何其他參數。
使用像PHP這樣的腳本語言創建一個API_SIGNATURE變量,使用您的SECRET_KEY使用雙向加密並將其附加到您的基礎URL,這就是您作爲請求觸發的內容。
現在任何人都可以看到該請求,這就是爲什麼你把時間戳作爲參數。基本上你可以放入一個限制,只處理少於一分鐘的請求。
例子:(做這部分的腳本語言)
$API_BASE_URL="http://api.yourdomain.com/1.1/comments.json?api_key=2002×tamp=2323234544&id=4";
$API_KEY=300;
$API_SIGNATURE=hash_hmac('sha256', API_BASE_URL, API_KEY);
$API_URL=$API_BASE_URL.'&api_signature='.$API_SIGNATURE;
-
現在,在您的jQuery AJAX網址:使用PHP回聲出$ API_URL。
-
在你的API時,你可以查找用戶的請求帳戶基於API_KEY並得到他們的SECRET_KEY和解密簽名,並確保符合什麼傳入如果通行證現在檢查。時間戳,並確保請求不到一分鐘。
在處理請求之前,您還可以進行速率限制和其他一些其他內容。
就是這樣。
還有人說瀏覽器不允許跨域請求。如果你要求json,但是你可以使用jsonp解決這個問題。
hash_hmac有許多編程和腳本語言。所以如果你開發一個API,你可以在PHP上使用它,並在你的iPhone應用程序中使用目標C.
很簡單。
完全正確! +1! (注意注意:你可以使用JSONP模擬跨域請求) – jwueller 2011-05-20 10:28:34
@BrunoLM好的,我部分理解了這一點。 ***'您無法使用javascript'***進行跨域請求,因此根據此句,http://exmaple.com/service1/GetSomething?apikey=96a143c8-2f62-470c-b81f-dec5fc271873服務不能從http://example.org用客戶端代碼調用。對? – tugberk 2011-05-20 12:38:30
@BrunoLM還讓我們假設我創建了一個服務來在我的應用程序中使用該服務。而這個服務的URL是http://example.co.uk/MyService這個服務將包含我的API密鑰和所有的東西,它會返回結果。因此,該服務將成爲我在客戶端代碼中使用的服務。什麼會阻止smbdy消費該服務?例如,與小提琴手? – tugberk 2011-05-20 12:44:21