【问题标题】:Using service to interface API endpoints in AngularJS在 AngularJS 中使用服务来接口 API 端点
【发布时间】:2017-03-31 16:23:44
【问题描述】:

为了在大型应用程序中分离代码,我实现了一个角度样板。看来我在 Angular 方面的经验不如我在其他 Javascript 框架方面的经验,我想对此方法有一些意见。

使用端点时,事情会变得非常混乱,代码开始使用 AngularJs 重复 ESP。从事其他人的项目,我讨厌看到...

$http({
   method: 'GET',
   url: '/posts'
}).then(function successCallback(response) {
  // code
}, function errorCallback(response) {
  // code
});

所以我构建了一个组件,它基本上是与 http 组件的接口,但应用了我们当前的 restful 标准(正确处理 http 状态)、范围、本地存储等,并结合了一种为端点接口实现服务的方法,该方法严格描述端点和他们将如何适应应用程序。

angular.module('Ripple').service('postModel', [function() {

'use strict';

return {

    /**
     * Rest Endpoint interface
     * @type {Object}
     */
    _rest: {
        getPosts: {
            url: 'http://localhost:3000/posts',
            method: 'GET',
            scopeUpdate: 'posts',
            localStorage: false,
            params: {
                // Endpoint params
            }
        },
        getPost: {
            url: 'http://jsonplaceholder.typicode.com/posts/',
            method: 'GET',
            scopeUpdate: 'post',
            localStorage: false,
            pagination: false,
            params: {
                id: 1
            }
        },
        getError: {
            url: 'https://demo0079948.mockable.io/posts',
            method: 'GET',
            scopeUpdate: 'post',
            localStorage: false,
            pagination: false,
            params: {
                // none
            }
        },
    },

    /**
     * Returns rest objects and allows to extend the params property
     * @param {string} method
     * @param {object} options
     * @return {object}
     */
    endPoint: function(endPointMethod, options) {
        var defaults = this._rest[endPointMethod];
        $.extend(defaults.params, options);
        return defaults;
    }

}

与 restHttpComponent 一起使用

restHttpComponent.request(postModel.endPoint('getPosts', {
   dateFrom: currentDate
}));

任何人都可以看到这样做的负面影响吗?

【问题讨论】:

  • 我不会为你做代码审查,但原则上,这是可行的。我也做同样的事情,但我链接我的方法以便能够调用更深的端点,例如service.one('topic', 1).one('subject', 33).get('comment', 3)。仅供参考,还有 Restangular 可以做同样的事情并且易于使用。
  • 看起来不错,感谢您的反馈

标签: javascript jquery angularjs api frontend


【解决方案1】:

只是尝试将api端点替换为

'https://demo0079948.mockable.io/posts/{id}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2019-01-03
    相关资源
    最近更新 更多