2016-12-06 80 views
0

我遇到了一個需要幫助的問題(我以前從未遇到過這個問題,也找不到任何以前的相關問題)。託管在多個服務器上的REST API

在PHP應用程序被命名就像01.example.com, 02.example.com

現在不同的服務器上,有使用這個應用程序(軟件即PHP編寫的服務),很多客戶端,每個客戶都有自己的數據庫託管在一個特定的服務器 - 客戶端數據庫存在於01.example.com和客戶端02.example.com第B數據庫中存在(這客戶端屬於被存儲哪個服務器在共享數據庫)

我想創建與URL的REST API等http://HOST/api/resourceshttp://01.example.com/api/resourceshttp://02.example.com/api/resources

如何使api URL/URI獨立於主機(例如(http://example.com/api/resources))?

我能想到幾個方案的 -

  1. 在收到第一要求,從共享數據庫客戶端獲取服務器的位置,然後發送重定向。
  2. 或者在使用REST如http://01.example.com/api/resources時向客戶端詢問用戶服務器特定的URL/URI。 (但是當客戶機被遷移到不同的服務器,他們的代碼將打破,直到他們改變的URL到新的服務器)

這聽起來令人困惑(因爲它沒有對我也一樣),我發現它很難爲這種情況設計解決方案。

+2

這兩個選項,你能想到的是唯一可能的選擇... – Narf

回答

0

您可以將URL的應用程序ID(或客戶端ID或任何您的標識符以選擇數據庫)添加到URL中。 http://example.com/1/api/resourceshttp://example.com/2/api/resources,並通過NGINX,haproxy,F5或任何其他代理或路由器重定向所有HTTP請求。問題是您必須每次重新配置代理以遷移應用程序。

通常,如果您可以將所有這些數據庫合併到一個數據庫中,您將節省很多麻煩。 如果出於性能原因分開數據庫,請考慮對所有隻讀請求使用只讀從站。

更多REST API服務器準則:http://example.com/1/api/resources