REST的无状态

时间:2014-12-17 11:06:57

标签: rest web-applications asp.net-web-api restful-architecture stateless

我正在创建一个REST服务,它有两个方法,一个是 GetAll ,另一个是 GetById 。在我的方案中,数据库请求非常昂贵所以我想存储输出 GetAll 某处(缓存)并将其用于后续请求 GetById

REST的一个特点是应该是无状态。请求不能依赖于过去的请求,服务会独立处理每个请求。 我想了解处理此类场景的理想方法或如何在REST中设计此需求?

3 个答案:

答案 0 :(得分:1)

实现目标的正确方法是使用缓存,例如MemoryCache

您创建一个单独的私有函数,它可以获取所有数据并将其缓存在内存中。然后,您可以让GetAllGetById同时使用该功能。

您的服务将保持无状态

MemoryCache用法示例

MemoryCache cache = MemoryCache.Default;
string cacheName = "MyCache";

if (!cache.Contains(cacheName) || cache[cacheName] == null)
{
    // get data
    var data = ...

    // cache data
    cache.Set(cacheName, data, new CacheItemPolicy() { SlidingExpiration = DateTime.Now.AddDays(1).TimeOfDay });
}

return cache[cacheName];

答案 1 :(得分:0)

有很多解决方案。我推荐你的一个解决方案如下:

配置infinispan以将其用作缓存机制。在里面存储一个并发的hashmap,其中包含查询键,值为数据库的结果集,

第二次想要getAll,检查查询是否作为缓存的密钥存在,如果是,则从缓存中检索值,否则联系数据库,然后将结果插入缓存中。

答案 2 :(得分:0)

REST中无状态的要求是服务出现是无状态的。服务是否在内部维护某个状态并不重要。这只是一个实现细节。