Статьи

Локальные веб-книги с Mule Cloud Connect и LocalTunnel v2

При использовании внешнего API для WebHooks или Callbacks, как обсуждалось в главах 3 и 5 «Начало работы с Mule Cloud Connect»; Провайдеру API, работающему где-то там, в Интернете, необходимо перезвонить вашему приложению, которое успешно работает в изоляции на вашем локальном компьютере. Чтобы поставщик API мог отозвать ваше приложение, оно должно быть доступно через Интернет. Конечно, вы можете загружать и тестировать свое приложение на общедоступном сервере, но вы можете найти его более быстрым и простым для работы на локальном компьютере разработки, и обычно они находятся за брандмауэрами, NAT или иным образом не могут предоставить общедоступный URL-адрес. Вам нужен способ сделать ваше локальное приложение доступным через Интернет.

Есть несколько хороших сервисов и инструментов, чтобы помочь с этим. Примеры включают в себя ProxyLocal и Forward.io. Кроме того, вы можете настроить свой собственный обратный туннель SSH, если у вас уже есть удаленная система для пересылки ваших запросов, но это по меньшей мере громоздко. Я считаю, что Localtunnel отлично подходит для этой цели, и Localtunnel недавно выпустил версию 2 своего сервиса с множеством новых функций и улучшений. Более подробную информацию можно найти здесь: http://progrium.com/blog/2012/12/25/localtunnel-v2-available-in-beta/

Установка Localtunnel

Те, кто знаком с версией 1 сервиса, будут знать, что локальный клиент v1 был написан на Ruby, и для его установки требовался Rubygems. Клиент v2 теперь написан на Python и может быть установлен через easy_install или pip.

Если вместо этого вы заинтересованы в использовании Localtunnel v1, то я написал предыдущее сообщение в блоге на эту тему здесь: http://blogs.mulesoft.org/connector-callback-testing-local/

Для начала вам необходимо убедиться, что у вас установлен Python. Localtunnel требует Python 2.6 или новее. Большинство систем поставляются со стандартным Python, но если нет, вы можете проверить с помощью следующей команды:

$ python -version

Более подробную информацию об установке Python можно найти здесь: http://wiki.python.org/moin/BeginnersGuide/Download

После завершения вам понадобится easy_install для установки клиента Localtunnel. Если у вас нет easy_install после установки Python, вы можете установить его с помощью этого скрипта начальной загрузки:

$ curl http://peak.telecommunity.com/dist/ez_setup.py | python

После завершения вы можете установить клиент Localtunnel, используя следующую команду:

$ easy_install localtunnel

Первый запуск с LocalTunnel

После установки создать туннель так же просто, как выполнить следующую команду:

$ localtunnel-beta 8082

Параметр после команды: «8000» — это локальный порт, на который мы хотим пересылать Localtunnel. Поэтому любой порт, на котором работает ваше приложение, должен заменить это значение. Каждый раз, когда вы запускаете команду, вы должны получить вывод, подобный следующему:

Port 8082 is now accessible from http://fb0322605126.v2.localtunnel.com ...

Примечание:
поскольку v2 все еще находится в бета-версии; команда local-tunnel-beta будет в итоге установлена ​​как просто localtunnel. Это позволяет вам сохранить v1 на случай, если с бета-версией что-то пойдет не так.

Конфигурирование коннектора

Теперь на Муле! Для демонстрации я буду использовать пример Twilio Cloud Connector из главы 5. Twilio имеет отличную реализацию WebHook с отличными инструментами отладки. Twilio использует обратные вызовы, чтобы сообщить вам о состоянии ваших запросов; Когда вы используете Twilio для осуществления телефонного звонка или отправки SMS-сообщения, API-интерфейс Twilio позволяет отправлять URL-адрес, на котором вы получите информацию о телефонном звонке после его завершения или о состоянии исходящего SMS-сообщения после его обработки.

