2013-04-26 75 views
1

據我瞭解,facebook API的速率限制爲每600秒約600個呼叫,每個令牌& IP。現在我有一個網站/臉書應用程序,允許用戶瀏覽公共夜總會頁面和事件,不需要用戶登錄瀏覽頁面,所以我使用我的應用程序令牌。但是,對於用戶能夠使用我的網站/應用程序中他們的帳戶與Facebook圖形進行交互的功能,他們必須登錄,因此我使用用戶令牌。Facebook API速率限制 - 服務器端vs客戶端

因此,當用戶登錄時,超出限制速率應該不會有問題,因爲每個用戶都有不同的用戶令牌,因此每個用戶每600秒會有600個呼叫的速率限制。但我擔心的是,當用戶在未登錄時瀏覽公共夜總會頁面和事件時,我的應用程序將超過速率限制,因爲只有1個應用程序令牌和1個IP地址(我的服務器)用於多個用戶。如果有多個用戶同時瀏覽公共夜總會頁面和事件,那麼超出費率限制將非常容易。

我已經做了一些調查,發現我可以從客戶端進行API調用,這樣每個用戶都會有不同的IP地址(用戶計算機)瀏覽公共夜總會頁面和事件,所以那麼每個用戶每600秒將有600個呼叫的速率限制。但是,如果我從客戶端進行API調用,那麼我的應用程序令牌和應用程序祕密對用戶是否可見?這會帶來安全風險嗎?任何人都可以驗證這是否正確?是否還有其他的事情可以做,以便在用戶瀏覽公共夜總會頁面和事件時不超過速率限制?提前致謝。

+1

哎喲我的眼睛受傷了。你能把你的問題分成幾段嗎? – Raptor 2013-04-26 06:44:41

+0

對不起,我...分爲段落,謝謝 – 2013-04-26 06:47:28

回答

0

從客戶端撥打電話時,您不提供應用程序密碼,只提供客戶端可以看到的應用程序ID,因爲它們已登錄到您的應用程序。您的應用程序的Facebook cookie包含您的應用程序ID。每個客戶都有自己的令牌,他們也可以看到。

我不確定什麼「瀏覽夜總會頁面」在技術上意味着什麼,但是如果您可以使用JavaScript將服務器工作卸載到客戶端,那更可取。此外,在服務器端驗證用戶身份時,儘量不要在每個頁面請求中調用$ facebook-> getUser(),因爲這會違反API限制。如果可能,嘗試使用JavaScript登錄客戶端,如果不是使用FB服務器端將它們記錄在ONCE中,則從此開始設置自己的會話以在您的站點上對其進行身份驗證。這將極大地降低您的API調用。

看到這個問題:Structure of a facebook app with minimal api calls

+0

感謝您的迴應,但我不知道你完全理解我的問題。 – 2013-04-27 00:26:39

+0

「公共夜總會頁面」是Facebook上的一個公共頁面,由夜總會管理。我的網站/應用根據用戶的位置顯示位於用戶附近的夜總會頁面。但是用戶不需要登錄查看這些頁面,因爲它們是公共頁面,所以我使用我的應用訪問令牌來進行這些調用。但是由於用戶沒有登錄,每個用戶都不會有唯一的訪問令牌,他們都會在進行API調用時使用我的應用訪問令牌。 – 2013-04-27 00:28:27

+0

因此,由於多個用戶將使用1個訪問令牌(我的應用令牌)和1個IP(我的服務器IP),如果多個用戶同時瀏覽頁面,則很容易超過速率限制。在下面的Facebook文檔中,它表示不在客戶端代碼中包含應用令牌或應用祕密:https://developers.facebook.com/docs/concepts/login/access-tokens-and-types/ – 2013-04-27 00:29:02