Использование базовых возможностей телекоммуникационной сети для разработки Web-приложений: Часть 2. Использование API в стиле REST

Традиционно создание телекоммуникационных приложений подразумевало знание деталей телекоммуникационных сетей и телекоммуникационных протоколов, таких как SMPP, MLP и Parlay. В этой статье из двух частей описывается, как разработчик приложений, не имеющий навыков программирования в этой области, может создавать сервисы, используя базовые телекоммуникационные функции, доступные в сети поставщика услуг связи. Во второй части статьи обсуждаются простые способы разработки телекоммуникационных приложений с использованием API в стиле REST, предоставляемых программным обеспечением IBM® WebSphere® Телеком Server Web Services (TWSS).

Рагхунатх Наир, главный инженер-программист, IBM

Фото автораРагхунатх Е. Наир (Raghunath E. Nair) работает главным инженером-программистом в IBM India Software Lab в Бангалоре. Пришел в IBM в 2006 году. Предыдущая должность связана с проектированием, разработкой и поддержкой программного обеспечения связи для IBM WebSphere, включая IBM WebSphere TWSS IBM WebSphere IMS Connector. В сферу деятельности входит интеграция промежуточного ПО, SOA, Web-сервисы и связь. Соавтор книги "Использование WebSphere Message Broker в качестве ESB с WebSphere Process Server", вошедшей в серию IBM Redbooks, и бакалавр технических наук в области электроники и связи, выпускник Университета Калькутты.



Чандрашекар Наик, штатный инженер-программист, IBM

Фото автораЧандрашекар Б. Наик (Chandrashekar B. Naik) работает инженером-программистом в IBM India Software Lab. Пришел в IBM в 2004 году и обладает опытом в области разработки и тестирования программного обеспечения. В сферу интересов входят Java, J2EE и программирование Web-сервисов, включая WebSphere Application Server, Telecom Web Services Server, Mobile Portal Accelerator, проникающие вычисления и программное обеспечение WebSphere для решения задач связи. В настоящее время специализируется на разработке, поддержке и тестировании WebSphere Telecom Web Services Server. Сертифицированный программист Sun и бакалавр технических наук по вычислительной технике, выпускник Технологического университета Visveswaraiah в Белгауме.



01.08.2011

Вторая часть статьи, состоящей из двух частей, демонстрирует, как разработчики, обладающие ограниченными навыками программирования, могут легко разрабатывать телекоммуникационные Web-приложения, используя API в стиле REST, предоставляемые программным обеспечением IBM® WebSphere® Телеком Server Web Services (TWSS). По сравнению с методом Web-сервисов, описанным в первой части, вызов в стиле REST осуществляется гораздо проще, и нет необходимости создавать клиенты Web-сервисов из файлов WSDL. В первой части мы рассмотрели сценарий 1: создание телекоммуникационного приложения с помощью Web-сервисов (см. ссылку под "Описанием" этой статьи).

Сценарий 2. Создание телекоммуникационного Web-приложения с помощью Ajax и JSON

Этот сценарий демонстрирует, как разработать телекоммуникационное приложение с использованием подхода Ajax, формата данных JavaScript Object Notation (JSON) и API в стиле REST, предоставляемых Telecom Web Services Server.

Пример

  • Розничный торговец хочет разослать всем своим клиентам рекламное объявление, информирующее их о сезонном предложении. Он хочет также получать информацию о статусе доставки этих SMS-сообщений.
  • Эту работу он поручает стороннему программисту, который должен разослать массу SMS-сообщений, используя телекоммуникационное приложение Web 2.0.

Создание приложения Web 2.0

В этом разделе мы покажем, как разработать приложение с использованием Ajax-технологии для графического интерфейса пользователя, API в стиле REST для доступа к телекоммуникационным ресурсам и формата данных JSON для решения самой задачи. Прилагаемый пример HTML-страницы (см. раздел Загрузки) демонстрирует, как создать Ajax-вызов к REST-ресурсам, используя объект данных JSON для TWSS. Здесь обсуждается та часть JavaScript, которая выполняет вызов (см. код в листинге 1).

