Java 订单管理系统的restapi设计

Java 订单管理系统的restapi设计,java,rest,jersey-2.0,Java,Rest,Jersey 2.0,我正在从事一个使用微服务体系结构的项目 有两种服务: UserAPI:所有与用户相关的东西都到这里来 OMS:所有与订单相关的东西都到这里来 我需要根据以下过滤器提供订单: 按用户Id 按日期 按身份 按用户电话号码 混合上述 所以我创建了一个API path/orders?date=12/11/2016&status=delivered&phone=1111111111 现在我需要按用户ID为用户提供订单。所以,哪一个是好的rest设计: 在现有API的查询参数中添加用户ID

我正在从事一个使用微服务体系结构的项目

有两种服务:

  • UserAPI:所有与用户相关的东西都到这里来
  • OMS:所有与订单相关的东西都到这里来
  • 我需要根据以下过滤器提供订单:

  • 按用户Id
  • 按日期
  • 按身份
  • 按用户电话号码
  • 混合上述
  • 所以我创建了一个API

    path/orders?date=12/11/2016&status=delivered&phone=1111111111
    
    现在我需要按用户ID为用户提供订单。所以,哪一个是好的rest设计:

  • 在现有API的查询参数中添加用户ID,如
    path/orders?user_ID=1
  • 创建一个单独的API路径
    user/{user\u id}/orders

  • 你的两个选择都可以。但是有不同的语义

    path/orders?user_id=1
    
    这是按命令查找的。例如,订单可能会查找以进行一些统计分析。订单可以通过不同的参数进行过滤,用户id就是其中之一。对于这一点(当订单是主要兴趣点时),上面的URI策略很好

    另一方面,您可能希望查找用户并查看他们的订单。也许可以对他们的订购习惯做一些分析。这里您需要用户信息以及他们的订单。这是第二个URI方案更好的地方

    user/{user_id}/orders
    
    这些是属于用户的订单。所以这是一种关系。这就是URI方案工作得更好的地方

    所以这两种选择都没有错。您只需要遵循每一个的语义就可以了