Java 实现RESTfulWeb服务最佳实践?
我正在使用Jersey Restful Web服务。我有以下端点Java 实现RESTfulWeb服务最佳实践?,java,web-services,rest,Java,Web Services,Rest,我正在使用Jersey Restful Web服务。我有以下端点 @Path("/persons") public class PersonWS { private final static Logger logger = LoggerFactory.getLogger(PersonWS.class); @Autowired private PersonService personService; @GET @Path("/{id}") @Pr
@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中实现接口的方法吗?或者不需要在这里编写任何接口
谢谢 拥有接口的唯一一点是提供不同实现的选项。通常,除了主实现之外,唯一的其他实现是用于测试的mock。然而,现代模拟框架可以轻松模拟您的实现类,而不需要单独的接口 在早期,接口对于使用动态代理实现的方法拦截器(SpringAOP)等技术也是必要的,但这种需求被加载时编织和其他现代技术所淘汰
由于这些原因,我发现在接口中维护所有方法的副本的开销在现代应用程序体系结构中没有任何实际好处。拥有接口的唯一一点是提供不同实现的选项。通常,除了主实现之外,唯一的其他实现是用于测试的mock。然而,现代模拟框架可以轻松模拟您的实现类,而不需要单独的接口 在早期,接口对于使用动态代理实现的方法拦截器(SpringAOP)等技术也是必要的,但这种需求被加载时编织和其他现代技术所淘汰
由于这些原因,我发现在接口中维护所有方法的副本的开销在现代应用程序体系结构中没有任何实际好处。拥有接口的唯一一点是提供不同实现的选项。通常,除了主实现之外,唯一的其他实现是用于测试的mock。然而,现代模拟框架可以轻松模拟您的实现类,而不需要单独的接口 在早期,接口对于使用动态代理实现的方法拦截器(SpringAOP)等技术也是必要的,但这种需求被加载时编织和其他现代技术所淘汰
由于这些原因,我发现在接口中维护所有方法的副本的开销在现代应用程序体系结构中没有任何实际好处。拥有接口的唯一一点是提供不同实现的选项。通常,除了主实现之外,唯一的其他实现是用于测试的mock。然而,现代模拟框架可以轻松模拟您的实现类,而不需要单独的接口 在早期,接口对于使用动态代理实现的方法拦截器(SpringAOP)等技术也是必要的,但这种需求被加载时编织和其他现代技术所淘汰
由于这些原因,我发现在接口中维护所有方法的副本的开销在现代应用程序体系结构中没有任何实际好处。提供接口的另一个原因是允许在需要时将控制器插入另一个接口中(例如spring)或者,如果您想共享和分发您的应用程序的契约,那么跨模块:您的契约jar将包含域和接口,而不考虑实现,也不需要将所有实现嵌入到所有模块中
这可以看作是一个很好的实践,因为它提供松散耦合,并准备不断发展和成长,但没有技术需要提供一个接口,如果你不需要它。
< P>提供接口的另一个原因是允许将控制器注入另一个(如果需要的话)(例如用Spring)或者,如果您想共享和分发您的应用程序的契约,那么跨模块:您的契约jar将包含域和接口,而不考虑实现,也不需要将所有实现嵌入到所有模块中这可以看作是一个很好的实践,因为它提供松散耦合,并准备不断发展和成长,但没有技术需要提供一个接口,如果你不需要它。
< P>提供接口的另一个原因是允许将控制器注入另一个(如果需要的话)(例如用Spring)或者,如果您想共享和分发您的应用程序的契约,那么跨模块:您的契约jar将包含域和接口,而不考虑实现,也不需要将所有实现嵌入到所有模块中这可以看作是一个很好的实践,因为它提供松散耦合,并准备不断发展和成长,但没有技术需要提供一个接口,如果你不需要它。
< P>提供接口的另一个原因是允许将控制器注入另一个(如果需要的话)(例如用Spring)或者,如果您想共享和分发您的应用程序的契约,那么跨模块:您的契约jar将包含域和接口,而不考虑实现,也不需要将所有实现嵌入到所有模块中<>这可能是一个很好的实践,因为它提供松散耦合和准备发展和成长,但没有技术需要提供一个接口,如果你不需要它。< / P >马尔科,那么我应该删除一个接口,并与班级单独前进?谢谢对如果在任何时候你碰到了一堵只能通过引入接口才能跨越的墙(不太可能),那么在那里引入接口就足够容易了。Marko,那么我是否应该删除一个接口并单独使用类?谢谢对如果在任何时候你碰到了一堵只能通过引入接口才能穿过的墙(不太可能),那么引入接口就足够容易了