如何在Restful服务中维护状态

时间:2015-06-10 14:08:55

标签: web-services rest jersey jax-rs

以下是我正在尝试创建的CRUD Web服务中的事件序列

步骤1:用户请求POST / shape / trycreate(尝试创建请求)

步骤2:Controller方法接收对象:tryCreate(Shape s)

第3步:服务方法返回匹配的形状:Collection<Shape> tryCreate(Shape s)

步骤4:如果存在重复形状,则抛出一些异常,ExceptionMapper返回失败响应

如果返回的集合为空,则创建Shape并返回SUCCESS响应

否则,如果返回包含路径的对象,以查看与用户尝试创建的形状匹配的形状,并且返回对象还包含仍然创建Shape的继续路径

所以基本上响应对象包含像view / Shape / id001 view / Shape / id003 view / Shape / id007这样的路径,它们就像用户即将创建的Shape一样,并且还有一个 continue path 创建/形状/一些令牌

我认为我可以使用某些令牌 - &gt;在服务器端形成对象映射,其中条目存在5分钟左右。 通过使用这个我可以验证用户没有发送直接请求来创建,但它已经完成了步骤tryCreate-&gt; View Matching Shapes-&gt;仍然创造 此外,它不必再次在tryCreate请求中发送的创建请求中发送Shape的详细信息。

现在问题是在服务器端使用过期缓存来存储经过验证的令牌并不是一个Restful设计。 Q1)**我应该如何确保这不是创建的直接请求,它遵循trycreate请求 ** Q2)我是否在创建请求中重新发送Shape的详细信息,否则我该如何实现?

由于

1 个答案:

答案 0 :(得分:1)

我相信你提到的令牌方法是好的。 HTTP请求不是有状态的,它是服务端的业务逻辑。这就像创建一个实体然后请求它,两个http请求不是有状态的,但如果你创建了实体,你将在获取请求中获得它,否则不会。

可以只是命名端点,如何:

1)POST / shape / request

2)POST / shape / process

第二个是有效的RESTful请求,如this书中所述,称其为控制器资源。

据说,与标题相反,this解释了关于REST和无国籍的关系。