1

Amazon 的 Web API 通过使用查询字符串参数来指定操作,从而为非 CRUD 操作使用“查询 API”。我想以类似的方式实现非 CRUD 操作。

有没有办法根据特定查询字符串参数的值使用 Jersey JAX-RS 映射 POST 资源方法?例如,我想做这样的事情:

@POST @Query(name="xaction", value="move") 
public Response move(@QueryParam("source") String source, @QueryParam("dest") String dest)
{
...
}

@POST @Query(name="xaction", value="copy")
public Response copy(@QueryParam("source") String source, @QueryParam("dest") String dest)
{
...
}

在上面的示例中,我希望框架会根据“xaction”查询字符串参数的值分派到适当的方法,而不管 URI 路径如何。不幸的是,我没有使用路径或方法来区分这些操作的奢侈。我愿意接受与 JAX-RS 或自定义实现兼容的其他库建议来解决此问题。

4

1 回答 1

0

REST 不是远程过程调用 (RPC)。即使亚马逊发布了这样的 API,它仍然不是 RESTful。

JAX-RS 没有提供您描述的映射是有充分理由的。每个资源必须由包含完整路径和所有查询参数的 URI 唯一标识。像您描述的 URI 不识​​别 Resources 而是调用processes

问自己这些问题:

  1. 你的资源是什么?
  2. 资源上的操作是否容易映射到 HTTP 动词?
  3. 如果不是,我可以将对资源的操作建模为资源吗?

作为 3. 的示例,您可以考虑 aMoveResource和 a CopyReource

a 的 JSON 表示形式MoveResource可能如下所示:

{
  "source": "/path/to/source",
  "dest": "/path/to/dest"
}

创建这样的 aMoveResource并因此触发移动可以由 aPOST到集合 Resource at完成/moves。这POST将返回201 Created一个Location/moves/42. A GETto this Resource 可以返回的状态MoveResource

{
  "source": "/path/to/source",
  "dest": "/path/to/dest",
  "status": "success"
}

对 a 也可以这样做CopyResource

于 2013-07-04T08:08:39.370 回答