Java 使用GET-REST调用查找所有相关对象

Java 使用GET-REST调用查找所有相关对象,java,jersey,jersey-client,Java,Jersey,Jersey Client,我使用Jersey作为我的RESTfulWeb服务框架。 为了搜索数据库中的对象,我进行了两次新的@GET-REST调用。 这些REST调用应该服务于两个不同的组件 第一个组件的详细信息中包含用户id 第二个组件包含电子邮件的详细信息 电子邮件和用户id是两个不同的唯一标识符 一个选项是使用不同的路径启用两个不同的@GET REST调用,例如: ".../api/users/search/id/:user_id" ".../api/users/search/email/:email" 为了

我使用Jersey作为我的RESTfulWeb服务框架。 为了搜索数据库中的对象,我进行了两次新的@GET-REST调用。 这些REST调用应该服务于两个不同的组件

  • 第一个组件的详细信息中包含用户id
  • 第二个组件包含电子邮件的详细信息
电子邮件用户id是两个不同的唯一标识符

一个选项是使用不同的路径启用两个不同的@GET REST调用,例如:

".../api/users/search/id/:user_id"
".../api/users/search/email/:email"
为了使它尽可能简单,并且对于将来的需求更通用,我正在寻找一种方法,将这两个REST调用合并到一个路径,在其QueryParam中使用不同的标识符

在搜索了一个很好的例子,以及此类REST调用的最佳实践之后,我不确定这样的合并是否是一种好的实践

我不确定的主要问题是如何构建尽可能通用的路径。 问题是:

  • 在一个REST调用中将这两个不同的路径合并到一个路径是一种好的做法吗?如果是,请提供一个例子
  • 如果合并这些路径是一种不好的做法,那么我应该如何处理将来使用新标识符进行搜索的功能请求?为每个标识符构建新的REST调用的想法听起来有问题

  • 好的,一个解决方案是向uri添加新的queryParameters,从而使用户能够使用相同的资源,但使用新的参数,例如:/uri/search/email?aa@aa.com&user\u id=userAdam

    然后,服务器端需要用相同的方法处理所有这些不同的场景。因此,您将深入研究if/else/switch类型的事物

    然后必须处理返回的JSON对象。显然,如果你有一个合同,你需要遵守它,因此如果客户期望完全不同的响应,那么很难从一个资源中交付它们。因此,如果电子邮件查询响应与用户id查询响应明显不同,那么从同一资源返回它可能会很麻烦


    我的五美分。也许我误解了您。

    我正在寻找一种解决方案,每次只需要一个查询参数。您正朝着我想要的方向发展,但我不确定是否将2个或多个REST调用合并到一个通用REST调用中是一种好的做法。您的意思是,像searchParam=随便什么,然后您的searchParam可以有不同种类的名称?合并的优点是可以避免一直创建新路由。想象一下你的客户机有10个不同的搜索选项,为它做10个URI看起来很麻烦。我不认为这里有任何书面规定,只是你觉得最适合你的。对我来说,如果每个问题的回答都非常相似,我会提供一个资源。但有时在我们的业务范围内,人们往往对某些东西有非常强烈的意见:)