繁体   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