设计API以使用Jersey启动和停止进程

问题描述 投票:1回答:4

我正在使用Java和Jersey开发REST Web服务器。这是我的第一个Web应用程序,我想确保我正在构建应用程序。我创建了第一个运行良好的函数:

@Path("/startAuto") 
public class Rest {

    @GET
    public String startAuto() {
        try {
            ProcessBuilder pb = new ProcessBuilder("/startAuto.sh");
            Process p = pb.start();     
            p.waitFor();                
            return ("Auto Started");
        } catch (Exception e) {
            e.printStackTrace();
            return ("error");
        }
    }
}

我想添加一个像stopAuto这样的新功能。

哪个更干净:在这个类中添加函数还是创建一个新类?

java jersey
4个回答
2
投票

正如peeskillet在他的评论中指出的那样,这取决于你想要如何构建你的URL

如果你想要类似的东西

/ auto / start和

/自动/停止

我会按照以下结构编写一个类

@Path("/auto") 
public class Rest {

    @GET
    @Path("/start")
    public String startAuto() {

    }

    @GET
    @Path("/stop")
    public String stopAuto() {

    }
}

0
投票

良好的结构对于任何好的项目/产品都是必不可少的,但它也是一个问题,其答案因情况而异。但是,如果有疑问,一个好的起点是按照“职责”对端点进行分组。如果它们属于一起,则将它们放在同一个类中。

个人意见:Boundary-Control-Entity是我可以找到的最简单的起点,用于启动项目。然后结构根据需要进行调整。看看来自Adam Bien的article,了解更多想法。


0
投票

通常,最好将与当前资源相关的另一个函数放入同一个类中。

但是你也应该记住,REST使用资源而不是函数(名词而不是动词)。因此,使API更加RESTfull可能是有意义的:

  1. 您定位资源这是一个自动。所以它可以通过URL“/ auto”访问
  2. 函数“start”和“stop”用于更改资源的状态。因此,这意味着您拥有可以通过URL“/ auto / state”访问的auto的“子资源”,其中包含可能的值,例如“已启动”,“已停止”。 GET可以访问此值:/ auto / state
  3. 现在可以使用具有状态值的PUT / POST请求以REST样式更改状态(也可以使用PATCH方法以部分更新auto)。也许,在您的情况下,将一个方法暴露为端点消耗状态值并调用逻辑以根据参数启动或停止自动是有意义的。
© www.soinside.com 2019 - 2024. All rights reserved.