Новинка от eBay: ql.io - язык для диалога с web-сервисами

Компанией eBay разработан и представлен новый проект ql.io, включающий в себя реализацию предметно-ориентированного декларативного языка для коммуникации с web-сервисами, выступающую в качестве надстройки над классическим Web API. Язык ql.io разработан на основе SQL. При манипуляциях данными он применяет формат JSON. Основная цель проекта заключается в сокращении временных затрат на разработку путем примитивизации процесса взаимодействия с данными с помощью использования наглядных и ставших уже привычными механизмов составления запросов. Для формирования исходных текстов ql.io использован язык JavaScript, распространяются они под лицензионным обеспечением Apache.

Язык ql.io очень удобен для применения в мэшап-приложениях при обработке данных из разрозненных web-сервисов, к примеру, при комбинации запросов к API eBay и API Google Maps. Новая технология позволяет обрабатывать данные, полученные из различных Web API, в рамках общих операций агрегирования и объединения по аналогии с обработкой данных из нескольких различных таблиц оператором SELECT. При использовании ql.io разработчику не придется постоянно помнить об особенностях Web API различных сервисов, их спецификацию достаточно определить один раз, и далее обращаться к ним посредством унифицированного интерфейса.

Демонстрация возможностей ql.io производится на примере поиска определенного продукта с выводом контактных данных продавцов. Выполнение операции происходит по следующему алгоритму: по ключевым фразам или словам из базы eBay выводятся идентификаторы искомых продуктов; через отдельный API поступают параметры заявок; координаты для заявок определяются через Гугл Geocoding API. Для того чтобы осуществить все действия, указанные в примере, традиционный подход потребовал бы написания довольно громоздкого кода, с помощью которого отправлялись бы запросы и разбирался вывод от трех различных Web API. Использование ql.io позволяет ограничиться единственным SELECT-запросом, уложив в него все вышеописанные действия.

В системе ql.io, как и в SQL, в первую очередь создаются виртуальные таблицы, относящиеся к тому или иному существующему Web API. Обработка данных и формирование запросов к Web API производятся с использованием синтаксиса SQL-оператора SELECT. Вместе с этим реализована возможность осуществления вложенных запросов, объединения данных, сортировки и упорядочения результатов нескольких запросов к таблицам Web API абсолютно разных сервисов. Возвращается результат в JSON-формате. Добавлять данные можно при помощи оператора INSERT.

Как уже было сказано, новый язык удобен при обращении к Web API, он позволяет сократить число строк кода и реализовать логику работы. Кроме этого, ql.io способствует сокращению задержек и увеличению скорости выполнения операций путем уменьшения количества обращений к серверу, осуществления операций по обобщению данных на сервере и выдаче клиенту только той информации, которая необходима для web-приложения.

Чтобы оптимизировать сложные запросы, в которых происходит работа со значительными объемами данных, в проекте предусмотрена возможность использования специального серверного шлюза, который по своей сути выполняет функции СУБД. В его задачи входит первичная загрузка и обработка данных, а клиент при этом получает готовый результат. Запуск компонентов шлюза ql.io производится поверх серверной базы node.js. Готовые программы-скрипты в новом формате ql.io загружаются на шлюз, а затем через прописанный в скрипте интерфейс HTTP API либо WebSocket вызываются из последнего web-приложения. В первом случае web-приложение просто отправляет на шлюз стандартный http-запрос с нужными параметрами.