Java REST:具有不同条件参数的资源的相同端点

Java REST:具有不同条件参数的资源的相同端点,java,spring-boot,rest,Java,Spring Boot,Rest,假设我有一个端点,叫做 /people 顾名思义,它返回一组人。请求者可以添加一个请求参数“q”,它可以有两种可能的语法(比如S1和S2),而不是返回“all”people S1将触发与S2完全不同的特定逻辑 S1接受一组请求参数{P1S1、P2S1、P3S1} S2接受一组与S1集合无关的请求参数{P1S2,P2S2,P3S2} 我可以有这样的签名: public Page<Person> people(@RequestParam String q, String p1s1,

假设我有一个端点,叫做

/people
顾名思义,它返回一组人。请求者可以添加一个请求参数“q”,它可以有两种可能的语法(比如S1和S2),而不是返回“all”people

  • S1将触发与S2完全不同的特定逻辑
  • S1接受一组请求参数{P1S1、P2S1、P3S1}
  • S2接受一组与S1集合无关的请求参数{P1S2,P2S2,P3S2}
我可以有这样的签名:

public Page<Person> people(@RequestParam String q, String p1s1, String p2s1, ..., String p2s2, String p3s2) {
 if (q contains S1 syntax)
   ...
 else (q contains S2 syntax)
   ... 
}   
publicpagepeople(@RequestParam String q,String p1s1,String p2s1,…,String p2s2,String p3s2){
if(q包含S1语法)
...
else(q包含S2语法)
... 
}   
根据q的值,I可以检查后续参数并执行相应的搜索逻辑。我的疑问是,在这种情况下,接口不会被正式解释。换句话说,从界面上看,不清楚什么时候需要哪个参数


是否有一种正确的方法来建模/实现该场景?

如果这两组输入参数也与不同的查询行为和不同的结果相关联,那么我建议只使用两个端点。这些端点的名称是什么?两者都应该是“/people”,因为返回的是相同实体的相同精确表示。我只是将接口的模糊性从参数转移到端点名称。如果不知道真正的端点和参数,我就无法真正有意义地回答您的评论。好的,q=查询字符串,(结果偏移量+页面大小,对于S1),(突出显示,模糊,对于S2,多语言)在REST方面的第一个设计问题:您已经考虑过<代码> /人< /代码>将返回人的特定数据,因此有一个。第二个问题:您将端点视为RPC方法调用,而不是资源调用。如果两组输入参数也与不同的查询行为和不同的结果相关联,那么我建议只使用两个端点。这些端点的名称是什么?两者都应该是“/people”,因为返回的是相同实体的相同精确表示。我只是将接口的模糊性从参数转移到端点名称。如果不知道真正的端点和参数,我就无法真正有意义地回答您的评论。好的,q=查询字符串,(结果偏移量+页面大小,对于S1),(突出显示,模糊,对于S2,多语言)在REST方面的第一个设计问题:您已经考虑过<代码> /人< /代码>将返回人的特定数据,因此有一个。第二个问题:将端点视为RPC方法调用,而不是资源