В функции JavaScript вырабатывается дескриптор зависящего от браузера объекта XMLHttpRequest. Сообщение JSON формируется с помощью senderName, адреса и параметров сообщения, получаемых из HTML-страницы (обязательные параметры - только адрес и сообщение).

Используемый здесь метод Stringify преобразует объект JSON в текст JSON. См. ссылку в разделе Ресурсы.

XMLHttpRequest инициализируется посредством метода open. Этому методу передаются следующие параметры:

  • HTTP-метод, используемый для передачи запроса;
  • URL, указывающий на ресурс REST.
    Примечание. IBM WebSphere Telecom Toolkit не поддерживает полезную нагрузку JSON. Вместо него для проверки укажите URL фактического URI TWSS REST. Подробные сведения о ресурсах REST, поддерживающих JSON, сдержатся в документации TWSS 7.1, Developing > REST Style Access Using HTTP > Interfaces. См. ссылку в разделе Ресурсы;
  • логическое значение, указывающее, является ли транзакция асинхронной.

Метод sendSMS передает объект JSON на сервер с использованием этих параметров.

При каждом изменении состояния готовности запускается функция onreadystatechange. В качестве ответа она получает объект JSON, содержащий messageId, который служит идентификатором запроса, указывая на конкретный запрос доставки SMS.

Теперь этот messageId можно использовать для получения подтверждения доставки отправленного SMS.

Листинг 1. Код JavaScript для вызова ресурса SMS REST
<script type="text/javascript">
function sendSMS()
{
	var xmlHttp= null;
	var url = "http://localhost:9089/ShortMessageService/services/JSON/sms";
	
	if (window.XMLHttpRequest)
	  {// код для IE7+, Firefox, Chrome, Opera, Safari
		  xmlHttp = new XMLHttpRequest();
	  }
	else
	  {// код для IE6, IE5
	  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	  }

	var senderName = document.getElementById('senderName').value;
	var address = document.getElementById('addresses').value;
	var message = document.getElementById('message').value;

	var addressArr = new Array();
	var addresses = address.split(/,/);
	for ( var i = 0; i < addresses.length; i++) {
		addressArr.push(addresses[i]);
	}

	//Создание объекта JSON
	var jsObject = {"addresses": addressArr ,"senderName": "" 
			+ senderName + "","message": "" + message + ""};
	var jsSON = JSON.stringify(jsObject);
	
	xmlHttp.open("POST", "" + url + "", true);
	
	xmlHttp.onreadystatechange = function () {

  	if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
       	my_JSON_object = JSON.parse(xmlHttp.responseText);

		if (my_JSON_object.messageId!=undefined) {
			alert("Response from Server:"+ my_JSON_object.messageId);
			document.getElementById("requestIdentifier").value = "";
			document.getElementById("dStat").innerHTML="";
		} 
		else if (my_JSON_object.result!=undefined) {
       	    document.getElementById("requestIdentifier").value = my_JSON_object.result;
    	   	my_JSON_object = JSON.parse(xmlHttp.responseText);
    	   	document.getElementById("dStat").innerHTML="";
		}
  	} 
	};
	
	xmlHttp.send(jsSON);
}
</script>

В листинге 2 приведена функция JavaScript, которая демонстрирует, как получить подтверждение доставки отправленного SMS.

