亚马逊的Web API通过使用querystring参数指定操作,为非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)
{
...
}
在上面的例子中,我希望不管URI路径如何,框架都会根据“xaction”查询字符串参数的值调度到适当的方法。不幸的是,我没有使用路径或方法来区分这些操作的奢侈。我愿意接受与JAX-RS或自定义实现兼容的其他库建议来解决这个问题。
答案 0 :(得分:0)
REST不是远程过程调用(RPC)。即使亚马逊正在发布这样的API,它仍然不是RESTful。
JAX-RS没有提供您描述的映射,原因很充分。每个资源必须由URI唯一标识,其中包括完整路径和所有查询参数。您描述的URI不会识别资源,而是调用过程。
问自己这些问题:
作为3的示例,您可以了解MoveResource
和CopyReource
。
MoveResource
的JSON表示可能如下所示:
{
"source": "/path/to/source",
"dest": "/path/to/dest"
}
创建这样的MoveResource
并因此触发移动可以由POST
到/moves
的集合资源来完成。此POST
会返回201 Created
Location
标题,如/moves/42
。 GET
到此资源可以返回MoveResource
的状态:
{
"source": "/path/to/source",
"dest": "/path/to/dest",
"status": "success"
}
CopyResource
也可以这样做。