PHPackages                             pllano/json-db - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. pllano/json-db

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

pllano/json-db
==============

API json DB

1.1.0(8y ago)9603[1 issues](https://github.com/pllano/json-db/issues)1MITPHPPHP &gt;=5.4.0CI failing

Since Dec 11Pushed 5y ago1 watchersCompare

[ Source](https://github.com/pllano/json-db)[ Packagist](https://packagist.org/packages/pllano/json-db)[ Docs](https://github.com/pllano/json-db)[ RSS](/packages/pllano-json-db/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (10)Dependencies (5)Versions (11)Used By (1)

«jsonDB» - JSON база данных
===========================

[](#jsondb---json-база-данных)

JSON база данных с открытым исходным кодом. Написана на PHP. Распространяется по лицензии [MIT](https://opensource.org/licenses/MIT). Подключается через Composer как обычный пакет PHP, после подключения сама настраивается за несколько секунд. Имеет свой RESTful API интерфейс работающий по стандарту обмена информацией сервер-сервер «[APIS-2018](https://github.com/ruslan-avantis/APIS-2018)», что позволяет использовать ее с любым другим языком программирования. «API json DB» это продвинутый менеджер json файлов с возможностью кеширования популярных запросов, шифрования файлов db, проверкой валидности файлов и очередью на запись при блокировке таблиц (файлов db) на запись другими процессами. Основанием для «API json DB» мы выбрали прекрасную работу [Greg0/Lazer-Database](https://github.com/Greg0/Lazer-Database/). Мы полностью изменили структуру оригинала и добавили: шифрование, API роутинг, кеширование, проверку валидности, очередь на запись и другой удобный функционал.

Старт за несколько минут
------------------------

[](#старт-за-несколько-минут)

Подключить с помощью [Composer](https://getcomposer.org/)

```
"require": {
	"pllano/json-db": "^1.0.5"
}
```

Подключить с помощью [AutoRequire](https://github.com/ruslan-avantis/auto-require)

```
"require" [
    {
        "namespace": "jsonDB",
        "dir": "/ruslan-avantis/json-db/src",
        "link": "https://github.com/ruslan-avantis/json-db/archive/master.zip",
        "name": "json-db",
        "version": "master",
        "vendor": "pllano"
    }
]
```

### Инструменты для тестирования API

[](#инструменты-для-тестирования-api)

- [Postman](https://www.getpostman.com/postman) - это мощный набор инструментов тестирования API
- [SOAPUI](https://www.soapui.org/rest-testing/getting-started.html) - приложение для тестирования, мониторинга и проверки функциональности REST API.

### Инструменты для работы с API

[](#инструменты-для-работы-с-api)

- [cURL](http://php.net/manual/ru/book.curl.php) - Клиентская библиотека PHP работы с URL
- [Guzzle](https://github.com/guzzle/guzzle) - HTTP-клиент PHP

RESTful API роутинг для cURL запросов
-------------------------------------

[](#restful-api-роутинг-для-curl-запросов)

«API json DB» имеет свой RESTfull API роутинг для cURL запросов который написан на PHP с использованием [Micro Framework Slim](https://github.com/slimphp), что позволяет использовать «API json DB» с любым другим языком программирования. Для унификации обмена данными и структуры базы данных используется наш собственный стандарт [APIS-2018](https://github.com/ruslan-avantis/APIS-2018/).

### RESTfull API состоит всего из двух файлов:

[](#restfull-api-состоит-всего-из-двух-файлов)

- [index.php](https://github.com/ruslan-avantis/json-db/blob/master/api/index.php) и [.htaccess](https://github.com/ruslan-avantis/json-db/blob/master/api/.htaccess)

### Для установки `RESTful API` выполните следующие действия:

[](#для-установки-restful-api-выполните-следующие-действия)

- В файле [index.php](https://github.com/ruslan-avantis/json-db/blob/master/api/index.php) укажите директорию где хранится база, например `/www/_db_/` или `__DIR__ . '/../../_db_/'`.
- Перенесите файлы [index.php](https://github.com/ruslan-avantis/json-db/blob/master/api/index.php) и [.htaccess](https://github.com/ruslan-avantis/json-db/blob/master/api/.htaccess) в директорию доступную через URL. Например: `https://example.com/_12345_/`
- Запустите API перейдя по ссылке `https://example.com/_12345_/`
- Если база работает Вы увидите следующий результат:

```
{
    "headers": {
        "status": "200 OK",
        "code": 200,
        "message": "RESTfull API json DB works!",
        "message_id": "https:\/\/github.com\/pllano\/APIS-2018\/tree\/master\/http-codes\/200.md"
    }
}
```

### Автоматическое разворачиваение

[](#автоматическое-разворачиваение)

При запуске база создаст в папке `_db_` которую вы указали:

- Таблицу своей конфигурации `db.data.json` и `db.config.json`
- Таблицу для кеша `cached.data.json` и `cached.config.json`
- Таблицу для очереди запросов `queue.data.json` и `queue.config.json`
- Директории: `cached` `core` `log`
- В директории `core` сгенерирует файл с ключем для http запросов key\_db.txt если его там еще нет.
- В директорию `core` скачает этот [db.json](https://github.com/ruslan-avantis/db.json/blob/master/db.json) файл структуры если его там еще нет.

### Автоматическое создание ресурсов

[](#автоматическое-создание-ресурсов)

База автоматически создаст все ресурсы и связи указанные в файле [db.json](https://github.com/ruslan-avantis/json-db/blob/master/_db_/core/db.json). Для создания индивидуальной конфигурации ресурсов отредактируйте файл [db.json](https://github.com/ruslan-avantis/json-db/blob/master/_db_/core/db.json) и перед запуском скопируйте его в директорию `/_db_/core/`.

### Поддерживаемые типы данных в db.json

[](#поддерживаемые-типы-данных-в-dbjson)

- `boolean` — Логический тип `true` или `false`
- `integer` — Целое число
- `double` — Число с плавающей точкой
- `string` — Строка

### Структура базы данных для интернет-магазина

[](#структура-базы-данных-для-интернет-магазина)

Структура базы данных [db.json](https://github.com/ruslan-avantis/db.json) выведена в отдельный репозиторий

### URL запросов к RESTful API jsonDB

[](#url-запросов-к-restful-api-jsondb)

- `https://example.com/{api_dir}/{table_name}/{id}`
- `{api_dir}` - папка в которой лежит [index.php](https://github.com/ruslan-avantis/json-db/blob/master/api/index.php)
- `{resource}` - название ресурса к которому обращаемся. Например price или user.
- `{id}` - уникальный индефикатор
- `{param}` - праметры запроса

### GET запрос к RESTful API jsonDB

[](#get-запрос-к-restful-api-jsondb)

`?offset={offset}&limit={limit}&order={order}&sort={sort}&public_key={public_key}`

- `{public_key}` - Ключ доступа к RESTful API
- `{limit}` - Записей на страницу. По умолчанию 10
- `{offset}` - Страница. По умолчанию 0
- `{order}` - Тип сортировки. По умолчанию asc
- `{sort}` - Поле сортировки. По умолчанию id
- `{*}` - Любое из полей таблицы

### RESTful API jsonDB потдерживает `POST` `GET` `PUT` `PATCH` `DELETE` запросы:

[](#restful-api-jsondb-потдерживает-post-get-put-patch-delete-запросы)

- `POST /{resource}` Создание записи
- `POST /{resource}/{id}` Ошибка
- `GET /{resource}` Список всех записей
- `GET /{resource}?{param}` Список всех записей с фильтром по параметрам
- `GET /{resource}/{id}` Данные конкретной записи
- `PUT /{resource}` Обновить данные записей
- `PUT /{resource}/{id}` Обновить данные конкретной записи
- `PATCH /{resource}` Обновить данные записей
- `PATCH /{resource}/{id}` Обновить данные конкретной записи
- `DELETE /{resource}` Удалить все записи
- `DELETE /{resource}/{id}` Удалить конкретную запись

### При желании Вы можете использовать только `GET` запросы:

[](#при-желании-вы-можете-использовать-только-get-запросы)

- `GET /_post/{resource}?{param}` Создание записи
- `GET /_post/{resource}/{id}` Ошибка
- `GET /_get/{resource}?{param}` Список всех записей с фильтром по параметрам
- `GET /_get/{resource}/{id}` Данные конкретной записи
- `GET /_put/{resource}?{param}` Обновить данные записей
- `GET /_put/{resource}/{id}?{param}` Обновить данные конкретной записи
- `GET /_patch/{resource}?{param}` Обновить данные записей
- `GET /_patch/{resource}/{id}?{param}` Обновить данные конкретной записи
- `GET /_delete/{resource}` Удалить все записи
- `GET /_delete/{resource}/{id}` Удалить конкретную запись

### Пример использования с HTTP клиентом Guzzle

[](#пример-использования-с-http-клиентом-guzzle)

```
use GuzzleHttp\Client as Guzzle;

$public_key = $config['settings']['db']['public_key']; // Взять key из конфигурации `https://example.com/_12345_/index.php`

$resource = 'db';
$id = '1';

// $uri = 'https://example.com/_12345_/'.$resource.'?public_key='.$public_key;
$uri = 'https://example.com/_12345_/'.$resource.'/'.$id.'?public_key='.$public_key;

$client = new Guzzle();
$resp = $client->request('GET', $uri);
$get_body = $resp->getBody();

// Чистим все что не нужно, иначе json_decode не сможет конвертировать json в массив
for ($i = 0; $i = 1) {
            foreach($response["body"]["items"] as $item)
            {
                // Если $value object переводим в array
                $item = is_array($value["item"]) ? $item["item"] : (array)$value["item"];
                // Получаем данные
                print_r($item["name"]);
            }
        }
    }
}
```

### RESTful API jsonDB - Всегда возвращает код 200 даже при логических ошибках !

[](#restful-api-jsondb---всегда-возвращает-код-200-даже-при-логических-ошибках-)

`HTTP/1.1 200 OK`

`Content-Type: application/json`

### В теле ответа RESTful API jsonDB вернет код состояния HTTP, статус и описание.

[](#в-теле-ответа-restful-api-jsondb-вернет-код-состояния-http-статус-и-описание)

[Коды состояния HTTP](https://github.com/ruslan-avantis/APIS-2018/tree/master/http-codes)

Безопасность
------------

[](#безопасность)

[Советы по увеличению безопасности API json DB](https://github.com/ruslan-avantis/json-db/blob/master/doc/security.md)

Прямое подключение к DB
-----------------------

[](#прямое-подключение-к-db)

Если вам не нужен API роутинг Вы можете работать с базой данных напрямую без REST API интерфейса - [Документация - работа с DB напрямую](https://github.com/ruslan-avantis/json-db/blob/master/doc/db.md) или если вам не нужны (кеширование, шифрование) использовать оригинальный пакет [Lazer-Database](https://github.com/Greg0/Lazer-Database/).

### Запуск одной строчкой кода

[](#запуск-одной-строчкой-кода)

```
(new \jsonDB\Db(__DIR__ . '/../../_db_/'))->run();

// Или так
$_db = __DIR__ . '/../../_db_/';
$db = new Db($_db);
$db->run();
```

Запуск с параметрами

```
use jsonDB\Db;
$_db = __DIR__ . '/../../_db_/'; // Указываем директорию где будет храниться json db

$db = new Db($_db);
$db->setPrefixTable("sf"); // Установить префикс таблиц
$db->setPrefixColumn("jhbg5r"); // Установить префикс полей
$db->setCached(false); // Включаем кеширование true|false
$db->setCacheLifetime(60); // Время жизни кеша 60 минут
$db->setTemp(false); // Используем очередь true|false
$db->setApi(false); // Если работаем как основная база устанавливаем false
$db->setStructure(""); // URL к файлу структуры db.json (Не обезательно)
$db->setPublicKey(""); // Установить public_key (Не обезательно)
$db->setCrypt(false); // Шифруем таблицы true|false
$db->setCryptKey(file_get_contents($_db . 'core/key_db.txt', true)); // Загружаем ключ шифрования
$db->run();
```

Примечание: Если вы будете пользоваться RESTful API роутингом для cURL запросов, вам не нужно выполнять запуск базы, роутер [index.php](https://github.com/ruslan-avantis/json-db/blob/master/api/index.php) сделает все сам. Вам достаточно установить пакет с помощью Composer и выпонить дейсвия с настройкой API роутинга описаны выше.

#### Создать ресурс в базе данных

[](#создать-ресурс-в-базе-данных)

```
use jsonDB\Database as jsonDb;

$arr = array(
    'id' => 'integer',
    'name' => 'string',
    'название_поля' => 'тип данных'
);

jsonDb::create('resource_name', $arr);
```

#### Удалить ресурс в базе данных

[](#удалить-ресурс-в-базе-данных)

```
use jsonDB\Database as jsonDb;

jsonDb::remove('resource_name');
```

#### Очистить ресурс

[](#очистить-ресурс)

```
use jsonDB\Database as jsonDb;

jsonDb::table('resource_name')->delete();
```

#### Проверьте, существует ли ресурс в базе данных

[](#проверьте-существует-ли-ресурс-в-базе-данных)

```
use jsonDB\Validate;
use jsonDB\dbException;

try{
    Validate::table('resource_name')->exists();
} catch(dbException $e){
    // Ресурс не существует
}
```

#### Создать запись

[](#создать-запись)

```
use jsonDB\Database as jsonDb;

$row = jsonDb::table('resource_name');
$row->name = 'Ivan';
$row->save();
```

Примечание: Если тип поля `integer` а вы передаете число в кавычках, будет ошибка: `неверный тип данных`. Для того чтобы избежать ошибки, добавляйте проверку и передавайте число без кавычек как в примере ниже.

```
use jsonDB\Database as jsonDb;

$row = jsonDb::table('resource_name');
$row->num = $num;
$row->save();
```

#### Получить данные

[](#получить-данные)

```
use jsonDB\Database as jsonDb;

echo jsonDb::table('resource_name')->where('name', '=', 'Ivan')->findAll();
// или по id
echo jsonDb::table('resource_name')->where('id', '=', '10')->findAll();
```

#### Обновить данные

[](#обновить-данные)

```
use jsonDB\Database as jsonDb;

$row = jsonDb::table('resource_name')->find(10);
$row->name = 'Andrey';
$row->save();
```

#### Удалить запись по id

[](#удалить-запись-по-id)

```
use jsonDB\Database as jsonDb;

jsonDb::table('resource_name')->find(10)->delete();
```

Поддержка, обратная связь, новости
----------------------------------

[](#поддержка-обратная-связь-новости)

Общайтесь с нами через почту

Если вы нашли баг в API json DB загляните в [issues](https://github.com/ruslan-avantis/json-db/issues), возможно, про него мы уже знаем и постараемся исправить в ближайшем будущем. Если нет, лучше всего сообщить о нём там. Там же вы можете оставлять свои пожелания и предложения.

За новостями вы можете следить по [коммитам](https://github.com/ruslan-avantis/json-db/commits/master) в этом репозитории. [RSS](https://github.com/ruslan-avantis/json-db/commits/master.atom).

Лицензия
--------

[](#лицензия)

The MIT License (MIT). Please see [LICENSE](https://github.com/ruslan-avantis/json-db/blob/master/LICENSE) for more information.

###  Health Score

30

—

LowBetter than 62% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

10

Last Release

3077d ago

PHP version history (2 changes)1.0.1PHP &gt;=5.3.0

1.0.2PHP &gt;=5.4.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/83c4d844db99c883895755ca0e1dab41ba50f6e9faedbb972c2d35230a7dc0c2?d=identicon)[joomimart](/maintainers/joomimart)

---

Top Contributors

[![ruslan-avantis](https://avatars.githubusercontent.com/u/16430046?v=4)](https://github.com/ruslan-avantis "ruslan-avantis (317 commits)")

---

Tags

dbjsonjson-apijson-dbjsondbjsondb

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/pllano-json-db/health.svg)

```
[![Health](https://phpackages.com/badges/pllano-json-db/health.svg)](https://phpackages.com/packages/pllano-json-db)
```

###  Alternatives

[justinrainbow/json-schema

A library to validate a json schema.

3.6k328.4M737](/packages/justinrainbow-json-schema)[mtdowling/jmespath.php

Declaratively specify how to extract elements from a JSON document

2.0k493.5M159](/packages/mtdowling-jmespathphp)[jms/serializer

Library for (de-)serializing data of any complexity; supports XML, and JSON.

2.3k139.8M905](/packages/jms-serializer)[jms/serializer-bundle

Allows you to easily serialize, and deserialize data of any complexity

1.8k91.4M664](/packages/jms-serializer-bundle)[colinodell/json5

UTF-8 compatible JSON5 parser for PHP

30524.1M51](/packages/colinodell-json5)[clue/ndjson-react

Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.

15677.1M25](/packages/clue-ndjson-react)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
