簡體   English   中英

使用SwaggerJS創建API工廠

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM