2017-03-03 55 views
0

我們的項目有大約50個API端點。我們的api遵循Rest風格。例如,我們有4種方法的圖像API:GET,POST,DELETE和PUT。爲AngularJS項目組織API服務

目前,我爲每個端點創建了1個服務。每個服務都包含調用API的方法。我們還沒有任何單元測試。這裏是我們服務的一個例子:

export default function userApi(apiHelper, $http, $q) { 
    let self = this; 
    self.getUserData = getUserData; 
    self.getPhoneCodes = getPhoneCodes; 
    self.updateUser = updateUser; 
    // Implementation below 
} 

其他服務只是遵循這種風格。但是現在我擔心這種方法會造成太多的服務。

我的隊友建議我們應該直接在控制器中調用$ http服務。

你認爲這種方式更好嗎? 在此先感謝。

回答

2

這是完全不使用$http控制器內部是一個好主意。特別是在你的情況下,有很多不同的API調用。

如果您使用包含鏈接的API調用的多個服務,如 UserService, ProductService,...,您將把所有調用存儲在一個文件中。

然後,您可以輕鬆地在代碼中的任何位置調用它們。如果有一天你需要,因爲後端改改API調用,你將不得不在一個地方改變它(在服務文件),而不是在每一個地方,你使用它

1

控制器理想情況下,是不是在控制器中使用$http的好主意。 任何業務邏輯都應在factories/services中實施。

下面是我的實現,我一直在我的項目中使用它。

工廠製作服務調用RESTFul API

(function() { 
    angular.module('myApp').factory('serviceFactory', function ($http) { 
     var obj = {}; 
     var serviceUrl = "HOST URL/"; 
     // common service call 
     obj.serviceCall = function (URL, method, reqParam) { 
      var reqObject = { 
       url: serviceUrl + URL, 
       method: method || 'GET', 
       data: reqParam, 
       headers: { 
        'Content-Type': 'application/json' 
       } 
      }; 
      return $http(reqObject) 
       .then(function success(success) { 
        return response.data; 
       }, function err(error) { 
        alert("There was an error occured. Please try again after some time."); 
        return false; 
       }); 
     } 
     return obj; 
    }); 
})(); 

使用的控制器

serviceFactory 
    .serviceCall(CONSTANTS.URL, 'GET', reqParams) 
    .then(function(data) { 
     // data is available 
    }); 
+0

我不太喜歡這種方法。我認爲調用模型時不夠清楚。我認爲閱讀代碼時比較容易閱讀'UserService.getUsers()'而不是'serviceFactory.serviceCall('/ users /','GET',null)' – Weedoze

+0

@Weedoze我同意你的觀點,但是如果我們有更多數量的服務呼叫或終點,組織代碼將會非常繁瑣。所以我更喜歡使用上面的方法:) –

+0

我的隊友也使用類似的實現方式:) – DavidTran

0

與Weedoze完全同意,你不應該把$ HTTP在您的控制器。所以50個端點,每個都有1-4個動詞是很多服務器端功能。實際上,您不太可能想要直接從控制器調節許多功能。如果你爲每個端點提供服務,那麼你是對的,那將會是大量的角度服務。

考慮,可以包含協調職能以及服務分組的相關功能。例如你的用戶服務可以管理(和我正在做一些假端點):

用戶端點 登錄信息端點

它可能包含登錄用戶並返回該配置文件功能用戶(例如)。

0

首先,沒有「太多服務」這樣的事情。

您可以做的最好的事情是遠離您的業務邏輯以及您的控制器的API調用。

如果你開始在你的控制器中使用$ http服務,你最終會在你的洞應用程序中重複你自己。

有一件事我可以添加,雖然是,如果你是按照你的web服務REST的方法,你可以利用好角資源Link)的。

這個庫允許你創建附帶的資源服務最常見的操作服務(保存POST,刪除DELETE,查詢GET收集,得到GET單個對象)和它的超級可擴展以及。