rollun-com/rollun-datastore

Datastore

Installs: 10 074

Dependents: 10

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 10

Open Issues: 29

pkg:composer/rollun-com/rollun-datastore

11.2.2 2025-10-16 13:01 UTC

This package is auto-updated.

Last update: 2025-11-04 18:34:15 UTC


README

rollun-datastore - это библиотека, которая предоставляет единый интерфейс взаимодействие с любым хранилищем данных на основе Resource Query Language (RQL). Существующие реализации: DbTable (для таблицы бд), CsvBase (для csv файлов), HttpClient (для внешнего ресурса через http), Memory (для RAM).

Краткая таблица операций

Операция HTTP RQL (в query) Тело запроса Примечания Заголовки и атрибуты запроса Ограничения и известные проблемы
Создание записи (create) POST Нет Объект При коллизии ID поведение задаёт overwriteMode: false — ошибка; true — перезаписать существующую запись. Если PK указан и в path, и в body — приоритет у body (НУЖНО ПРОВЕРИТЬ). Опционально атрибут overwriteMode. Опционально атрибут primaryKeyValue. Если PK нет ни в body, ни в path, то попытка создания записи все равно произойдет для DbTable. Это может вызвать ошибку если PK не AUTO_INCREMENT. overwriteMode вызывает ошибку уровня deprecated для DbTable и по умолчанию имеет значение false
Множественное создание (multiCreate) POST Нет Массив объектов Если пакетное создание не поддержиевается, выполняются последовательные вызовы create() для каждого элемента.
Получение записи (read) GET Нет Требуется ID (в path). Требуется атрибут primaryKeyValue
Поиск (query) GET Обязателен Атрибут primaryKeyValue должен отсутствовать
Обновление записи (update) PUT Нет Объект ID обязателен; если указан и в path, и в body — приоритет у body. Upsert при overwriteMode = true (создать, если записи нет). Опционально атрибут overwriteMode. Опционально атрибут primaryKeyValue. overwriteMode вызывает ошибку уровня deprecated для DbTable и по умолчание имеет значение false. Согласно стандартам, частичное обновление записи должно выполнятся методом PATCH - об этом известно.
Множественное обновление (multiUpdate) В данный момент не реализовано
Обновление по фильтру (queriedUpdate) PATCH Обязателен Объект Требуется наличие limit в RQL; нельзя select/groupBy; без PK (первичный ключ) в body. Атрибут primaryKeyValue должен отсутствовать Для DbTable обновление по фильтру выполняется с помощью SELECT FOR UPDATE.
Удаление (delete) DELETE Нет Требуется ID (в path). Требуется атрибут primaryKeyValue. Для DbTable переданный в запросе PK быть либо типа integer, либо double, либо string.
Удаление по фильтру (queriedDelete) В данный момент не реализовано
Удаление всех записей (deleteAll) В данный момент не реализовано
Получение метаданных (getIdentifier) HEAD Нет Метаданные/хедеры по PK. Заголовки возвращаются в формате X_OPE_RATION и т.д.
Загрузить контент в CSV файле GET Можно При экспорте RQL-ограничение limit(...) принудительно снимается обработчиком CSV, поэтому возвращается весь контент датастора. Требуется заголовок download со значением csv В данный момент ситуация с limit это баг и о нём известно. Требуемый заголовок также в дальнейшем будет изменен согласно стандартам (Accept: text/csv).
Refresh (если поддерживается) PATCH Нет Только для датасторов с RefreshableInterface.
Пересоздание записи (rewrite) В данный момент не реализовано
Множественное пересоздание (multiRewrite) В данный момент не реализовано

Примечания к таблице

Атрибут overwriteMode

Это атрибут запроса ($request->getAttribute('overwriteMode')), булев флаг, который middleware RequestDecoder устанавливает на основании заголовка If-Match. Если заголовок равен * (If-Match: *) — значение true; при любом другом значении или отсутствии заголовка — false. Он задает поведение при конфликте/отсутствии записи.

CSV и LIMIT

При экспорте CSV обработчик принудительно снимает/заменяет клиентский limit(...) на «без ограничений», поэтому выгружается всё (это поведение реализовано в CSV-хендлере).

Атрибут primaryKeyValue

Это атрибут запроса ($request->getAttribute('primaryKeyValue')), строковый PK записи, который middleware ResourceResolver извлекает из роут-параметра id или из последнего сегмента пути /api/datastore/{resourceName}/{id} (после rawurldecode(...)). Если ID не задан — null.

Расширенный формат таблицы выше

Для сторонних клиентов

В DataStore используется дополненная версия rawurlencode. К перечню стандартных символов добавлены следующие преобразования

  • - => %2D
  • _ => %5F
  • . => %2E
  • ~ => %7E