API REST v2.0

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (7)

просмотр истории страницы
[http://demo5.carbonsoft.ru/rest_api/v2/]

h2. Как выполнить запрос?

h3. Описание примеров

h5. IP в запросе
В API запросах описаныых в статье указан внутренний IP контейнера биллинга *169.254.80.82*. Доступ к нему есть только внутри сервера биллинга. Соответсвенно запросы необходимо выполнятб с консоли.
Если вы хотите сделать запрос со стороннего ПК, то настройте доступ к API по [статье|API#Настройка доступа к API].

h5. Порт
API запросы выполняются к веб серверу биллинга по порту *8082*.

h5. Описание пайплана в примерах
Во многоих примерах кроме самого API запроса есть дополнительные команды. Разберём их на примере API запроса *Установить абонентам из папки с id 1354 статус с id 26*:
{code}
sqlexec "set list on; select id from abonents where parent_id=1354" \
| awk ' {print $2} ' | sed '/^$/d' | \
while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=set_object_status&arg2={"status_id": "26"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
{code}
# Сначала происходит выборка данных командой [sqlexec|Конструктор отчетов#Выполнение отчёта из консоли утилитой sqlexec]
{code}
sqlexec "set list on; select id from abonents where parent_id=1354"
{code}
# Так как отчёт может вернуть несколько столбцов, мы вибираем один или несколько нужных утилитой *awk*
{code}
awk ' {print $2} '
{code}
# Команда [sqlexec|Конструктор отчетов#Выполнение отчёта из консоли утилитой sqlexec] кроме отчёта возращает несколько пустых строк. Обрежем их утилитой *sed*, чтобы в запрос не попали пустые значения
{code}
sed '/^$/d'
{code}
# Отчёт вернёт несколько значений. Поэтому API запрос необходимо выполнить в цикле *while*. Данные в запрос будут переданы в переменной *$line*
{code}
while read line; do curl ... -D -; done
{code}
Можно считать несколько переменных одновоременно
{code}
while read line1 line2 line3; do curl ... -D -; done
{code}

h5. Как удобно выполнить большой запрос из консоли
# Создайте *bash* скрипт
{code}
touch my_script.sh
{code}
# Запишите в него скрипт
{code}
#!/bin/bash

sqlexec "set list on; select id from abonents where parent_id=1354" \
| awk ' {print $2} ' | sed '/^$/d' | \
while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=set_object_status&arg2={"status_id": "26"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done

exit 0
{code}
# Дайте права на исполнение
{code}
chmod 744 my_script.sh
{code}
# Запустит скрипт
{code}
./my_script.sh
{code}

h2. Примеры

Некоторые готовые примеры работы с API с помощью Python вы можете посмотреть здесь: [github|https://github.com/carbonsoft/rest_api_example]

{warning}
{warning:title=Очень Важно!}При выполнении API-запроса к серверу, происходит формирование задачи для изменения записей в БД, а не моментальное исполнение требуемых действий.
Поэтому, будьте внимательны, когда делаете запрос к большому количеству записей(массовое изменение NAS и т.д), требуется подождать некоторое время (10-30 минут) для завершения заданий, и после этого можете приступать к новым запросам. Иначе, могут возникнуть наложения действий со следующим запросом и начальный запрос выполнится некорректно. {warning}
{warning}

h3. Абоненты