Научная статья на тему 'Реализация архитектуры rest API с помощью Python для взаимодействия с сервисами приложения и изоляции базы данных CouchDB'

Реализация архитектуры rest API с помощью Python для взаимодействия с сервисами приложения и изоляции базы данных CouchDB Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1386
87
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Капитонов Владимир Павлович

В статье рассматривается технология создания информационной системы на основе REST API с использованием языка программирования Python, а также обеспечивающая возможность изоляции базы данных CouchDB.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Капитонов Владимир Павлович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Реализация архитектуры rest API с помощью Python для взаимодействия с сервисами приложения и изоляции базы данных CouchDB»

РЕАЛИЗАЦИЯ АРХИТЕКТУРЫ REST API С ПОМОЩЬЮ PYTHON ДЛЯ ВЗАИМОДЕЙСТВИЯ С СЕРВИСАМИ ПРИЛОЖЕНИЯ И ИЗОЛЯЦИИ БАЗЫ ДАННЫХ COUCHDB Капитонов В.П.

Капитонов Владимир Павлович — студент, кафедра информационных систем и технологий, Дальневосточный государственный университет путей сообщения, г. Хабаровск

Аннотация: в статье рассматривается технология создания информационной системы на основе REST API с использованием языка программирования Python, а также обеспечивающая возможность изоляции базы данных CouchDB.

Постановка задачи.

Необходимо создать архитектуру REST (REpresentational State Transfer) [1] API для работы информационной системы. Она должна изолировать базу данных CouchDB [2] и обеспечивать возможность фильтрации результатов, сортировку, постраничную навигацию и частичное обновление данных.

Выбор языка программирования.

В качестве языка для разработки был выбран язык программирования Python [3]. Основными преимуществами языка Python, послужившими для выбора его в качестве основного языка стали:

1. Простота и скорость разработки. Разработка программных продуктов на языке Python в случае необходимости создание небольшой программы с минимальным графическим интерфейсом требует меньше временных ресурсов в сравнении с такими языками как С, С++, С#, Java.

2. Открытость. Python является открытым проектом и разрабатывается большим количеством программистов. Интерпретатор языка распространяются бесплатно, также в свободном доступе доступно значительное количество кодов программ, написанных без использования специализированных технологий.

3. Кроссплатформенность. Программы, написанные на языке Python, могут быть «собраны» под большинство современных операционных систем. Так без особых проблем получается реализовать в рамках Windows, OS X и Linux одни и те же программные продукты, написанные на Python.

4. Значительное количество открытых библиотек и модулей. В настоящее время в свободном доступе находится значительное количество сторонних библиотек для работы с файлами, базами данных и т.д.

Поиск вариантов реализации.

Так как выбранный нами язык программирования является открытым на нём написано много фреймвоков для реализации REST архитектуры. Основными из них являются Flask[4], EVE[5], Django REST Framework[6]. При анализе доступных инструментов был выбран микрофрамворк Flask. Существенным его отличием является то, что он не зависит от других подобных библиотек. Например, EVE работает на Flask и Cerberus, а Django REST Framework не может работать без пакета Django. На ряду с этим Flask является очень простым и в то же время мощным инструментом для разработки веб-приложений, хорошо документирован и поддерживается сообществом разработчиков.

Для реализации веб-приложения необходимо создать и запустить управляющий файл. Назовём его app.py. Для его работы в него необходимо включить следующий минимальный код:

from flask import Flask app = Flask( name )

@app.route('/')

def index(): return "Hello, World!"

if name == "_main_": app.run(debug=True)

Разберём его более подробно. Первым делом мы импортируем класс Flask. Затем создаем экземпляр этого класса app. В принципе он и будет нашим приложением. Для указания Flask какой Url-адрес будет вызывать нашу функцию используем декоратор route (). После исполнения функции в ответ на Url-запрос будут возвращены данные отображаемые в браузере.

Реализация поставленных задач.

Выше описанный принцип прекрасно подходит для реализации поставленных перед нами задач. Осталось проработать тонкости взаимодействия всех элементов системы, а именно принцип работы

и взаимодействия базы данных с Flask и формирование клиентской части приложения на основании полученных данных.

В качестве базы данных используется продукт фонда Apache объекто-ориентированная база данных CouchDB. Данный программный продукт с открытым исходным кодом, распространяется свободно и реализован в рамках подхода NoSQL.

Веб сервер CauchDB будет запущен на локальном хосте (127.0.0.1) сервера исключая возможность удалённого доступа. Все взаимодействия с базой данных будут происходить по средствам сервиса, реализованного на Flask. Доступ к базе данных будет реализован с помощью модуля couchdb[7] для Python.

Для добавления нового объекта в базу данных необходимо импортировать модуль couchdb в декораторе route() использовать метод [POST] и в функцию активируемую Url-адресом внести следующий код:

@app.route('/server/api/v1.0/post/<database>', methods=['POST'])

def create(database):

if not request. json: abort(400)

doc = request.json

couch = couchdb.Server(' http://127.0.0.1:5984/') (1)

if database in couch:

db = couch[database] (2) else:

db = couch.create(database) (3)

db.save(doc) (4)

return jsonify(doc["_id"]), 201

Данный код выполняет несколько действий. Первое выполняет проверку поступивших данных в данном примере выполняется проверка являются ли поступившие данные объектом json. Если не являются клиенту отправляется уведомление об ошибке и данные не принимаются. С данным подходом можно обеспечить любую проверку поступающих данных быстро и просто. В том случае если проверка пройдена выполняется соединение с сервером базы данных (1). Затем выполняется проверка, имеется ли в полученном экземпляре CouchDB база данных, название которой было передано в url, в том случае если условие выполняется переменной db присваивается её экземпляр (2), если нет база данных создается в структуре CouchDB(3). И, наконец, в неё сохраняется полученный объект (4). Последнее действие выполняемое этим кодом это направление клиенту id документа, присвоенного объекту в базе данных и статус кода который сигнализирует добавление объекта в базу данных. Как видно из примера, код довольно просто и в тоже время очень функционален, так как Python имеет в своем арсенале множество библиотек над поступившим объектом можно проводить множество операций от простейших проверок до кардинальной модификации.

Посмотреть интересующий нас объект, зная его id, также просто, для этого необходимо подключиться к CouchDB и получить экземпляр базы данных используя строки (1) и (2) предыдущего кода после чего получить документ из экземпляра базы данных doc = database[id]. Просто, но как показывает практика не всегда удобно и эффективно. Для более продуктивной работы с базой данных необходимо использовать представления на предварительную выборку и группировку, реализованные в самой базе данных. Более подробно о представлениях можно прочесть в официальной документации к CouchDB [2]. В рамках данной статьи мы рассмотрим работу с представлениями используя Flask. И так рассмотрим код позволяющий фильтровать документы по ключу, расположенные в пределах начального и конечного ключей:

@app.route(7server/api/v1.0/test/<startkey>/<endkey>', methods=['GET'])

def data_pi(startkey, endkey):

dat = []

start = startkey

end = endkey

couch = couchdb.Server(COUCHDB_DATABASE_URI)

db = couch['database']

for i in db.view('ch0/Channel_2', startkey=start, endkey=end): (1)

dat.append(i) return jsonify(dat)

Большая часть кода в этом примере нам уже знакома. Доступ к представлению обеспечивается строкой (1) где 'ch0/Channel_2' это представление в созданное в базе данных. Данное представление возвращает объект, который мы перебираем при помощи цикла и формируем список словарей. Выборка и сортировка данных ведётся по ключам данного словаря и зависит от переданных значений startkey и endkey. Так же для фильтрации можно использовать можно использовать конкретное имя ключа.

Настройка виртуального хоста под управлением Apache 2.

Для настройки виртуального хоста необходимо создать файл конфигурации. Для этого в терминале необходимо ввести следующую команду: nano /etc/apache2/sites-available/FlaskApp. conf:

После чего откроется реактор nano с пустым файлом (использовать можно любой удобный редактор) туда необходимо ввести следующий код: <VirtualHost *:80>

ServerName mywebsite.com ServerAdmin [email protected]

Адрес сервера

WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi

<Directory Order Allow </Directory>

/var/www/FlaskApp/FlaskApp/> allow,deny

from all

Путь к файлу wsgi

Настройка директорий

ErrorLog $ {APACHE_LOG_DIR}/error. log

LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Настройка логов

</VirtualHost>

Сохраните и закройте файл. После чего необходимо включить виртуальный хост выполнив следующую команду: a2ensite FlaskApp;

Для обслуживания приложений Flask сервер Apache[8] использует файл .wsgi. Перейдите в каталог приложения и создайте файл flaskapp.wsgi (вместо flaskapp укажите имя своего приложения). После чего внесите в файл следующий код: #! /usr/bin/python

import sys

import logging

logging.basicConfig(stream=sys.stderr)

sys.path.insert(0,"/var/www/FlaskApp/") - путь к вашему приложению. from FlaskApp import app as application

application.secret_key = 'Add your secret key'

На этом настройка завершена осталось только перезапустить Apache при помощи следующей команды: service apache2 restart;

В случае возникновения ошибок их всегда можно детально проанализировать, открыв error.log файл. Заключение.

Используя данный принцип, возможно изолировать базу данных CouchDB и обеспечить необходимую подготовку данных для последующего направления на клиентскую часть приложения. Данный подход очень просто в реализации и позволяет оградить API от тяжёлых запросов которые могут нарушить работу серверной части приложения.

Список литературы

1. Richardson L. RESTful Web Services/ L. Richardson, S. Ruby. - O'Reilly Media 2007. - 454c.

2. Apache CouchDB 2.1 Documentation. [Электронный ресурс]: Режим доступа: http://docs.couchdb.org/en/2.1.1/ (дата обращения: 20.03.2018).

3. Прохоренок Н.А. Python 3 Самое необходимое/ Н.А. Прохоренок, В.А. Дронов. Санкт-Петербург «БХВ-Петербург», 2016. 461 с.

4. Flask Documentation. [Электронный ресурс]: Режим доступа: http://flask.pocoo.org/docs/0.12/ (дата обращения: 20.03.2018).

5. Eve. The Simple Way to REST. [Электронный ресурс]. Режим доступа: http://python-eve.org/ (дата обращения: 18.05.2018).

6. Django REST framework. [Электронный ресурс]. Режим доступа: http://www.django-rest-framework.org/ (дата обращения 18.05.2018).

7. CouchDB-Python. [Электронный ресурс]. Режим доступа: https://gist.github.com/marians/8e41fc817fD4de7c4a70/ (дата обращения: 18.05.2018).

8. Apache HTTP Server Version 2.4 Documentation. [Электронный ресурс]. Режим доступа: https://httpd.apache.org/docs/2.4/ (дата обращения: 20.03.2018).

ПОКАЗАТЕЛИ КАЧЕСТВА ЭЛЕКТРОЭНЕРГИИ, ВЛИЯЮЩИЕ НА РАБОТУ ЭЛЕКТРООБОРУДОВАНИЯ ГОРОДА Марданов Ф.Х.

Марданов Фарит Халитович — студент, кафедра электроснабжения промышленных предприятий, Казанский государственный энергетический университет, г. Казань

Аннотация: в статье анализируются основные показатели качества электроэнергии и их влияние на электроприемники городских потребителей.

Ключевые слова: электроэнергетика, показатели качества электроэнергии.

Электрическая энергия как товар используется во всех сферах жизнедеятельности человека, обладает совокупностью специфических свойств и непосредственно участвует при создании других видов продукции, влияя на их качество.

Все основные показатели качества электроэнергии (ПКЭ) связаны с такими основными параметрами, как отклонение частоты и соответственно напряжения, не говоря уже о колебаниях напряжения и несимметрии напряжения. Для того чтобы своевременно избежать наиболее длительного нарушения нормальной работы электродвигателей, и электроприемников основные ПКЭ не должны выходить за существующие пределы собственных нормальных значений. Что касается послеаварийных режимов, то здесь они не должны выходить за основные пределы установленных максимальных значений.

Основными электрическими приемниками, ухудшающими ПКЭ:

• преобразовательные установки различных видов;

• сварочные установки, газоразрядные источники света и т.д.;

• электрические машины (трансформаторы, двигатели, генераторы).

Основными ЭП, чувствительными к КЭ в сетях, являются электронные системы управления технологическими процессами, системы возбуждения синхронных двигателей, системы связи и диспетчеризации, устройства релейной защиты и автоматики.

Одним из основных условий обеспечения более эффективной работы электродвигателей является именно питание их электроэнергией, в то время как ее параметры соответствуют всем основным требованиям в области качества.

Добиться высокого качества электроэнергии городских потребителей можно с помощью устройств регулирования напряжения, изменения конфигурации сети, используя батареи конденсаторов, синхронные машины, устройства фильтрации и другие устройства, позволяющие максимально эффективно и без потерь использовать электроэнергию. На предприятиях должен быть реализован весь комплекс мер по повышению качества электроэнергии [2].

Недопустимые отклонения ПКЭ могут привести:

• к перегреву обмоток электрооборудования, сокращению срока службы изоляции электрических машин и аппаратов, пробою изоляции и выходу оборудования из строя;

• к ухудшению работы устройств автоматики, телемеханики и связи, необеспечению параметров срабатывания электрооборудования и его отказам;

• к выпадению синхронных электродвигателей из синхронизма;

• к увеличению скольжения у асинхронных электродвигателей (АД), вплоть до их остановки;

• к появлению дополнительных потерь в электрических машинах, трансформаторах и сетях; в батареях конденсаторов, а, следовательно, к повышенному расходу ЭЭ, снижению

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.