发送 id 的常规方式是什么——@PathParam 或@HeaderParam 或@QueryParam?
Which is the conventional way of sending id - @PathParam or @HeaderParam or @QueryParam?
我不是要三者之间的区别。我正在开发一个使用 JAX-RS 构建的应用程序。它使用 Hibernate 与数据存储进行交互。每个用户都与一个特定的帐户相关联。
当我删除任何用户时,我必须 return 在删除所请求的用户后该帐户的现有用户列表。我不需要 accountId 来删除用户,但我需要它来在删除用户后将用户列表获取到 return。我对哪种注释可以作为最佳实践感到困惑?
//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 类似于 http://localhost:8080/app/index?param=value
使用
QueryParam
如果 URL 类似于 http://localhost:8080/app/index/value
PathParam
HeaderParam
通常用于获取元数据或头数据。
您可以在控制器中的请求映射中使用 HttpServletRequest object,并在请求的 header 中传递 accID。在控制器中,使用以下方法获取特定 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, HttpServletRequest httpServletRequest) {
userService.deleteUser(userId);
Integer accId = httpServletRequest.getHeader("accId");
return userService.getUsers(accId);
}
你说的三种情况没有标准出路。这完全取决于需求以及您希望如何公开您的 api 和请求参数。而选择完全取决于这些部分。
我认为这在很大程度上是基于意见的,并且取决于用户和帐户之间的关系。
如果一位用户恰好连接到一个帐户,我会这样定义 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);
}
如果同一个用户可能属于不同的帐户,我会将请求分成两个,一个用于删除,另一个用于 return 其余用户:
@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);
}
我不是要三者之间的区别。我正在开发一个使用 JAX-RS 构建的应用程序。它使用 Hibernate 与数据存储进行交互。每个用户都与一个特定的帐户相关联。
当我删除任何用户时,我必须 return 在删除所请求的用户后该帐户的现有用户列表。我不需要 accountId 来删除用户,但我需要它来在删除用户后将用户列表获取到 return。我对哪种注释可以作为最佳实践感到困惑?
//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 类似于 http://localhost:8080/app/index?param=value
使用
QueryParam
如果 URL 类似于 http://localhost:8080/app/index/value
PathParam
HeaderParam
通常用于获取元数据或头数据。
您可以在控制器中的请求映射中使用 HttpServletRequest object,并在请求的 header 中传递 accID。在控制器中,使用以下方法获取特定 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, HttpServletRequest httpServletRequest) {
userService.deleteUser(userId);
Integer accId = httpServletRequest.getHeader("accId");
return userService.getUsers(accId);
}
你说的三种情况没有标准出路。这完全取决于需求以及您希望如何公开您的 api 和请求参数。而选择完全取决于这些部分。
我认为这在很大程度上是基于意见的,并且取决于用户和帐户之间的关系。
如果一位用户恰好连接到一个帐户,我会这样定义 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);
}
如果同一个用户可能属于不同的帐户,我会将请求分成两个,一个用于删除,另一个用于 return 其余用户:
@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);
}