Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
就如何在REST应用程序中通过查询字符串传递分组参数征求建议_Rest - Fatal编程技术网

就如何在REST应用程序中通过查询字符串传递分组参数征求建议

就如何在REST应用程序中通过查询字符串传递分组参数征求建议,rest,Rest,比如说,我的后端应用程序需要三个参数来创建一个对象,并将其作为JSON返回 http://server/app/resource.json?a=foo&b=3&c=bar 我的应用程序中还有另一个功能,可以获取从上述URI返回的对象,并将其“转换”为不同的对象。目前,我正在做以下工作 http://server/app/resource.json?a=foo&b=3&c=frob&transform_to=blarg 这对我来说不是很直观。我想知道我是

比如说,我的后端应用程序需要三个参数来创建一个对象,并将其作为JSON返回

http://server/app/resource.json?a=foo&b=3&c=bar
我的应用程序中还有另一个功能,可以获取从上述URI返回的对象,并将其“转换”为不同的对象。目前,我正在做以下工作

http://server/app/resource.json?a=foo&b=3&c=frob&transform_to=blarg
这对我来说不是很直观。我想知道我是否可以做一些像

http://server/app/resource.json?in={a:foo,b:3,c:frob}&out={c:blarg}
如果您对此有任何建议,我将不胜感激


更有趣的是,如果我可以从一个URI获取输出并将其作为输入传递给另一个URI,但我想我们还有很长的路要走。

用REST术语来说,您所做的完全错误,原因有几个

我的应用程序中还有另一个功能,可以获取从上述URI返回的对象,并将其“转换”为不同的对象

您可以拥有单个资源的多个表示,尽管将其“转换”到不同的对象已经意味着您正在谈论不同的资源

要解决这个问题,您至少需要创建不同的资源,以生成不同的对象。例如:

您正在将操作(即转换)直接编码为URL。这不是REST,这是非常常见的RPC。对于HTTP,您需要依赖于统一接口,并且只使用GET/POST/PUT/DELETE方法(动词)

同样,创建不同的资源,即接受查询参数的/blarg.json,将更加简洁,并且可以避免在URL中传递操作

{a:foo,b:3,c:frob}&out={c:blarg}

这种参数“{a:foo,b:3,c:frob}”没有多大意义。如果您的后端系统知道它依赖于哪些参数,为什么不使用这种更干净、更自然的方法呢?“a=foo&b=3&c=bar”

在本例中,将“&out={c:blarg}”转换为“&format=blarg”将部分修复上述操作问题,尽管这仍然意味着您的资源有两种单一媒体类型(本例中为application/json)的变体(而非表示)。这在逻辑上引导我们创建不同的资源,而不是将现有资源转换为不同的对象

更有趣的是,如果我可以从一个URI获取输出并将其作为输入传递给另一个URI,但我想我们还有很长的路要走

是的,这是绝对合法的,但这取决于你将如何实施这种行为

===========================================================================================


在基于HTTP协议的RESTfulWeb服务上工作时,主要目标是依赖HTTP语义,并始终避免在其上构建额外的规则。soapweb服务就是一个很好的例子(这并不意味着SOAP就是bed等等)。SOAP始终使用HTTP的POST方法与服务器通信,并用XML对所有参数和操作进行编码。

虽然您认为转换资源会产生不同的资源,因此会产生不同的URI,但这取决于我从何处查看它。想想可能存在于“人类”时间尺度(小时、天、周、月)与“地质”时间尺度(世纪、年代、万年)中的“时间尺度”资源。因此,century=1的地质时间刻度中的同一URI在人类时间刻度中有5200周。从时间尺度作为一种资源的角度来看,我正在将它从人类转换为地质,因此我需要相同的URI,它返回一个可以从一个时间尺度“转换”到另一个时间尺度的资源。如果我用
http://server/app/resource.json?a=foo&b=3&c=frob
然后
http://server/app/resource.json?a=foo&b=3&c=blarg
只是同一资源的另一种表示形式。。。不需要单独的“transform_to”参数。谢谢你的意见。