2016-09-26 74 views
5

場景: 我有一個Node和Angular web應用程序。 它需要調用一個外部API(第三方服務)來獲取數據(更具體地說是:https://api.represent.me/api/questions/)。來自前端或後端的外部API調用?

問: 是更好地從角前端使這種外部電話:GET http://thirdpartyservice.com/api/data或具有前端調用同一域節點端點:GET http://example.com/node-backend-api,然後調用GET http://thirdpartyservice.com/api/data然後它會從第三方處理數據api在將它傳回角度之前?

思考:

  • 我想兩個API調用是不太理想的,但它是在同一個域 所以就這算不上是一個問題?
  • 從節點端獲取會更安全(尤其是在使用祕密密鑰 時),並且還掩蓋了使用第三方服務的事實 。
  • 如果從前端調用,CORS的東西可能會阻礙。
  • 這裏是關鍵詞,例如,從 前端調用字體apis可能是最好的,但從後端獲取並需要處理數據 可能會更好。

其他人推薦(和做)什麼,有沒有其他的贊成或反對點「思想」?

+0

我會說它取決於什麼樣的第三方服務和你使用它們:)所有的前端依賴應該從前端調用,並從後端調用所有的後端依賴。 – Andurit

+0

如果你不想處理來自API的響應,那麼前端將做。但是,如果您從後端調用API,則可以更靈活地處理響應(當您獲得大量數據時很有用),過濾,添加額外數據等,並在服務器的額外負載上妥協。這取決於你想要做什麼與響應:) –

+0

所有非常有幫助的,是對數據的額外處理,並且可能同時向數據庫添加數據肯定會成爲後端的工作。我認爲從前端調用前端依賴關係和後端後端依賴關係來看它是一種很好的方式來看待它 – timhc22

回答

2

這取決於你的第三方API需要什麼。

如果您需要某些憑證來調用API,那麼可能會因爲安全問題而在後端處理呼叫。

如果API提供時間敏感數據,就像您輸入的一些自動完成信息一樣,最好不要往返後端進行額外往返並從前端調用它。

您可以創建一個指向第三方服務器的子域 ,如3rdparty-api.yourdomain.com,這樣可以消除很多跨域問題。但是這需要你的第三方供應商的合作。

因此,沒有明確的是或否的答案,但它取決於您的API的情況和重點。

+1

有趣的是,我從來沒有想過創建一個子域來嘗試和消除跨域問題,將看看這個 – timhc22

+0

該子域是一個有趣的想法,但我認爲很多API比定製CNAME更可能已經支持CORS。話雖如此,如果他們的API在不需要主機名的情況下對IP地址做出響應......那麼就不會有任何事情阻止你;) –

1

您的解決方案看起來很好,唯一可能出現的問題是如果您使用的第三方API提供任何類型的分析。如果從節點調用它,則將覆蓋從UI調用時將收集的代理和IP信息。除此之外,我相信直接從UI發出請求可以減少服務器上的負載,但我不知道這對您是否重要。

0

我會說我們也應該關心代碼重複。在你的情況下,你都是JavaScript,但對於其他人來說並不是這樣。假設我使用api.github.com,所以我不想從前端和後端進行一些調用,那麼我認爲創建一個處理所有這些的控制器是一個不錯的選擇。

除了像任何分析或跟蹤軟件的情況下,額外的往返行程是可以的。

正如@沃爾夫克所說,這也可以防止發送access_token到可能被濫用的瀏覽器。