我们计划在我的工作场所重建我们的服务,创建一个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的疾病?
我想到的最简单的方法是让我的方法实际构建查询而不是检索数据,并使用get
或run
方法来实际运行这些查询并获取数据。
我能想到构建这样的东西的唯一方法是,如果我能以某种方式,在执行函数时,如果某个其他函数被链接到该对象,但我不知道这是否可能。
您对此有何看法?
答案 0 :(得分:0)
我不能给你一个具体的实现,但有一些提示你如何能够实现你想要的。知道你正在使用什么样的服务器和框架会很有趣。
简单的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调用,但它或多或少与您相关。
我希望这有帮助!