我是使用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
}
}
有人可以告诉我更好的方法来构建我的服务。我没有什么想法,但不确定那些实际上是好的还是我应该保留当前的实现。
问题
服务类(User)具有具体实现。这是一个好主意创建一个接口(比如说IUser)并做一个User类的实现吗?
我要创建一个控制器类&将IUser作为依赖项注入控制器? Jersey是否提供任何开箱即用的功能来创建控制器类。
阿图尔
答案 0 :(得分:0)
有许多指南会在细节上相互矛盾,但在设计REST结构时大部分遵循类似的模式。
我个人在您的实例中使用以下内容:/v1/users
如果请求用户具有权限,他们可能会看到系统中所有用户的数组。
我避免将句子写为REST路径。相反,为了获得当前登录用户,我将创建一些
的内容 /v1/users/me
这相当于
/v1/users/123
(123是我的user_id)
这是一篇体面的教程文章,涵盖了基础知识。
答案 1 :(得分:0)
我经常做的是将Spring和Jersey结合起来。 Jersey处理所有请求/响应和表示(通过工厂和/或构建器)相关的事情。 Spring @Service处理所有业务逻辑,持久性等。
因此,资源接受(或不接受)请求,将其委托给服务(将结果作为模型返回给资源),资源将此模型转换为匹配(Json或XML,或类似的东西) )表示并将其作为响应返回。
我在这里看到的好处是,资源中的清晰通信(和auth),@Service中的业务逻辑,与模型对象的组件间通信以及通过表示对象与客户端的通信。