<?xml version="1.0" encoding="UTF-8"?>
<mule
   xmlns="http://www.mulesoft.org/schema/mule/core"
   xmlns:twilio="http://www.mulesoft.org/schema/mule/twilio"
   xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
   xmlns:spring="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:http="http://www.mulesoft.org/schema/mule/http"
   xsi:schemaLocation="
   http://www.mulesoft.org/schema/mule/twilio
   http://www.mulesoft.org/schema/mule/twilio/current/mule-twilio.xsd
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.mulesoft.org/schema/mule/core
   http://www.mulesoft.org/schema/mule/core/current/mule.xsd
   http://www.mulesoft.org/schema/mule/http
   http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">

   <twilio:config accountSid="${accountSID}" authToken="${authToken}" />
   
   <flow name="sendSmsMessage">
      <http:inbound-endpoint address="http://localhost:8080/sendSms" />
      <twilio:send-sms-message from="07900000000" to="07911111111"
         body="SMS From Mule" status-callback-flow-ref="callbackFlow" />
   </flow>
   
   <flow name="callbackFlow">
      <logger message="Callback received: #[payload]" />
   </flow>

</mule>

В этом примере Twilio Cloud Connector используется для отправки простого SMS-сообщения. Самая важная вещь, на которую стоит обратить внимание — это атрибут «status-callback-flow-ref». Все операции с соединителями, которые поддерживают обратные вызовы, будут иметь необязательный атрибут, оканчивающийся на «-flow-ref». В этом случае: «status-callback-flow-ref». Как следует из названия, этот атрибут должен ссылаться на поток. Это значение должно быть действительным идентификатором потока в вашей конфигурации. Именно этот поток будет использоваться для прослушивания обратного вызова.

Заметьте, что у потока нет входящей конечной точки? Здесь происходит волшебство; когда Twilio обрабатывает SMS-сообщение, он автоматически отправляет обратный вызов этому потоку без необходимости определять входящую конечную точку. Соединитель автоматически создает входящую конечную точку и отправляет автоматически созданный URL-адрес в Twilio.

Настройка обратного вызова

URL-адрес, сгенерированный для URL-адреса обратного вызова, создается с использованием «localhost» в качестве хоста, переменной среды «http.port» или значения «localPort» в качестве порта, а путь URL-адреса обычно представляет собой просто сгенерированную строку или статическое значение. Так что, если я запускаю это локально, он отправит Twilio мой непубличный адрес, что-то вроде: http: // localhost: 80 / … vv3v3er342fvvn. Каждый соединитель, который принимает обратные вызовы HTTP, предоставит вам необязательный дочерний элемент http-callback-config для переопределения этих настроек. Эти настройки могут быть установлены на уровне конфигурации соединителя следующим образом:

<twilio:config accountSid="${accountSID}" authToken="${authToken}">
   <twilio:http-callback-config domain="fb0322605126.v2.localtunnel.com"
      localPort="80" remotePort="8082">
</twilio:config>

Здесь мы исправили предыдущий пример, добавив дополнительную конфигурацию http-callback-config. Конфигурация принимает три дополнительных аргумента: domain, localPort и remotePort. Эти параметры будут использоваться для создания URL, который передается во внешнюю систему. URL будет таким же, как и сгенерированный по умолчанию URL-адрес входящей конечной точки HTTP, за исключением того, что хост заменяется параметром «domain» (или его значением по умолчанию), а порт заменяется настройкой «remotePort» (или его значением по умолчанию). стоимость).

В этом случае мы использовали домен из URL, который Localtunnel сгенерировал для нас ранее: fb0322605126.v2.localtunnel.com и установили localPort на 8082, поскольку мы запускаем команду Localtunnel, используя порт 8082, и remotePort на 80 как сервер localtunnel, просто работает на порту 80.

Вот и все! Если вы запустите эту конфигурацию, вы должны увидеть, как ваш обратный вызов выводится на консоль. То же самое касается любых разъемов OAuth. Если вы используете какие-либо соединители OAuth, созданные с использованием модулей DevAit OAuth, вы можете настроить обратный вызов OAuth аналогичным образом.

Полный проект Mule / Twilio WebHook можно найти здесь: https://github.com/ryandcarter/GettingStarted-MuleCloudConnect-OReilly/tree/master/chapter05/twilio-webhooks