我并不是要要求这三者之间有区别。我正在使用JAX-RS构建的应用程序上。它使用Hibernate与数据存储进行交互。每个用户都与一个特定帐户相关联。
删除任何用户时,删除请求的用户后,我必须返回该帐户现有的用户列表。我不需要accountId来删除用户,但是我需要它来获取删除用户后返回的用户列表。我对哪种注释将是最佳做法感到困惑?
//Sending accountId in path variable
@DELETE
@Consumes(MediaType.APPLICATION_JSON)
@Path("/user/{accId}/{userId}")
public List<Users> deleteUser(@HeaderParam("token") String token, @PathParam("accId") Integer accId, @PathParam("userId") Integer userId) {
userService.deleteUser(userId);
return userService.getUsers(accId);
}
//Sending accountId in header
@DELETE
@Consumes(MediaType.APPLICATION_JSON)
@Path("/user/{userId}")
public List<Users> deleteUser(@HeaderParam("token") String token, @HeaderParam("accId") Integer accId, @PathParam("userId") Integer userId) {
userService.deleteUser(userId);
return userService.getUsers(accId);
}
//Sending accountId as query string
@DELETE
@Consumes(MediaType.APPLICATION_JSON)
@Path("/user/{userId}")
public List<Users> deleteUser(@HeaderParam("token") String token, @QueryParam("accId") Integer accId, @PathParam("userId") Integer userId) {
userService.deleteUser(userId);
return userService.getUsers(accId);
}
最佳答案
我认为这很大程度上是基于意见的,并且取决于用户和帐户之间的关系。
如果只有一个用户连接到一个帐户,则可以这样定义URL:
@DELETE
@Consumes(MediaType.APPLICATION_JSON)
@Path("/account/{accId}/user/{userId}")
public List<Users> deleteUser(@HeaderParam("token") String token, @PathParam("accId")
Integer accId, @PathParam("userId") Integer userId) {
userService.deleteUser(userId);
return userService.getUsers(accId);
}
如果同一用户可能属于不同的帐户,我会将请求分为两个请求,一个请求删除,另一个请求返回其余用户:
@DELETE
@Consumes(MediaType.APPLICATION_JSON)
@Path("/user/{userId}")
public void deleteUser(@HeaderParam("token") String token, @PathParam("userId") Integer userId) {
userService.deleteUser(userId);
}
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Path("/user")
public List<Users> getUsers(@HeaderParam("token") String token, @QueryParam("accId") Integer accId) {
return userService.getUsers(accId);
}