Postgresql REST API何时使用查询参数或请求参数?

Postgresql REST API何时使用查询参数或请求参数?,postgresql,rest,express,Postgresql,Rest,Express,我有一个数据库,其中有一个表,其中包含训练计划。数据示例如下所示: { id: 1, level: 'beginner' week_index: 1 }, { id: 2, level: 'beginner' week_index: 2 }, { id: 3, level: 'advanced' week_index: 1 } 使用week\u index和level获取特定项目的最佳方式是什么。这些是我目前的想法,但我不知道RESTAPI的最佳实践 /wo

我有一个数据库,其中有一个表,其中包含
训练计划
。数据示例如下所示:

{
  id: 1,
  level: 'beginner'
  week_index: 1
},
{
  id: 2,
  level: 'beginner'
  week_index: 2
},
{
  id: 3,
  level: 'advanced'
  week_index: 1
}
使用
week\u index
level
获取特定项目的最佳方式是什么。这些是我目前的想法,但我不知道RESTAPI的最佳实践

/workout-plans?level=beginner&week=1
/workout-plans/beginner/1
/workout-plans/beginner?week=1
解决方案1:我建议:
我认为,你应该使用
/锻炼计划?级别=初学者&周=1
。因为,通过这种方式,很明显您正在从
训练计划
控制器请求数据


解决方案2,另一种方式: 或者,您可以使用:
/训练计划/水平/初学者/每周/1

例如:在
Rails
中,路线配置可以如下所示:
/workout plan/level/:level/week/:week



我希望,这会有所帮助。

首先为每个HTTP动词添加意义

  • 使用GET可以列出并找到一个结果
  • 使用POST插入
  • 放置补丁以进行更新
  • 使用DELETE删除某个键下的数据
避免使用路径参数作为过滤器,而更喜欢使用查询参数

构建一个rest客户机来依赖这样的契约是相对简单的

此外,还欢迎使用具有适当默认值的特殊查询参数,如页面和页面大小

由于您正在设计API,请尝试返回有意义的状态代码和消息


这有更详细的信息,对于其他一些观点,请参见此,选择HATEOAS。

/workout plan/
是训练计划列表的路径。所以它总是返回一个列表,即使只有一个结果

因此
/workout plan/?level=初学者&周=1
产生1个结果,但作为列表

如果这是解决其中一个问题的理想方法(按级别和星期,而不是按id),那么获取其中一个问题的URL应该是

/workout-plans/1/beginner/
/workout-plans/beginner/1/
/workout-plans/beginner-1/
或者类似的


我更喜欢最后一个,因为它不建议在完整列表和详细路径之间有一个级别;如果您选择第一个,那么如果有人询问
/workout plan/1/
,该怎么办

获取特定项的RESTful方法是创建一个表单。你知道,就像网上的表格。在这个“搜索表”中,客户将输入周和级别,并将得到一个结果或重定向到适用训练列表

结果页面的确切URI是不相关的,尽管您的第一个带有路径参数的解决方案与普通HTML表单兼容,因此这将与HTML GET表单一起开箱即用,这很好

总的来说,请始终考虑您将为人类创建哪些HTML页面,通常您也应该为REST客户端创建这些页面


除非您只需要HTTP上的纯JSON,否则就没有这样的限制。

因为训练计划是您的项目,其余的筛选标准我会选择:/workout plan?level=初学者&week=1所有这些都有id:1?这很不寻常。级别和周指数的组合是唯一的吗?@RemcoGerlich oops这是我的错。。修复了它。没有回答问题。我会说/workout plan/1将是
/workout plan/:id
-它将获取行的id。所以这就是我想要避免混淆的地方!查询参数似乎更好
/workout plan?level=初学者&week=1
似乎是您所说的最好的方法,因为您知道它来自哪个控制器。谢谢@欢迎光临。