Pull to refresh

Как реализовать SOAP- сервис для работы с таблицами Google через SQL

Reading time 5 min
Views 15K
Была задача — в ходе подготовки демки одного из решений надо было показать, что клиентскую информацию можно сохранять где угодно — в простом случае, например, в таблицах Google, в более сложном (после полугодового «внедрения»и многомиллионного бюджета) в CRM клиента. В используемой нами WSO2 ESB есть коннектор к таблицам Google — но реализовать требуемый функционал на нем оказалось не очень простой задачей — и тогда я на это забил.

Но вот недавно, разбираясь с новыми фичами WSO2 Data Services Server обнаружил, что в нем можно легко реализовать SOAP-сервис для работы с таблицами Google (который потом можно подцепить где угодно). Причем работа с данными в таблице осуществляется через привычный всем SQL.
О том, как это сделать, и хочу рассказать под катом.

(Если вы вдруг подумаете, что уже где-то видели этот пост — не удивляйтесь — прошлый пост был забанен — слишком увлекся ссылками — тут постарался исправиться).

Что такое WSO2 Data Services Server


Но для начала небольшой ликбез. Что такое WSO2? Если по простому — это набор Open-Source проектов (в основном из стека Apache), поставленных на единую OSGI-платформу Carbon. Как результат — из проектов получаем продукты — с единой админкой, поддержкой и прочими вещами. WSO2 закрывает широкий спектр задач интеграции.

В нашем случае — WSO2 Data Services Server служит для организации доступа к данным, причем источники данных могут быть самыми разными — и обычные базы (от MySQL до DB2 — грубо говоря все, для которых есть JDBC-драйвер), и NoSQL базы, и файлы (CSV, Excel) и внешние сервисы (как в нашем случае — Google Spreadsheet). Все это можно обернуть либо SOAP, либо REST-сервисом.

image

Установка WSO2 Data Services Server


Что удобно при работе с продуктами WSO2 — что в плане установки, конфигурации и поддержке они все руководствуются одинаковыми принципами. Установка WSO2 DSS ничем не отличается от установки WSO2 ESB, пример которой можно посмотреть например тут. Грубо говоря — скачали, распаковали, запустили — и вуаля — через несколько секунд можем заходить в админку по адресу (по умолчанию) https: //localhost:9443/carbon (пароль для входа — admin / admin)



Таблица Google


Что такое Google Spreadsheets рассказывать не буду — думаю все знают. Создадим тестовую таблицу с которой будем работать — например с тремя колонками — ID, FirstName, LastName



Таблица открывается по ссылке типа docs.google.com/spreadsheets/d/1k4jebSdGJ39nyDnIc505PI0H2XKk8Q8ewxSpe71/edit#gid=0, часть ссылки до "/edit" — это URL таблицы, который надо будет потом использовать для доступа, в нашем случае это

docs.google.com/spreadsheets/d/1k4jebSdGJ39nyDnIc505PI0H2XKk8Q8ewxSpe71

Создание сервиса


Для того, что бы создать сервис в меню слева выбираем Services -> Add -> Create. На первом экране вводим основные данные — имя сервиса (в моем случае GoogleClients, и Namespace (в моем случае ws.wso2.org/dataservices/google_client). Вы можете использовать любые другие. Остальные параметры оставляем по умолчанию.



Создание источника данных


Следующим шагом идет задание источников данных (Data Source). Один сервис может работать сразу с несколькими источниками — мы в качестве источника должны добавить нашу таблицу Google.

На следующем шаге говорим «Add DataSource», в открывшейся форме вводим имя (например, googleTable), выбираем тип (Google Spreadsheet) и ставим галочку «Use Query Mode» (это позволит нам общаться с таблицей на языке SQL).
Дальше интересней — необходимо задать коннект к таблице. В качестве Google Spreadsheet URL используем URL таблицы, как я показал выше.

А вот над следующими полями надо будет поработать.

Регистрация приложения в Google Developers Console


Следующие поля — это Client ID и Client Secret — идентификация вашего приложения (в данном случае сервиса) с которыми оно будет стучаться в Google Spreadsheets. Что бы получить эти данные надо зайти в Google Developers Console: console.cloud.google.com, зарегистрировать там новое приложение и добавить ему OAuth2 авторизацию (API & Auth -> Credentials -> Add Credentials -> OAuth 2.0 client ID). При создании ключа будет необходимо указать тот же «Authorized redirect URIs» что используется и при регистрации Datasource (в простейшем случае это будет localhost:9443/authCodeReceiver.



После создания мы получим искомые Client ID и Client Secret которые и надо указать в форме регистрации DataSource. Последнее что надо получить — это «Refresh Token» — токен в котором будет «зашита» информация о конкретном пользователе от лица которого мы работаем — для этого нажимаем кнопку «Generate Tokens» — у вас попросят залогиниться в Google (логиньтесь тем пользователем, у которого есть доступ к исходной таблице) и разрешения на доступ. В результате в поле будет вставлен (автоматически) полученный Refresh Token. Дальше жмите «Test Connection» — если все прошло хорошо — вы получите положительный результат — можно двигаться дальше.



Создание запросов


Все, шаг магии прошли — дальше все проще. Следующий шаг — создаем запросы. Начнем с запроса получения всех записей. На следующем шаге «Queries» жмем «Add New Query» и начинаем создавать наш запрос:
  • Имя запроса: например selectClients
  • Datasource: выбираем созданный на прошлом шаге googleTable
  • Запрос: select ID,FirstName,LastName from Sheet1 — где ID, FirstName и LastName — названия колонок в таблице, а Sheet1 — название таба

Да-да-да! В этом и соль — мы будем работать с нашей таблицей Google через знакомый и любимый SQL!

Дальше нажимаем «Generate Response» — по именам колонок будут сгенерированны выходные поля, рекомендуется поменять «Group By Element» — На например «Clients» и «Row name» на «Client» — эти имена будут использоваться в тегах ответа. Если есть желание — можно отредактировать сгенерированные «Output Mapping».



Аналогично создаем insertQuery как insert into Sheet1 (ID,FirstName,LastName) values(?,?,?) — только теперь нам надо будет нажать «Generate Input Mappings» — чтобы сгенерировать входные параметры (по кол-ву вопросов в запросе). Их лучше отредактировать на предмет имен и типов.



Аналогично можно нагенерировать любых других запросов — и select-ы с параметрами, и update-ы и delete-ы — важно что мы можем работать с таблицей Google как с обычной SQL-таблицей. Я не исследовал насколько сложные запросы поддерживаются — но в моем случае мне было достаточно простых, базовых запросов.

Создание операций


Следующий шаг — простой — для каждого запроса генерируем операцию (метод сервиса). Тут все просто — создаем операцию и указываем для какого она запроса.



Тестирование сервиса


Жмем «Finish» — все — SOAP сервис для работы с нашей таблицей Google готов! Можно его протестировать — в списке сервисов кликаем на нашем «Try this service» — и в открывшемся окне выбираем операцию, вбиваем если необходимо параметры — и вперед.



Все! Сервис готов — теперь мы можем работать с нашей таблицей из шины или любого другого приложения (по WSDL мы можем легко сгенерировать код клиента для вызова данного сервиса). Если не запнуться на «магии» с ClientID, Secret Key и получением Refresh Token — то на все про все уходит не более получала.

При этом мы не написали ни строчки кода — ну если не считать простые SQL запросы.
Tags:
Hubs:
+7
Comments 2
Comments Comments 2

Articles