【问题标题】:REST API separate endpoint for search and filter用于搜索和过滤的 REST API 独立端点
【发布时间】:2021-06-13 18:42:09
【问题描述】:

我为一个简单的市场制作了一个 web 应用程序。我有三个不同的功能:搜索、过滤、按键过滤。这些函数中的每一个都包含不同的查询参数。我的问题是我应该如何以休息的方式分离这些端点?

例如,这是我的搜索端点:

API.get('/product/',{params:querydata})

在搜索时我得到这些查询参数:

{
  skip: '0',
  limit: '8',
  searchTerm: '',
  filters: '{"minPrice":1,"maxPrice":250000}'
}

但是当我使用过滤器功能时,查询参数会是这样的:

{
Color:'Red',
Type:'Car'
}

当我使用 keyfilter 功能时,我将拥有

{
filters:['red','black','bmw']
}

对此的正确方法是什么?在我使用 post 来区分过滤器和搜索之前,但现在我正在尝试转换为 rest api。提前致谢。

【问题讨论】:

  • 有什么问题?如果您正在使用某些库(Angular、React)-它将从您的参数构建查询字符串。如果没有 - 您可能需要自己生成查询字符串。无论如何,它将是 /product/?skip=0&limit=8&minPrice=1... 然后在服务器端,您必须理解参数,例如如何将 'red','black','bmw'ANDOR 结合使用
  • 您可以添加另一个参数,例如type:'search',然后根据各种类型有不同的逻辑
  • @Felix 主要问题是我的查询参数是动态变化的,所以在我的服务器端我不知道如何引用该参数。但也许我理解错了,确实我将 React 与 Node.js/Express 后端一起使用,如果你能提供一些示例,我将不胜感激。 @charlietfl 这个类型可能是个好主意,我之前也这么认为。
  • 查询参数是总是动态生成的——所以它本身不是问题。我的堆栈不同(Angular / .NET) - 所以我无法给出答案。但可能你需要修改这个问题。 “这是我的客户端 React 代码;这是我的服务器端 Express 代码;这就是问题所在”。因此,您的标签也会有所不同。
  • @MrNobody - 你的 Node/Express GET 路线是什么样的?

标签: javascript rest


【解决方案1】:

我的问题是我应该如何以休息的方式分离这些端点?

REST 没有“端点”。它有resourcesresource identifiers

什么是正确的方法?

对于所有这些,您应该使用 GET(请求的语义实际上是只读的),并将您需要的参数嵌入到 URIsomewhere 中。参数在 URI 中的位置很大程度上取决于您。

在网络上,我们通常希望选择能够轻松支持网络搜索表单的标识符,这通常意味着将参数描述为键值对列表,因此您最终会得到如下内容:

GET /product/?Color=Red&Type=Car

如果您不需要“正常工作”的 Web 表单,那么您可以有更多选择来构建资源标识符。您最好的选择是RFC 6570 所描述的那些,因为支持 URI 模板的通用库已广泛可用。

从 REST 的角度来看,URI 的实际拼写并不重要,因此您可以选择最适合您需要的拼写。有取舍;您可能会发现您当前的框架更喜欢某些拼写而不是其他拼写,但不同的拼写可能更适合操作员阅读访问日志或创建从一个资源到另一个资源的相对引用。

很多可能性都很好,只要拼写与production rules described in RFC 3986 一致,并且您不要尝试对两种不同的资源使用相同的标识符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 2019-06-06
    • 2020-01-03
    • 2015-11-30
    • 2019-07-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    相关资源
    最近更新 更多