0

Я создаю службу REST, который имеет два метода один является GETALL и другим GetByID .В моего случая, запрос базы данных является очень дорогостоящим, поэтому я хочу, чтобы сохранить выход из GETALL где (Cache) и использовать его для последующего запроса GetById.Безгражданство отдыхай

Одним из характерных признаков REST является отсутствие безгражданства. Запрос не может зависеть от предыдущего запроса, и служба обрабатывает каждый запрос независимо. Я хочу понять, какой должен быть идеальный подход для обработки таких сценариев или как создать это требование в REST?

+1

Даже если вы кэшировали данные, ваша служба по-прежнему будет оставаться без гражданства. Не имеет значения, вызывается ли 'GetById' до' GetAll'. Если вызывается 'GetById', и нет кэшированных данных, тогда он просто получит нужные ему данные. Приказ не имеет значения. –

ответ

0

Требование безгражданства в REST является то, что служба должна появляться быть лицом без гражданства. Не имеет значения, поддерживает ли служба какое-то государство внутри страны. Это просто деталь реализации.

+1

Это неправда. Определение безгражданства подразумевает, что один запрос никогда не должен предполагать работу, выполненную предыдущим запросом. Например, запрос никогда не должен предполагать, что предыдущий запрос обрабатывал аутентификацию. –

+0

Это то же самое. –

+0

, если запрос на обслуживание хранит что-то, не становится ли он устаревшим? Не могли бы вы кратко рассказать мне о различиях между службами состояния и состояния? – F11

0

есть много решений. одно решение Я бы рекомендовал вам следующее:

настроить infinispan, чтобы использовать его в качестве механизма кеша. внутри там хранится параллельный хэш-файл с ключом запроса и со значением, заданным в вашей базе данных,

второй раз, когда вы хотите getAll, проверьте, существует ли запрос в качестве ключа к вашему кешу, если да, то получите значение из кеша, иначе контактную базу данных, а затем вставить результат в кеш.

1

Правильный способ достижения того, что вы хотите, - это использовать кеширование, например MemoryCache.

Вы создаете отдельную частную функцию, которая извлекает все данные и кэширует их в памяти. Тогда вы можете иметь как GetAll, так и GetById использовать эту функцию.

Ваш сервис останется без гражданства.

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]; 
Смежные вопросы