2012-08-27 47 views
4

我的目標是將Web應用程序與內部數據庫同步。 Web應用程序有一個公共API,但爲了完全同步這兩個來源,我需要每次做大約2000次獨立的API調用。我的直覺告訴我這是過度的,可能是不負責任的,但我缺乏確切知道的經驗。「合理」使用Web API來同步數據

在這種特殊情況下,網絡應用程序是Asana,但我以前遇到類似的情況與其他服務。有什麼方法可以通過過度的API調用來知道您是否濫用了服務?我知道我不會去像Asana那樣的公司,但是我不能動搖這樣一種感覺,那就是每天要做出約150k的請求。

我能想到的唯一的其他選擇是隻在知道數據庫中發生了變化時才更新Web服務,但我會以這種方式失去很多功能。

我對這個問題的主觀性表示歉意,但我真的希望有人能夠解釋在使用公共API時是否有任何禮儀。

回答

4

(我在體位工作)

這是一個很好的問題,或者是設置的問題。

您正在設計一個系統,將會重複地爲每個對象提出請求。隨着對象數量的增長會發生什麼?即使您的初始請求率合理,這也會遇到可擴展性問題。更具擴展性的解決方案是在系統中根據更改進行縮放。這也會隨着時間的推移而增長,但速度會更慢 - 單個用戶每天可以做出的更改次數相對不變,但隨着時間的推移,它們創建的對象總數會不斷增長並增長。所以我的第一條建議是避免以這種方式做事,而是找到一種方法來檢測變化,並採取行動。知道爲什麼你會覺得你會因爲採取這種方法而失去能力會很有趣。

現在,我碰巧知道Asana API不會當前爲您提供任何友好的機制來檢測系統中的變化。這是一個普遍要求的功能,我們正在研究它,但不幸的是我不能承諾交付日期。所以你可能別無選擇,只能現在輪詢我們的系統。

至於對API的禮貌,許多服務提供商設置了API使用限制,以防止意外或惡意使用API​​將服務影響到其他客戶 - Asana也不例外。有時這些限制是公佈的,其他時間則不是這樣,並且沒有標準限制:這一切都取決於服務。但是對服務限制感到好奇,你是非常想到的。

也就是說,對於Asana API來說,每天150k的請求是很多的。如果我們所有的API用戶都給了我們這麼多的流量,那麼我們每天可能會提供比Google Web Search更多的請求,而且我們還沒有足夠的可擴展性。 :)從技術上講,有時,我們可能會從單個用戶處理該卷的請求。

如果您必須進行輪詢,請嘗試輪詢15分鐘的時間間隔。但請不要在這段時間內調查您的整個工作區;它可能是太多的流量/數據。我們正在努力爲您提供更好的解決方案。

如果您偶然發出太多的Asana API請求,您將返回HTTP狀態碼429而不是您想要的響應;你可以在這裏閱讀更多關於(https://asana.com/developers/documentation/getting-started/errors)。

+0

非常感謝Greg。這非常有幫助,你回答了我所有的問題。我會接受你的建議。 我對失去能力的擔憂是基於我無法通過API檢測Asana中的變化的假設。儘管我可以檢測到我們自己的系統發生的變化,現在已經足夠了。 再次感謝您。 – wwv

+0

我是那些等待通過API獲取更改數據的開發人員之一。現在,我每隔20-25分鐘就會對Asana進行一次輪詢,以查看我的工作區中的所有內容 - 限制它當然要符合它們的限制並正確處理429代碼。 – ron