构建RESTful服务代码的正确方法

时间:2017-03-02 12:11:40

标签: java web-services rest jersey

我是使用Jersey编写RESTful服务的新手。以下是示例代码。

我创建了一个“用户”类&把所有东西都放在那个班里

// Service to get the user information

@Path("/User")
public class User {

@GET
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("/getloggedinuser")
    public String getUserInfo(@Context HttpServletRequest httpServletRequest) {

                   // Some code to get the user information
    // Call M1
    M1();
}

private void M1(){
// Some other business logic

// Call another method
M2();
}

private void M2(){
// Some other business logic
}


}

有人可以告诉我更好的方法来构建我的服务。我没有什么想法,但不确定那些实际上是好的还是我应该保留当前的实现。

问题

  1. 服务类(User)具有具体实现。这是一个好主意创建一个接口(比如说IUser)并做一个User类的实现吗?

  2. 我要创建一个控制器类&将IUs​​er作为依赖项注入控制器? Jersey是否提供任何开箱即用的功能来创建控制器类。

  3. 阿图尔

2 个答案:

答案 0 :(得分:0)

有许多指南会在细节上相互矛盾,但在设计REST结构时大部分遵循类似的模式。

我个人在您的实例中使用以下内容:/v1/users如果请求用户具有权限,他们可能会看到系统中所有用户的数组。

我避免将句子写为REST路径。相反,为了获得当前登录用户,我将创建一些

的内容

/v1/users/me

这相当于

/v1/users/123(123是我的user_id)

这是一篇体面的教程文章,涵盖了基础知识。

https://blog.qmo.io/ultimate-guide-to-api-design/

答案 1 :(得分:0)

我经常做的是将Spring和Jersey结合起来。 Jersey处理所有请求/响应和表示(通过工厂和/或构建器)相关的事情。 Spring @Service处理所有业务逻辑,持久性等。

因此,资源接受(或不接受)请求,将其委托给服务(将结果作为模型返回给资源),资源将此模型转换为匹配(Json或XML,或类似的东西) )表示并将其作为响应返回。

我在这里看到的好处是,资源中的清晰通信(和auth),@Service中的业务逻辑,与模型对象的组件间通信以及通过表示对象与客户端的通信。