2017-03-02 89 views
1

我是使用Jersey编写RESTful服务的新手。以下是示例代码。构建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. 服务类(用户)的具体落实。这是一个好主意,创建一个接口(比如IUser)并执行User类的实现?

  2. 我应该创建一个控制器类&注入IUser作为控制器中的依赖关系吗? Jersey是否提供任何开箱功能来创建控制器类。

阿图尔

回答

0

我经常做的就是春节和泽西结合起来。 泽西岛处理所有请求/响应和表示(通过工厂和/或生成器)相关的东西。 Spring @Service处理所有业务逻辑,持久性等。

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

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

+0

这也可能有所帮助:https://www.toptal.com/spring/top-10-most-common-spring-framework-mistakes – sschrass

0

有很多指导方针,在那里,将相互矛盾的细节,但基本上遵循类似的模式,当涉及到设计你的REST结构。

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

我避免把句子写成REST路径。相反,让登录的用户的当前我将创建沿着

/v1/users/me

线的东西这将相当于

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

这里有一个像样的文章教程涵盖基础知识。

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