Листинг 2. JavaScript для вызова операции getDeliveryStatus
<script type="text/javascript">
function getDeliveryStatus()
{
      var xmlHttp= null;
      var url = 
      "http://localhost:9089/ShortMessageService/services/JSON/smsDeliveryStatus";
      if (window.XMLHttpRequest)
      {// код для IE7+, Firefox, Chrome, Opera, Safari
                 xmlHttp=new XMLHttpRequest();
          }
      else
          {// код для IE6, IE5
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
          }

      var reqId = document.getElementById('requestIdentifier').value;
      xmlHttp.open("POST", ""+ url +"", true);

      var jsObject = {"requestIdentifier": + reqId +""};
	
      var jsSON = JSON.stringify(jsObject);
      xmlHttp.open("POST", ""+ url +"", true);
	
      xmlHttp.onreadystatechange = function () {
                  if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
                          xmlNode = JSON.parse(xmlHttp.responseText);

                          if (xmlNode.messageId!=undefined) {
                          alert("Response from Server:"+ xmlNode.messageId);
                          document.getElementById("dStat").innerHTML="";
                        } 
                        else
                                {

               var innerHTML = '<table border=\'2\' >' +
               '<tr> <th> address </th> <th> Delivery Status</th> </tr>' ;
               for (var i = 0 ; i < xmlNode.result.length ; i++) {
                                var item = xmlNode[i];
                                innerHTML += '<tr>' +
                                '<td> ' + xmlNode.result[i].address + '</td>' +
                                '<td> ' + xmlNode.result[i].deliveryStatus + ' </td>' +
                                '</tr>';
               }
               innerHTML += "</table>";
               document.getElementById("dStat").innerHTML = innerHTML;
               }
               }
               };
               xmlHttp.send(jsSON);
}
</script>

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

  • использовать браузер, не ограничивающий межсайтовый скриптинг. Предупреждение: это может быть небезопасно;
  • сделать так, чтобы сценарий запускался на том же сервере, что и TWSS.

Сценарий 3. Создание телекоммуникационного приложения с помощью Java и OneAPI

Об инициативе OneAPI

"Инициатива GSMA OneAPI определяет широко поддерживаемый набор легковесных и удобных Web-API, которые позволяют операторам мобильных и других сетей предоставлять разработчикам Web-приложений полезную информацию о сети и ее функциональные возможности. Она направлена на экономию сил и времени, необходимых для создания универсальных приложений и контента для сетей разных операторов мобильной связи".
Источник: Web-сайт GSMA OneAPI. См. ссылку в разделе Ресурсы.

Для сценария 3 используется тот же пример, что и для сценария 2. Однако здесь мы демонстрируем, как разработать телекоммуникационное приложение с помощью простой Java-программы и ресурсов REST OneAPI, предоставляемых TWSS v7.1.

TWSS 7.1 поддерживает спецификацию OneAPI версии 0.9. В число поддерживаемых моделей данных входят XML, JSON и form-url-кодирование. Как правило, запросы поступают в form-URL-коде, а ответы ― всегда в XML. За более подробными сведениями об интерфейсах, поддерживаемых в TWSS 7.1, включая SMS, TL, and Payment, обращайтесь к документу TWSS 7.1: Developing > REST Style Access Using HTTP > Interfaces. См. ссылку в разделе Ресурсы.

Код, приведенный в листинге 3, формирует операцию sendSMS с обязательными и факультативными параметрами. Обратите внимание на следующие элементы:

  • к аргументам для формирования URL ресурса добавляется URL;
  • чтобы направить запрос по адресу URL REST TWSS, вызывается метод исполнения метода HttpClient с параметром HTTPMethod;
  • ответ поступает через метод getResponseBody метода HTTPMethod;
  • после получения ответа sendSMS из него извлекается MessageID, и делается аналогичный запрос метода getDeliveryStatus;
  • статус доставки сообщения отображается в нижней части экрана.
Листинг 3. Фрагмент Java-кода для вызова операции sendSMS
//Инициализация объекта HttpClient 
org.apache.commons.httpclient.HttpClient client = 
        new org.apache.commons.httpclient.HttpClient();

//Формирование запроса sendSMS 
urlString = resourceURL + "?" + strAddressArr + "&message=" + strMessage + 
	"&correlator=" + strCorrel + "&notifyURL=" + strNotifyURL + 
	"&senderName=" + strSenderName;
	
