... Старый API после некоторых доработок потерял совместимость, поэтому мы решили выпустить вторую версию. Рекомендуем использовать эту версию для написания запросов. Формат дат для параметров запросов: {code} %Y-%m-%d %H:%M:%S {code} {code} %Y-%m-%d {code} Отличия от старой версии: * Новый адрес для запросов: http://<ip>:8082/rest_api/v2/ * Вместо передачи параметров в GET, перешли на POST * Убрали из вывода результаты промежуточных вызовов (method1, method2,..), оставили только result * Соответственно, немного поменялся схема вывода (см. соответствующий раздел) * Модель указывается в url напрямую, например: http://<ip>:8082/rest_api/v2/Abonents/ * Атрибут запроса fields теперь не нужно маркировать номером метода. Он будет применяться к последнему объекту (возвращенному последним методом) * Документацию (пока что только перечень доступных полей для запроса) можно посмотреть, пройдя браузером по ссылке http://<ip>:8082/rest_api/v2/ * Теперь можно в fields запрашивать вывод объектов по ссылкам (fk, m2m), обратным ссылкам и выводить property объектов, а также выводить конкретные поля этих объектов. Глубина запроса не ограничена, разделитель - двойное подчеркивание. *Внимание\! Django не объединяет запрос по обратной ссылке в один, поэтому он может выполняться заметно дольше для большого кол-ва объектов (например, если запросить все учетные записи у всех абонентов - будет 1 запрос для абонентов и по запросу на каждого абонента для получения его учетных записей)* h3. Схема результата: *Формат ответа:* {code} {"call": "/rest_api/v2/<model_name>/", "result": [<объект>, ...]} {code} тип поля result будет меняться в соответствии с данными (список для перечня объектов (objects.filter), словарь для 1 объекта (objects.get), значение метода при вызове метода и.т.д). *Формат ошибки:* {code} {"call": "/rest_api/v2/<model_name>/", "error": "..."} {code} если в результате есть не пустое поле error, то значит запрос завершился неуспешно *Формат объекта:* {code} {"pk": <id>, "model": "<model>", "fields": {"<field>": <value>, ...} {code} Если поле является ссылкой fk (например поле tarif у модели Abonents), то объект тарифа можно получить, задав fields=\["tarif"\], а pk тарифа, задав fields=\["tarif_id"\], например: {code} {"pk": <id>, "model": "Abonents", "fields": {"tarif": {"pk": <id тарифа>, "model": "Tarif", "fields": {<поля тарифа>}, "tarif_id": <id тарифа>} {code} Также, можно вывести только определенные поля тарифа через двойное подчеркивание: fields=\["tarif__name"\]: {code} {"pk": <id>, "model": "Abonents", "fields": {"tarif": {"pk": <id тарифа>, "model": "Tarif", "fields": {"name": <имя тарифа>}, "tarif_id": <id тарифа>} {code} Еще пример. Запрос ip адресов всех учетных записей абонента fields=\["abonent_id_users__ip"\]: {code} {"pk": <id>, "model": "Abonents", "fields": {"abonent_id_users": [{"pk": <id учетной записи>, "model": "Users", "fields": {"ip": "<ip>"}}, ...]}} {code} h3. Формирование запросов: {code} curl -XPOST -d 'method1=objects.all&arg1={}&fields=["tarif_id","tarif","abonent_id_users__ip","attr","child_folders_count"]' http://<ip>:8082/rest_api/v2/Abonents/ -D - curl -XPOST -d 'method1=objects.all&arg1={}&fields=["tarif_id","tarif__name","tarif__reserve_plan","abonent_id_users__ip","attr","child_folders_count"]' http://<ip>:8082/rest_api/v2/Abonents/ -D - {code} h4. Для получения документации по методам Вызовите в браузере http://<ip>:8082/rest_api/v2/ и выберите интересующую модель. Например демо: [http://195.64.222.86:8087/rest_api/v2/] h3. Примеры: Готовые примеры работы с API с помощью Python вы можете посмотреть здесь: [github|https://github.com/carbonsoft/rest_api_example] Вывести абонентов, у которых есть учетная запись с ip = 127.1.2.3: {code} curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id_users__ip":"127.1.2.3"}' http://<ip>:8082/rest_api/v2/Abonents/ -D - {code} или количество таких абонентов: {code} curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id_users__ip":"127.1.2.3"}&method2=count&arg2={}' http://<ip>:8082/rest_api/v2/Abonents/ -D - {code} Установить абоненту с id = 45 номер квартиры 3: {code} curl -XPOST 'http://<ip>:8082/rest_api/v2/Abonents/' --data 'method1=objects.get&arg1={"id":"45"}&method2=set&arg2={"a_home_number":"3"}&method3=save&arg3={}'; {code} Подключение услуги id=532 абоненту с номером договора BILL0000021 {code} curl -XPOST -d 'http://<ip>:8082/rest_api/v2/Abonents/' --data 'method1=objects.get&arg1={"contract_number":"BILL0000021"}&method2=add_service&arg2={"usluga_id":532}' {code} Сколько абоненту с номером договора 1005633 нужно заплатить что проработать до 2016-10-20 {code} curl -XPOST -d 'method1=objects.get&arg1={"contract_number":"1005633"}&method2=get_credit_for&arg2={"end_credit_date":"2016-10-20"}' http://169.1.80.82:8082/rest_api/v2/Abonents/ {code} Выполнение отчёта 1003 с параметром phone="+79222222222" {code} curl -XPOST -d 'method1=objects.get&arg1={"id":1003}&method2=get_data&arg2={"phone":"+79222222222"}' http://169.1.80.82:8082/rest_api/v2/AdminCustomReports/ -D - {code} По абоненту с id=1383 вывести значение реквизита с id=26 {code}
|