我有一个REST URI用于资源列表,例如:
http://foo.com/group/users
Run Code Online (Sandbox Code Playgroud)
这些用户中的每一个都有一个序列号,我想公开一种方法,为集合中的所有用户重新编号这些值,并使访问列表的每个人都可以使用此更改.由于这是对整个集合的一个动作,我不知道如何实现这一点.
我可以设想一个类似于URL http://foo.com/group/users?sequence=normalize
但是对于整个列表既不是PUT
也不是POST
真的有意义,除非我使用新数字作为消息数据提交整个集合.
如何以RESTful方式更新整个集合,而无需重新发送集合中的所有更新资源?
首先,我已经阅读了用于搜索的RESTful URL设计以及如何设计RESTful搜索/过滤?的问题.我正在尝试设计更高级的选项,以简单和RESTful方式进行搜索.这些问题的答案给了我一些见解和线索,告诉我如何为搜索/过滤功能设计我以前的应用程序网址模式.
首先,我使用模式为基本过滤选项提出了非常好的简单解决方案:
Equality search: key = val
IN search: key = val1 & key = val2
Run Code Online (Sandbox Code Playgroud)
但随着应用程序的增长,搜索要求也在增长.我最终得到了一些相当不愉快和复杂的网址模式,用于高级搜索选项,其中包括:
Negation search: key-N = val
Like search: key-L = val
OR search: key1-O = val1 & key2 = val2
Range search: key1-RS = val1 & key1-RE = val2
Run Code Online (Sandbox Code Playgroud)
更重要的是,除了过滤器,查询必须获取有关分页和顺序的信息,因此过滤器参数具有F-后缀,按字段排序具有O-后缀,并且分页具有P-后缀.
我希望在这一点上我不必补充说解析这样的请求是相当恶意的任务,如果密钥包含' - '则可能存在歧义.我创建了一些正则表达式来解析它,它现在运行得很好,但......
现在我开始编写一个新的Web应用程序,我有机会从头开始重新设计这个部分.
我想知道在包含所有信息的浏览器中以结构化和不言自明的方式创建对象,并将其作为JSON字符串发送到服务器,如:
filter = {{'type':'like','field':key,'value':val1,'operator':'and','negation':false},..}
Run Code Online (Sandbox Code Playgroud)
但我感到奇怪的是,这不是一个好主意 - 我真的不知道为什么.
所以,这将是我的上下文的定义.现在的问题是:
我正在寻找更简单,更安全的模式来实现高级搜索,包括我上面提到的RESTful GET参数选项 - 你能分享一些想法吗?或者也许是一些关于不以RESTful方式执行此操作的见解?此外,如果你看到JSON方式的一些陷阱,请分享它们.
编辑:
我知道是什么让json成为get参数,不是那么好主意.对它进行编码 - 它使它难看且难以阅读.
由thierry templier发出的链接提供的信息给了我一些思考的东西,我设法在GET参数中设计了更多的有条理和安全的过滤器处理.下面是语法的定义.
对于过滤器 - 多个F参数(每个搜索标准一个):
F = OPERATOR:NEGATION:TYPE:FIELD:VAL[:VAL1,:VAL2...]
Run Code Online (Sandbox Code Playgroud)
允许值: …