有没有办法为 RESTful 堆栈生成样板代码?
Posted
技术标签:
【中文标题】有没有办法为 RESTful 堆栈生成样板代码?【英文标题】:Is there a way to generate boilerplate code for RESTful stacks? 【发布时间】:2012-06-18 16:37:11 【问题描述】:随着我对 RESTful API 的深入了解,该方法的(良好)简单性意味着您会生成大量样板代码,并且代码必须在三个或四个不同的地方匹配,例如对于基于 Jersey 的堆栈:
-
提供控件的网页上的 html(按钮
Create Foo
)
网页上的 JS,用于制定 JSON 和创建 Foo 的请求
一个FooRest
类方法来处理请求并创建一个Foo
要实例化的Foo
类,它将操纵数据结构
是否有工具可以自动为部分或全部代码提供起点,可能从像 JSON 数据结构这样简单的东西开始?例如,提供:
card:
methods: [GET],
handOfCards:
methods: [GET POST PUT DELETE],
至少以 Ajax 请求结束,带有指定方法的 CardRest 和 HandOfCardsRest 类,以及带有属性或 getter/setter 的 Card 和 HandOfCards 类?
【问题讨论】:
我真的希望这能得到一个好的答案。我绝对可以使用它! @W.Goeman,然后最好分享答案以使其更具可见性......看起来视图已经停滞不前。 【参考方案1】:我认为几乎所有 *rails 应用程序都会为您完成所有这些工作。 Grails 是我现在最喜欢的,一旦完成初始设置(单个命令),您就可以使用另一个命令创建域类。
创建后,您可以生成视图 (html) 和控制器,以使用单个命令来处理所有这些操作,并且样板对于许多初始站点来说已经足够了。它甚至会为您创建测试用例,尽管您需要定义实际测试的功能。您可以很容易地按照惯例对其进行编程,或者从 URL -> 控制器操作创建自己的映射。它有大量的插件支持,并且可以轻松处理内置的表单远程提交(通过 javascript)。
它不需要 json 数据结构来创建,但是域很容易创建(使用 groovy),并且它自动连接 getter/setter、服务注入等,因为它基于 Spring 框架。
【讨论】:
我想要的控制权比 *rails 给我的要多一些,但我想这仍然最接近正确答案。 :-/【参考方案2】:Juan's answer 的替代(或补充),您可能想查看 Knockback.js ,它充分利用了 Knockout 并添加了最好的 Backbone.js 。 Backbone 通过其“同步”功能支持 RESTful API。引用他们的网站:
Backbone.sync的方法签名是sync(method, model, [选项])
method – the CRUD method ("create", "read", "update", or "delete") model – the model to be saved (or collection to be read) options – success and error callbacks, and all other jQuery request options
【讨论】:
【参考方案3】:您的目标可能不应该是生成样板代码,而是实际编写更少的代码。
Spark是一个基于Sinatra的Java微web框架。
下面是一些示例代码:
import static spark.Spark.*;
import spark.*;
public class HelloWorld
public static void main(String[] args)
get(new Route("/")
@Override
public Object handle(Request request, Response response)
// .. Show something ..
);
post(new Route("/")
@Override
public Object handle(Request request, Response response)
// .. Create something ..
);
put(new Route("/")
@Override
public Object handle(Request request, Response response)
// .. Update something ..
);
delete(new Route("/")
@Override
public Object handle(Request request, Response response)
// .. annihilate something ..
);
options(new Route("/")
@Override
public Object handle(Request request, Response response)
// .. appease something ..
);
【讨论】:
您能帮我理解这如何帮助构建 RESTful 框架的前端和后端吗?我错过了一些东西...... 它大大简化了后端。 Rails 是解决您当前问题的简单直接的解决方案(例如,rails generate scaffold
),但您说您目前正在使用 Jersey,所以我认为您可能更喜欢基于 Java 的解决方案。用过 Jersey,我会全心全意地推荐像 Spark 这样的东西。【参考方案4】:
你试过Backbone.js吗?它是一个为您处理 REST Ajax 请求的 JavaScript 库。它允许您定义模型来包装数据并提供 setter、getter、保存和删除功能等。
它还允许您将模型绑定到生成 UI HTML 的视图。
【讨论】:
嗯,很有趣。肯定是半途而废。再加上一个较小的 perl 脚本可能会起作用。 ;) 我之前没有真正看过骨干网,但对于 grails 后端来说,这似乎是一个很棒的前端,我在下面的回答中提到了这一点。【参考方案5】:您可能想完全尝试不同的方法并尝试像project lombok 这样的想法。它至少可以让你取消所有的 getter 和 setter。
【讨论】:
这是一个开始,尽管实际上我的 IDE 会自动插入 getter/setter。但让我感到恼火的是所有的注释和方法。也许我会写一个 perl 脚本。 ;) 这并不能真正回答问题。无论如何,这与 REST 完全无关。以上是关于有没有办法为 RESTful 堆栈生成样板代码?的主要内容,如果未能解决你的问题,请参考以下文章
SailsJS 是不是有类似 MEAN 堆栈的样板? [关闭]