[英]Creating API factory with SwaggerJS
因此,我擁有這個由來已久的APIService工廠,該工廠創建函數以通過swagger函數傳遞給UI。 這是工廠的片段:
'use strict';
angular.module('myApp').factory('APIService', function ($http, $window, $q, swaggerClient, $mdToast) {
var ApiDoc = {};
ApiDoc.getAllBookmarks = function () {
return $q(function (resolve, reject) {
$http.get('client/components/api/Schema.json')
.success(function (data) {
var schema = data;
_.each(schema.apis, function (b) {
b.apiDeclaration.basePath = $window.location.origin;
})
var api = swaggerClient(schema);
api = api.apiBookmarks.getAll();
resolve(api);
});
});
}
return ApiDoc;
});
以下是控制器中的用例片段:
$scope.getAllDashboards = function () {
APIService.getAllBookmarks().then(function(data){
if (data.length > 0){
$scope.dashboardsList = data;
$scope.emptyDash = false;
} else {
$scope.emptyDash = true;
}
})
}
$scope.getAllDashboards();
這里的固有問題是,如果我在控制器中有30個API函數調用,那么實際上不需要30個對schema.json的$ http請求。 問題是我無法弄清楚如何請求/存儲該json並以與現在相同的方式昂首闊步地調用函數(否則我必須在控制器中更改200多個方法,urgh)。 我嘗試了這個:
// var api = null;
// $http.get('client/components/api/Schema.json')
// .success(function (data) {
// var schema = data;
// _.each(schema.apis, function (b) {
// b.apiDeclaration.basePath = $window.location.origin;
// })
// api = swaggerClient(schema);
// });
但是之后無法獲得功能以正確讀取它,或者無法像控制器期望的那樣以承諾的形式返回函數調用的結果。
我這里沒有其他JS開發人員,因此我需要大家的幫助! 非常感謝!
太丑了 如果您將swagger-client升級到更現代的版本,則可以有一些選擇。
首先,您可以將架構作為對象進行緩存,並使用參數spec
將其提供給swaggerClient構造函數。 構造目標主機時,仍然需要將目標主機的URL傳遞給客戶端。 這樣,就不需要遠程調用任何東西了。
接下來,您將看到有關保留適當的swaggerClient實例的信息,並在每個調用中使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.