Прямые API-запросы к базе данных Tarantool
Вы можете использовать HTTP API для извлечения напрямую данных из базы данных Tarantool.
В этом разделе:
Общие сведения
API-запросы к базе данных Tarantool нужно отправлять по адресу http://<tarantool_host_ip:port>.
Совет
Порт для API-запросов можно узнать в разделе FindFace.start файла конфигурации Tarantool:
cat /etc/tarantool/instances.enabled/FindFace.lua
##8001:
FindFace.start("127.0.0.1", 8001)
Примечание
В случае если FindFace Enterprise Server развернут на одиночном физическом сервере, база данных Tarantool по умолчанию будет доступна только локально (127.0.0.1). Если необходимо открыть доступ к базе данных Tarantool с удаленного сервера, внесите изменения в файл конфигурации findface-tarantool-server.
API-запросы к Tarantool могут содержать следующие параметры в сегментах пути:
- :ver: версия API (v2 на данный момент).
- :name: имя галереи.- Совет - Для получения списка имен галерей на шарде введите следующую команду в адресном поле браузера (подробнее см. Получение списка галерей): - http://<tarantool_host_ip:shard_port>/stat/list/1/99 - Та же самая команда в консоли: - curl <tarantool_host_ip:shard_port>/stat/list/1/99 \| jq - Вы также можете получить список имен галерей, отправив в Tarantool прямой запрос: - echo 'box.space.galleries:select()' | tarantoolctl connect <tarantool_host_ip:shard_port> - Имейте в виду, что при значительном количестве шардов в системе произвольно выбранный шард может не включать в себя все существующие галереи. В этом случае отобразите список галерей на нескольких шардах. 
Добавление лица
POST /:ver/faces/add/:name
Параметры в теле:
Массив лиц в представлении JSON со следующими полями:
- "id": id лица в галерее, uint64_t,
- ”facen”: необработанный вектор признаков, base64,
- "meta": метаданные лица, словарь.
Возвращает:
- HTTP 200 и пустое тело в случае успеха. 
- HTTP 404 с описанием ошибки, если галерея с заданным именем не существует. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D - -s 'http://localhost:8001/v2/faces/add/testgal' --data '
[
  {
    "id": 9223372036854776000,
    "facen": "qgI3vZRv/z…NpO9MdHavW1WuT0=",
    "meta": {
"cam_id": "223900",
"person_name": "Mary Ostin",
    }
  }
]
Ответ
HTTP/1.1 200 Ok
Content-length: 1234
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
Удаление лица
POST /v2/faces/delete/:name
Параметры в теле:
Массив в представлении JSON из списка id лиц, подлежащих удалению
Возвращает:
- HTTP 200 и пустое тело в случае успеха. 
- HTTP 404, если лицо с заданным id не найдено в галерее. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D -  -s 'http://localhost:8001/v2/faces/delete/testgal' --data '[1, 4, 922, 3]'
Ответ
HTTP/1.1 200 Ok
Content-length: 111
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
Поиск лица
POST /v2/faces/search/:name
Параметры в теле:
Поисковый запрос в представлении JSON со следующими полями:
- limit: максимальное количество лиц в ответе.
- sort: включает сортировку по следующим параметрам:- id: по возрастанию id,- -idпо убыванию id,- -score: по убыванию степени схожести (если поиск выполняется по схожим векторам признаков).
- filter(фильтры):- facen: опциональный фильтр по схожести вектора признаков. Передайте словарь со следующими полями:- data: вектор признаков в формате base64;- score: диапазон качества лица, поддерживаются только запросы с правой границей 1 (максимальное качество).- idи- meta/<meta_key>: фильтры по пользовательскому id лиц и содержимому поля- meta. Для задания фильтра используются следующие операторы:- range: диапазон значений, только для числовых полей.
- set: набор значений, одно из которых должно присутствовать в id или метаданных, для числовых и строковых полей.
- subset: набор значений, каждое из которых должно присутствовать в id или метаданных, для числовых и строковых полей.
- like: аналогично- likeв SQL-запросах: поддерживаются только ‘aa%’ или ‘aa%’ или ‘%aa%’. Только для полей- stringи- set[string]. При использовании- set[string]фильтр вернет результат, если хотя бы одно из значений прошло проверку.
- ilike(только для полей- stringи- set[string]): аналогично- like, но без учета регистра.
 
