有没有办法为 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 堆栈的样板? [关闭]

什么是样板代码、热点代码和热点?

有没有办法在两个栅格堆栈上应用PCA(具有相同的变量)

有没有办法在不使用 ImageMagick 或其他第三方软件的情况下在 R 中制作 GIF?

C++ 错误代码样板的模板与宏

是否有 React/Flux 样板项目或生成器? [关闭]