Ответ 1
Это довольно распространенная проблема, и подход RESTful может помочь вам решить ее. HTTP (протокол приложения, обычно используемый для создания сервисов RESTful) поддерживает различные методы, которые можно использовать для синхронизации клиентов API с данными на стороне сервера.
Если клиент получает заголовок Last-Modified
или E-Tag
в ответе HTTP, он может использовать эту информацию для выполнения условных вызовов GET в будущем. Это позволяет серверу быстро указать с помощью ответа 304 – Not Modified
что ранее сохраненное представление клиента по-прежнему является действительным и точным. Это позволит серверу (или, что еще лучше, промежуточному прокси-серверу или серверу кэширования) быть настолько эффективным, насколько это возможно, в том, как он отвечает на запросы клиентов, потенциально уменьшая дорогостоящие обратные обращения к внутреннему хранилищу данных.
Если ответ содержит заголовок Last-Modified
и клиент желает воспользоваться преимуществами оптимизации производительности, доступной с ним, он должен включить директиву If-Modified-Since
в последующем вызове GET для того же URI, передавая то же значение метки времени это получил. Это указывает серверу только ПОЛУЧИТЬ информацию из авторитетного внутреннего источника, если он знает, что она изменилась с того времени. Конечно, ваш сервер должен быть создан для поддержки этой техники.
Аналогичный принцип применяется к заголовкам E-Tag
. E-Tag
- это простой хеш-код, представляющий конкретное состояние ресурса в определенный момент времени. Если ресурс изменяется каким-либо образом, изменяется и значение E-Tag
. Если клиент видит E-Tag
в ответе, он должен передать его в последующих запросах GET на тот же URI, что позволяет серверу быстро определить, имеется ли у клиента актуальное представление ресурса.
Наконец, вам, вероятно, следует взглянуть на метод длинных опросов, чтобы уменьшить количество повторных запросов GET, отправляемых вашими клиентами на сервер. По сути, хитрость заключается в том, чтобы выдавать очень длинные запросы GET серверу, чтобы отслеживать изменения данных на сервере. GET не вернет ответ до тех пор, пока не будут изменены данные или не истечет очень длительное время ожидания. Если последнее, клиент просто повторно выдает тот же долгоживущий запрос, чтобы снова отслеживать изменения. Смотрите также такие темы, как Comet и Web Sockets, которые похожи по подходу.