Возвращает:
- В случае успеха массив JSON с лицами. Значение в заголовке - X-search-statпоказывает, был ли использован быстрый индекс для поиска:- with_indexили- without_index.- Примечание - В API v2 быстрый индекс не используется. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D - -s 'http://localhost:8001/v2/testgal/search' --data '
{
        "limit": 2,
    "sort": {
                "score": -1
        },
        "filter": {
                "facen": {
                        "data": "qgI3vZRv/z0BQTk9rcirOyZrNpO9MdHavW1WuT0=",
                        "score": [0.75, 1]
                },
                "id": {
                        "range": [9223372036854000000, 9223372036854999000]
                },
                "meta": {
                        "person_id": {
                                "range": [444, 999]
                        },
                        "cam_id": {
                                "set": ["12767", "8632", "23989"]
                        }
                }
        }
}'
Ответ
HTTP/1.1 200 Ok
Content-length: 1234
X-search-stat: without_index
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{
  "results": [
    {
      "facen": " qgI3vZRv/z0BQTk9rcirOyZrNpO9MdHavW1WuT0=",
      "meta": {
        "timestamp": 0,
        "photo_hash": "",
        "person_id": 777,
        "cam_id": "8632"
      },
      "score": 0.9964,
      "id": 9223372036854776000
    }
  ]
}
Редактирование метаданных и/или вектора признаков
POST /v2/faces/update/:name
Параметры в теле:
Массив лиц в представлении JSON со следующими полями:
- "id": id лица, uint64_t.
- ”facen”: (опционально) новый вектор признаков, base64. Если параметр отсутствует или- null, поле в базе данных не обновляется.
- ”meta”: словарь, в котором передаются новые метаданные. Если поле- metaотсутствует или- null, оно не обновляется в базе данных.
Возвращает:
- HTTP 200 и словарь со всеми параметрами лица, в том числе неизменными, в случае успеха. 
- HTTP 404 с описанием ошибки, если лица с таким id не существует. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D - -s 'http://localhost:8001/v2/faces/update/sandbox' --data '[{"id":1,"facen":null,"meta":{"m:timestamp":1848}}]'
Ответ
HTTP/1.1 200 Ok
Content-length: 151
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{"meta":{"m:timestamp":1848,"normalized_id":"1_b9pkrf00mjt6h1vmq1kg.png","m:cam_id":"a9f7a973-f07e-469d-a3bd-41ddd510b26f","feat":"{\"score\":0.123}"}, "id":1, ... }
Получение списка галерей
POST /v2/galleries/list
Возвращает:
Массив с галереями, для каждой из которой возвращается имя (name) и число лиц (faces).
Пример
Запрос
curl -D - -s -X POST http://localhost:8001/v2/galleries/list
Ответ
HTTP/1.1 200 Ok
Content-length: 42
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{
  "results": [
    {
      "name": "testgal",
      "faces": 2
    }
  ]
}
Получение информации о галерее
POST /v2/galleries/get/:name
Возвращает:
- HTTP 200 и словарь с параметрами галереи в случае успеха. 
- HTTP 404 с описанием ошибки, если галереи с таким именем не существует. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D - -s -X POST http://localhost:8001/v2/galleries/get/testgal
HTTP/1.1 200 Ok
Content-length: 11
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{"faces":2}
Создание галереи
POST /v2/galleries/add/:name
Возвращает:
- HTTP 200 и пустое тело в случае успеха. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D - -X POST -s 'http://localhost:8001/v2/galleries/add/123'
Ответ
HTTP/1.1 409 Conflict
Content-length: 57
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{"error":{"message":"gallery already exists","code":409}}
Удаление галереи
POST /v2/galleries/delete/:name
Возвращает:
- HTTP 200 и пустое тело в случае успеха. 
- HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи. 
Пример
Запрос
curl -D - -X POST -s 'http://localhost:8001/v2/galleries/delete/123'
Ответ
HTTP/1.1 204 No content
Content-length: 0
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive