Загальне
Коломоєць Г.П., Швець Ю.О.
Класичний приватний університет, м.Запоріжжя
ДОСЛІДЖЕННЯ ВЕБ-СЕРВІСІВ MOODLE ЗА ДОПОМОГОЮ JAVA-КЛІЄНТА
Додання функціональності Веб-сервісів в систему управління навчанням Moodle 2.x дозволяє не тільки організовувати з нею програмну взаємодію інформаційних систем, але і використовувати Веб-сервіси для автоматизованого збирання та обробки даних із Moodle. При цьому взаємодія здійснюється більш ефективним способом, аніж вибірки даних із СУБД, враховуючи відносну сталість інтерфейсів Веб-сервісів та підтримувані засоби безпеки. В даній роботі представлені деякі результати дослідження Веб-сервісів Moodle 2.6 за допомогою клієнта, розробленого на платформі Java (кросплатформова програмна взаємодія).
Процедура підключення Веб-сервісів до Moodle є достатньо простою і, на наш погляд, добре описана на сайті RUMOURS. Враховуючи, що Moodle підтримує декілька протоколів Веб-сервісів (AMF, REST, SOAP, XML-RPC), нами був обраний архітектурний стиль REST, оскільки він, на наш погляд, є найбільш оптимальним для взаємодії у Веб-середовищі. Треба зауважити, що в Moodle реалізований як простий сервер Веб-сервісів, котрий підтримує аутентифікацію запитів за допомогою логіну та паролю, так і сервер, який використовує маркери (tokens), що ідентифікують користувача визначеного Веб-сервісу. Ми працювали з останнім, оскільки він є найбільш цікавим для практичного використання. Достатньо корисною є можливість організовувати на сайті декілька Веб-сервісів із різним набором функцій та дозволяти працювати з ними різним віртуальним користувачам (від імені яких відсилаються запити) — це значно підсилює інформаційну безпеку.
На сторінці Creating a web service client сайту документації Moodle знаходяться посилання на приклади вихідного коду клієнтів, у тому числі на бібліотеку Java Library for REST. Тому ми, перш за все, почали досліджувати функціональність цієї бібліотеки (була доступна її версія 0.1.5). Безперечними перевагами бібліотеки є наявність чисельності класів, які інкапсулюють властивості і поведінку різних об'єктів Moodle: курсу, користувача, файлу, групи, модуля, повідомлення та інш. Використання цих класів в об'єктно-орієнтованому коді є зручним та безпечним (наявні класи виключень).
Рис. 1. Склад бібліотеки MoodleRestLibrary
Але, на жаль, далеко не всі засоби бібліотеки відпрацьовували. Наприклад, при апробації класу
MoodleGetAllCourses,
доступного на сторінці бібліотеки, ми отримали виключення пов'язане з тим, що методsetMoodleCourseField(String nodeName, String content)
бібліотечного класуMoodleCourse
не перевіряє правильність заповнення значень полів об'єкту-курсу. В нашому випадку відсутність заповнення поляhiddensextions
курсу призвело до передачі пустого рядку в методInteger.parseInt
, внаслідок чого виникло виключенняNumberFormatException
. Були відсутні класи деяких об'єктів Moodle, наприклад, категорій та когорт. Окрім того, бібліотека орієнтована на використання XML для кодування інформації, що передається, хоча в останніх версіях Moodle також підтримується формат з меншими накладними витратами - JSON. Виходячи із результатів дослідження Java Library for REST, нами було прийнято рішення про розробку власного REST клієнта із орієнтацією на JSON-формат передачі даних. У якості бібліотеки підтримки парсінгу JSON ми використовували JSON.simple.Організація виклику методу Веб-сервісу була вибрана подібною прикладу REST-клієнта Jerome Mouneyrac, вихідний код якого доступний по посиланню Sample clients for testing Web Services із розділу Адміністрування сайту-Розширення-Веб-служби-API Documentation серверу Moodle. Перевагами підходу Jerome Mouneyrac, на наш погляд, є передача аргументів методу Веб-сервісу в тілі запиту (використовується HTTP-метод POST), що зручно, враховуючи необхідність передачі в деяких запитах великої кількості параметрів. Також цікавою є можливість вибору формату передачі відповіді Веб-сервісу (XML або JSON). Однак виведення відповіді методу Веб-сервісу в консоль, що використовується в вказаному прикладі коду, не є цінним з точки зору програмної інженерії. Більшу цінність мав би код, який маніпулює об'єктами Moodle. Враховуючи це, ми розробили бібліотеку клієнта із засобами організації викликів REST Веб-сервісів Moodle, побудованого за архітектурним шаблоном проектування MVC. Так, в пакеті
model
бібліотеки розташовані класи об'єктів Moodle (категорій, користувачів, курсів і т.п.), які використовуються Веб-сервісами Moodle. В пакетіcontroller
бібліотеки містяться класи з методами виклику тих або інших функцій Веб-сервісу. При цьому у кожному класі методи згруповані за об'єктами, з якими ці методи працюють. Нами передбачалось, що класи рівня презентації (view
) будуть розроблені та розташовані у додатках, які використовуватимуть нашу бібліотеку (приклад такого додатку буде наведений далі). Окрім того, відповідно до шаблону проектування сінглетон був розроблений модуль конфігурації, який зчитує дані конфігурації із зовнішнього текстового файлу (пакетservice
) [1]. На Рис. 2 приведена UML-діаграма класів бібліотеки.Рис. 2 Діаграма класів бібліотеки клієнту доступу до REST Веб-сервісів Moodle
- створення (або отримання) об'єкту конфігурації
MoodleRestWSConfigSingleton
та отримання з нього доменного ім'я, маркеру та формату передачі повідомлень (останній на цей час є надлишковим, оскільки парсінг реалізований тільки для JSON, але може бути цікавим при подальшій розробці бібліотеки); - формування необхідних аргументів для методів запитів (що будуть передаватися в тілі запиту);
- виконання запиту методу Веб-сервісу викликом методу
MoodleWSRestCall
класуMoodleRestWSConnector
; - парсінг засобами бібліотеки JSON.simple відклику, отриманого від Веб-сервісу;
- пакування отриманої інформації в об'єкт (або колекцію об'єктів Moodle) та їх повернення з методу.
Загальний алгоритм роботи методів класів пакету controller
складається з таких етапів:Треба зауважити, що при парсингу полів для незаповнених полів ми передбачили занесення значень за замовченням, тим самим попередив виникнення виключень. Для перевірки роботи методів класів пакету
controller
ми розробили для них модульні тести із використанням бібліотеки JUnit.Для ілюстрації використання розробленої бібліотеки (Рис. 3 а) нами був створений Веб-додаток (Рис. 3 б), функціональність якого передбачала виведення списків всіх категорій та всіх дисциплін сайту Moodle.
Рис. 3 Структура програмних проектів: а) бібліотеки клієнту доступу до REST Веб-сервісів Moodle,
б) Веб-додатку, який використовує бібліотекуІз Рис. 3 б видно, що розробник повинен підключити бібліотеку із засобами доступу до Веб-сервісів Moodle, а також бібліотеку JSON.simple (стандартна бібліотека JSTL використовується сторінками JSP) . Розробнику Веб-додатку достатньо тільки розробити біни рівня презентації (пакет
view
) (у нашому випадку вони містили колекції класівMoodleCourse
таMoodleCategory
, які заповнювались методами доступу до Веб-сервісу Moodle розробленої бібліотеки). JSP-Веб-сторінки стандартним образом використовують ці біни для виведення інформації про всі категорії або дисципліни, зареєстровані на сайті (Рис. 4) .Рис. 4. Приклад роботи Веб-додатку, що використовує бібліотеку клієнта доступу до REST Веб-сервісів Moodle
Треба відмітити, що в даній роботі ми тільки визначились з архітектурою та інженерними рішеннями для бібліотеки Java- клієнта Веб-сервісів Moodle, подальша робота по доданню об'єктів Moodle та класів з методами доступу до відповідних Веб-сервісів планується в рамках дипломних та магістерських робіт студентів кафедри системного аналізу та програмної інженерії Класичного приватного університету.
Список використаних джерел
- Фримен Э. , Фримен Э. , Сьерра К. , Бейтс Б. Паттерны проектирования. — СПб.: Питер, 2011. —656 с.: ил.
- створення (або отримання) об'єкту конфігурації