Javascript 编写JS代码模仿api设计
我们正计划在我的工作场所重建我们的服务,创建一个RESTful API等等。我碰巧遇到了一个有趣的问题:我能用一种模仿API设计的方式来编写JS代码吗 下面是一个例子来说明我的意思: 我们有狗,您可以通过Javascript 编写JS代码模仿api设计,javascript,rest,api-design,Javascript,Rest,Api Design,我们正计划在我的工作场所重建我们的服务,创建一个RESTful API等等。我碰巧遇到了一个有趣的问题:我能用一种模仿API设计的方式来编写JS代码吗 下面是一个例子来说明我的意思: 我们有狗,您可以通过GET/dogs访问这些狗,并通过GET/dogs/{id}获取特定狗的信息 我的Javascript代码将类似于 var api = { dogs : function(dogId) { if ( dogId === undefined ) {
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
方法实际运行这些查询并获取数据
我能想到的构建这样东西的唯一方法是,在执行一个函数时,如果有其他函数链接到对象,但我不知道这是否可能
您对此有何想法?我不能给您一个具体的实施方案,但可以给您一些提示,说明如何实现您的目标。了解您使用的是哪种服务器和框架会很有趣
生成(自己编写或从代码自动生成)描述服务的WADL,然后尝试生成代码,例如使用XSLT
在我使用的REST项目中,它分析一些常见的JavaREST实现并生成JSON描述,您可以将其用作JavaScript API的基础
对于简单的RESTAPI来说可能很容易,但随着API划分为复杂的层次结构或具有树结构,它会变得复杂。那么一切都将取决于您的服务的确切文档。假设您的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调用,但这或多或少是您想要的
我希望这有帮助 像这样的-?罗斯,这不是真的。这个答案似乎只提供了一级深度api调用,比如我的api.dog()
,但不允许我执行api.dog(123.diseases()
)。我不确定我是否已经说得够清楚了=/Pedro,你的确切意思是什么?它必须是那种精确的语法,还是像api.dog(123.diseases().execute()
这样的东西可以接受?检索狗列表的等价物可以是api.dog().execute()
@但我不会对这种语法有任何问题,它实际上会使在执行POST
或DELETE
或其他任何操作时变得更容易,但我真的很好奇,确切的语法就是这样做的一种方法,是的,但是,如果您将请求用作字符串,就像您在疾病
和繁殖
中所做的那样,您将失去自动完成功能。然后你必须不断地查找一些文档,找出哪些方法是允许的,哪些是不允许的。是的,我知道,这就是为什么我说它不是100%正确的。我很擅长制作JS API,但这就是我要做的。我们目前使用的是LAMP堆栈,但我不知道后端会如何改变我的前端实现。另外,我不能完全从你所说的跳到我所想的,你能再详细一点吗?你的问题似乎是你想要一个JS API,它可以自动生成一些带有函数的对象结构,从而简化REST API的使用。我刚才提出了一些如何实现这一目标的想法。当然,您可以自己编写这些方法,但是如果api能够在收到响应时自行“更新”甚至动态生成这些方法,那就太酷了。但这肯定取决于特定的需求和RESTAPI的结构。