【问题标题】:Is there a way to generate boilerplate code for RESTful stacks?有没有办法为 RESTful 堆栈生成样板代码?
【发布时间】:2012-06-18 16:37:11
【问题描述】:

随着我对 RESTful API 的深入了解,该方法的(良好)简单性意味着您会生成大量样板代码,并且代码必须在三个或四个不同的地方匹配,例如对于基于 Jersey 的堆栈:

  1. 提供控件的网页上的 HTML(按钮 Create Foo
  2. 网页上的 JS,用于制定 JSON 和创建 Foo 的请求
  3. 一个FooRest类方法来处理请求并创建一个Foo
  4. 要实例化的Foo 类,它将操纵数据结构

是否有工具可以自动为部分或全部代码提供起点,可能从像 JSON 数据结构这样简单的东西开始?例如,提供:

card: {
  methods: [GET],
}
handOfCards: {
  methods: [GET POST PUT DELETE],
}

至少以 Ajax 请求结束,带有指定方法的 CardRest 和 HandOfCardsRest 类,以及带有属性或 getter/setter 的 Card 和 HandOfCards 类?

【问题讨论】:

  • 我真的希望这能得到一个好的答案。我绝对可以使用它!
  • @W.Goeman,然后最好分享答案以使其更具可见性......看起来视图已经停滞不前。

标签: java javascript rest auto-generate boilerplate


【解决方案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 完全无关。
    猜你喜欢
    • 2021-04-13
    • 2010-09-07
    • 2011-07-07
    • 2023-02-04
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多