//Инициализация PostMethod с указанием целевого URL  
org.apache.commons.httpclient.methods.PostMethod postMethod = 
        new org.apache.commons.httpclient.methods.PostMethod(urlString);
	
//Выполнение postmethod и получение статуса HTTP-ответа
statusCode = client.executeMethod(postMethod);
System.out.println("HTTP status code:"+ statusCode);
	
//Считывание тела ответа в строку
postResponse = postMethod.getResponseBody();
strResponseAsAString = new String(postResponse);
System.out.println("SendSMS Response :" + strResponseAsAString);

//Создание строки URL для getSmsDeliveryStatus 
//The getMessageId method retrieves the messageIdentifer from sendSMS response XML
urlString = resourceURL +"?messageId=" + getMessageId(strResponseAsAString);

//Инициализация GetMethod с указанием целевого URL
org.apache.commons.httpclient.methods.GetMethod getMethod = 
        new org.apache.commons.httpclient.methods.GetMethod(urlString);

//Выполнение getmethod и получение статуса HTTP-ответа 
       statusCode = client.executeMethod(getMethod);
       System.out.println("HTTP status code:"+ statusCode);

       //Считывание тела ответа в строку
       postResponse = getMethod.getResponseBody();
System.out.println("Message Delivery Status:" + new String(postResponse));

Примечание.
Весь Java-код приведен в разделе Загрузки под именем Project Interchange. Убедитесь, что путь построения проекта OneAPIJavaClient содержит ссылку на файл com.ibm.jaxws.thinclient_7.0.0.jar, расположенный в папке RAD75Home\runtimes\base_v7\runtimes.


Сценарий 4. Создание телекоммуникационного приложения с использованием образцов виджетов Dojo

В дополнение к существующим интерфейсам Web-сервисов TWSS 7.1 содержит совместимые со спецификацией GSMA OneAPI v0.9 RESTful-интерфейсы. Кроме того, в IBM WebSphere Telecom Toolkit включены образцы виджетов Dojo в стиле REST. Их можно использовать в Web-приложениях для доступа к функции телекоммуникационной сети. В число этих образцов входят виджеты для следующих целей:

  • определение местоположения терминала;
  • служба коротких сообщений;
  • служба оплаты.

Виджеты построены с помощью инструментария Dojo, доступного в Web Services Feature Pack для Rational Application Developer. Если установлен пакет Web Services Feature, можно использовать библиотеки Dojo, входящие в этот пакет. Если пакет не установлен, загрузите toolkit Dojo. См. ссылку в разделе Ресурсы.

Для сценария 4 используется тот же пример, что и для сценария 2. Эти образцы виджетов позволяют Web-страницам обращаться к основным функциям сети и значительно упрощают разработку телекоммуникационных приложений. Образцы виджетов Dojo OneAPI можно проверить с помощью имитатора телекоммуникационных Web-сервисов, который входит в этот пакет. Ниже описан процесс установки образцов REST.

  1. Установите IBM WebSphere Телеком Toolkit v7.1 поверх Rational Application Developer v7.5 или более поздней версии.
  2. Запустите Rational Application Developer.
  3. Загрузите образцы в рабочее пространство Rational Application Developer с использованием страницы Import links from the Telecom Web Services Feature Samples. Чтобы попасть на эту страницу, выберите Help > Samples > Samples > Technology Samples > Telecom Web Services Feature > Telecom Web Services Samples > One API Widget Sample.
  4. Изучите предварительные инструкции по ссылке Инструкции по установке.
  5. Импортируйте образец.
  6. Импортируйте инструментарий Dojo в папку WebContent проекта OneAPISample.
  7. Чтобы испытать образцы на имитаторе Web-сервисов, добавьте приставку /ParlayX21Web к значению атрибута endPoint тега <div> в каждом HTML-файле образца в папке telcoSampleWidgets: OneAPISample > WebContent > dojo > telcoSampleWidgets. Например, атрибут endPoint Short Message Service должен выглядеть так: /ParlayX21Web/ShortMessageService/services/REST/sms
  8. Разверните и запустите WebSphere Simulator поверх IBM® WebSphere® Application Server 7.0 или более поздней версии.
    Примечание. Эти образцы виджетов OneAPI можно испытать с помощью имитатора телекоммуникационных Web-сервисов, который входит в пакет.
  9. Щелкните правой кнопкой мыши и выберите OneAPISamples > Webcontent > dojo > telcoSampleWidgets > sendSmsDemo.html, затем выберите Run As > Run on server.

