编写JS代码来模仿api设计

时间:2014-04-24 20:52:29

标签: javascript rest api-design

我们计划在我的工作场所重建我们的服务,创建一个RESTful API等等,我碰巧遇到了一个有趣的问题:我能否以模仿我的API设计的方式制作我的JS代码?

这是一个说明我的意思的例子:

我们有狗,你可以访问那些GET /dogs的狗,并通过GET /dogs/{id}获取特定的狗。

我的Javascript代码就像是

var api = {
    dogs : function(dogId) {
        if ( dogId === undefined ) {
            //request /dogs from server
        } else {
            //request /dogs/dogId from server
        }
    }
}

如果该代码很精致且花花公子,我只需拨打api.dogs()api.dogs(123)即可获得我想要的信息。

现在,让我们说这些狗有一系列可以通过GET /dogs/{id}/disases获取的疾病(或其他任何东西)。有没有办法修改我的Javascript,以便之前的调用保持不变 - api.dogs()返回所有狗,api.dogs(123)返回狗123的信息 - 同时允许我执行api.dogs(123).diseases()之类的操作列出狗123的疾病?

我想到的最简单的方法是让我的方法实际构建查询而不是检索数据,并使用getrun方法来实际运行这些查询并获取数据。

我能想到构建这样的东西的唯一方法是,如果我能以某种方式,在执行函数时,如果某个其他函数被链接到该对象,但我不知道这是否可能。

您对此有何看法?

2 个答案:

答案 0 :(得分:0)

我不能给你一个具体的实现,但有一些提示你如何能够实现你想要的。知道你正在使用什么样的服务器和框架会很有趣。

  1. 生成(自己编写代码或自动生成代码)描述服务的WADL,然后尝试使用XSLT生成代码
  2. 在我的REST项目中,我使用swagger来分析一些常见的Java REST实现并生成JSON描述,您可以将其用作JavaScript API的基础
  3. 简单的REST Apis可以很容易,但由于API分为复杂的层次结构或具有树结构,因此变得复杂。然后一切都取决于您的服务的确切文档。

答案 1 :(得分:0)

假设您的JS应用程序知道REST API提供的服务,即发送描述服务的JSON或XML文件,您可以执行以下操作:

var API = (function(){
    // private members, here you hide the API's functionality from the outside.

    var sendRequest = function (url){ return {} }; // send GET request

    return {
        // public members, here you place methods that will be exposed to the public.

        var getDog = function (id, criteria) {
            // check that criteria isn't an invalid request. Remember the JSON file?
            // Generate url
            response = sendRequest(url);
            return response;
        };
    };
}());

var diseases = API.getDog("123", "diseases");
var breed = API.getDog("123", "breed");

上面的代码不是100%正确,因为您仍然需要处理AJAX调用,但它或多或少与您相关。

我希望这有帮助!