实施REStful Web服务最佳实践?

时间:2013-12-23 12:43:12

标签: java web-services rest

我正在使用Jersey Restful webservices.I有低于终点。

@Path("/persons")
public class PersonWS {
    private final static Logger logger = LoggerFactory.getLogger(PersonWS.class);

    @Autowired
    private PersonService personService;

    @GET
    @Path("/{id}")
    @Produces({MediaType.APPLICATION_XML})
    public Person fetchPerson(@PathParam("id") Integer id) {
        return personService.fetchPerson(id);
    }

    @POST
    @Path("/add")
    @Consumes(MediaType.APPLICATION_XML)
    @Produces (MediaType.APPLICATION_XML)
    public Person addPerson(Person person) {
        personService.addPerson(person);
        return person;
    }
}

上面的类没有实现任何接口。我应该首先编写一个接口并在PersonWS.java中实现接口的方法吗?或者不需要在这里写任何界面?

谢谢!

2 个答案:

答案 0 :(得分:2)

拥有接口的唯一要点是提供不同实现的选项。除了主要实现之外,通常唯一的其他实现是用于测试的模拟。但是,现代的模拟框架很容易模拟你的实现类,而不需要单独的接口。

在早期,接口对于使用动态代理(Spring AOP)实现的方法拦截器等技术也是必需的,但这一要求已经被加载时编织和其他现代技术所淘汰。

由于这些原因,我发现在现代应用程序体系结构中任何真正的好处都没有证明在接口中保留所有方法的副本的开销。

答案 1 :(得分:0)

提供接口的另一个原因是允许在需要时将控制器注入另一个控制器(例如使用spring),或者如果要共享和分配应用程序的合同(模块):合同jar将包含域和接口 - 不考虑实现,也不需要在所有模块中嵌入所有实现。

这可以被视为一种良好的做法,因为它提供了松散耦合并准备不断发展和成长,但如果您不需要它,则无需提供接口的技术需求。