Откроется Web-страница с образцом OneAPI sendSmsDemo, как показано на рисунке 1.

Рисунок 1. Пример OneAPI sendSmsDemo
Страница OneAPI с виджетом sendSmsDemo
  1. Проверьте, доставлены ли SMS-сообщения, в окне Activity Web Services Simulator.
Рисунок 2. Сведения о доставке SMS в окне Activity
Показывает дату, время и начало текста

Увеличенный вариант рисунка 2.

Совет
В IBM Education Assistant для WebSphere Telecom Toolkit > Version 7.1 Update содержатся подробные инструкции о том, как настроить образцы виджетов Dojo, включенные в Rational Application Developer. См. ссылку в разделе Ресурсы. Примечание. Предполагается, что предоставляемые образцы виджетов Dojo работают на том же сервере, что и TWSS. В противном случае могут применяться ограничения межсайтового скриптинга.


Заключение

Меняющаяся динамика индустрии связи и Web 2.0 создают много интересных возможностей. Доступность функций телекоммуникационной сети через вездесущий интерфейс HTTP, поддержка JSON и XML, API в стиле REST и интерфейсы Web-сервисов облегчают сторонним разработчикам приложений создание инновационных телекоммуникационных программ и их предоставление клиентам. В свою очередь, столь низкий входной барьер для поставщиков Web-контента означает более качественные услуги.

Сведения о загрузках

Описание: Project Interchange с примером кода

О загрузках

  • Исходный код для Сценария 3 находится в файле TWSS_Usage_Sample_PI.zip.
  • Исходный код для сценария 2 находится в файле groupSMS.zip.
  • Убедитесь, что путь сборки проекта StartNotificationClient содержит ссылку на файл com.ibm.ws.webservices.thinclient_7.0.0.jar, расположенный в папке RAD75Home\runtimes\base_v7\runtimes.
  • Убедитесь, что путь построения проекта OneAPIJavaClient содержит ссылку на файл com.ibm.jaxws.thinclient_7.0.0.jar, расположенный в папке RAD75Home\runtimes\base_v7\runtimes.

Загрузка

ОписаниеИмяРазмер
Исходный код для сценария 3TWSS_Usage_Sample_PI.zip115 КБ
Исходный код для сценария 2groupSMS.zip2 КБ

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

  • Зарегистрируйтесь на форуме Development Tools, чтобы задавать вопросы и участвовать в дискуссиях.(EN)
  • Поделитесь своими знаниями и помогите другим пользователям программного обеспечения Rational, написав статью в DeveloperWorks. Вы получите всемирную известность, распространение через RSS, публикацию своего имени и биографии, а также преимущества профессионального редактирования и издания на сайте Rational developerWorks.(EN)
  • Следите за новостями о программном обеспечении Rational на Facebook и Twitter (@ibmrational) и добавляйте свои комментарии и пожелания.
  • Задавайте вопросы и отвечайте, накапливайте опыт, участвуя в форумах по Rational, кафеи вики.(EN)

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Rational
ArticleID=750265
ArticleTitle=Использование базовых возможностей телекоммуникационной сети для разработки Web-приложений: Часть 2. Использование API в стиле REST
publish-date=08012011