REST API для синхронизации файлов

Я начинаю работу над проектом, одним из компонентов которого является необходимость синхронизации файлов с сервера в локальное хранилище HTML5 IndexedDB для автономного использования, а затем возможность отправки изменений из хранилища IndexedDB обратно на сервер.

Но прежде чем я заново изобрету колесо для чего-то, что должно быть довольно простым процессом, я надеюсь найти хорошо документированный стандартный API (если не клиентские и/или серверные библиотеки), который сделает большую часть тяжелой работы.

Я также хотел бы, чтобы мой проект сохранял некоторую открытость, поэтому соблюдение открытого стандарта (даже если в моем конкретном случае мне придется писать как клиентский, так и серверный код) — это большая победа.

WebDAV — явный кандидат на эту задачу, но он отслеживает множество метаданных (информация об авторстве и т. д.), которые не имеют для меня особого значения, и добавляет множество HTTP-глаголов, с которыми я бы предпочел не иметь дело (быть более соответствует современному пониманию RESTful), и в целом это более тяжелый протокол, чем мне нужно для моей ограниченной задачи.

Существуют ли альтернативные бесплатные стандарты для такого API?

Ответы (2)

CouchDB и тесно связанный клиент JavaScript PouchDB оказались почти в точности такими, как я себе представлял.

Он не использует полностью совместимый с REST API, но детали достаточно аккуратно скрыты под полным и хорошо документированным API, что в моем случае это не имеет значения.

У PouchDB очень активное сообщество пользователей и разработчиков, и CouchDB начинает возвращаться к жизни после небольшого перерыва, по-видимому, с предстоящим выпуском 2.0.

HTTP уже имеет эти функции и является точкой REST.

Цитата из спецификации http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

ПОЛУЧАТЬ

Метод GET означает получение любой информации (в форме объекта), идентифицированной Request-URI. Если Request-URI относится к процессу создания данных, именно произведенные данные должны быть возвращены как сущность в ответе, а не исходный текст процесса, если только этот текст не является результатом процесса.

ПОМЕЩАТЬ

Метод PUT запрашивает, чтобы вложенный объект был сохранен под предоставленным Request-URI. Если Request-URI относится к уже существующему ресурсу, вложенный объект СЛЕДУЕТ рассматривать как модифицированную версию объекта, находящегося на исходном сервере. Если Request-URI не указывает на существующий ресурс, и этот URI может быть определен запрашивающим пользовательским агентом как новый ресурс, исходный сервер может создать ресурс с этим URI. Если создается новый ресурс, исходный сервер ДОЛЖЕН информировать пользовательский агент через ответ 201 (Создано). Если существующий ресурс изменен, ДОЛЖНЫ быть отправлены коды ответа 200 (ОК) или 204 (Нет содержимого), чтобы указать на успешное выполнение запроса. Если ресурс не может быть создан или изменен с помощью Request-URI, СЛЕДУЕТ давать соответствующий ответ на ошибку, отражающий характер проблемы. Получатель объекта НЕ ДОЛЖЕН игнорировать какие-либо заголовки Content-* (например, Content-Range), которые он не понимает или не реализует, и в таких случаях ДОЛЖЕН возвращать ответ 501 (Not Implemented).

УДАЛЯТЬ

Метод DELETE запрашивает, чтобы исходный сервер удалил ресурс, указанный Request-URI. Этот метод МОЖЕТ быть переопределен вмешательством человека (или другими способами) на исходном сервере. Клиенту нельзя гарантировать, что операция была выполнена, даже если код состояния, возвращенный исходным сервером, указывает на то, что действие было выполнено успешно. Однако серверу НЕ СЛЕДУЕТ сообщать об успехе, если только в момент получения ответа он не намеревается удалить ресурс или переместить его в недоступное место.

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

Хранение внутри IndexDB — это хорошо, но вам понадобится какая-то форма статуса. Я не знаю библиотеки, которая делает это, так как это в основном очень просто. Вы можете захотеть сохранить таблицу журнала транзакций, которую вы используете для обратного распространения информации.

(Я считаю, что phonegap не поддерживает IndexDB, он использует WebSQL, но есть полизаполнение для использования IndexDB API в WebSQL)

4 глагола не делают API синхронизации файлов.