Статьи

Веб-сервисы, использующие Play!


Недопустимо недокументированная функция Play — это простота интеграции веб-служб в ваше приложение.
Этот быстрый блог покажет вам, как легко создать веб-приложение Play для расчета конвертации валют, используя курсы обмена валют между некоторыми популярными валютами. Если вы этого еще не сделали, загрузите последнюю версию Play с веб-сайта http: / /www.playframework.org.

Откройте командную строку в каталоге, в который вы распаковали архив, и введите.

play new currency

Следуйте инструкциям на экране, чтобы настроить новое приложение.
Затем запустите сервер, набрав

play new currency

Теперь откройте файл currency / app / views / Application / index.html .
На этой странице мы хотим иметь два выпадающих списка с общими валютами для выбора и поле значения. Измените код так, чтобы он выглядел следующим образом.

#{extends 'main.html' /}
#{set title:'Home' /}

<h1>Play! Currency Converter</h1>
<form action="@{Application.convert()}" method="POST">
    Currency From:
	<select name="from">
		<option value="USD">USD - US Dollar</option>
		<option value="GBP">GBP - UK Pound Sterling</option>
		<option value="EUR">EUR - Euro</option>
	</select><br />
    Currency To:
	<select name="to">
		<option value="USD">USD - US Dollar</option>
		<option value="GBP">GBP - UK Pound Sterling</option>
		<option value="EUR">EUR - Euro</option>
	</select><br />
	Amount: <input type="text" name="amount" /> <br />

	<input type="submit" name="conv" value="Convert" />
</form>

Этот код довольно простой HTML. Единственная функция Play в коде — это действие формы, которое указывает на действие Play (которое мы создадим далее) с использованием кода @ {Application.convert ()}.

Далее нам нужно открыть app / controllers / Application.java .
Нам нужно добавить действие преобразования для отправки данных формы. Файл должен выглядеть следующим образом.

package controllers;

import play.mvc.*;
import play.libs.*;
import org.w3c.dom.Document;

public class Application extends Controller {

    public static void convert(String from, String to, Float amount) {

        String wsReq = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" +
					  "<soap12:Body><ConversionRate xmlns=\"http://www.webserviceX.NET/\">" +
                      "<FromCurrency>"+from+"</FromCurrency>" +
                      "<ToCurrency>"+to+"</ToCurrency>"+
					  "</ConversionRate></soap12:Body></soap12:Envelope>";

		Document doc = WS.url("http://www.webservicex.net/CurrencyConvertor.asmx").setHeader("content-type", "application/soap+xml").body(wsReq).post().getXml();
		String rate = doc.getElementsByTagName("ConversionRateResult").item(0).getTextContent();

		Float total = amount * Float.parseFloat(rate);
		render(from, to, amount, rate, total);
	}

    public static void index() {
        render();
    }
}

Основной кусок кода, который нас интересует, — это метод convert. Этот метод вызывается при отправке формы (предоставлено кодом @ {Application.convert ()} на странице index.html).
Метод принимает 3 параметра, которые Play автоматически сопоставляет с параметрами HTTP, отправленными формой, поэтому у нас есть значения, присутствующие сразу при создании метода.

Первое, что мы делаем в методе (Play вызывает действия этих методов, так что теперь мы будем делать то же самое), — это создание XML для запроса мыла. XML — это достаточно простой SOAP-запрос, содержащий конверт и тело, а также символы валюты, из которых мы хотим конвертировать.

Далее, это часть веб-сервиса Play. Чтобы использовать веб-сервисы в Play, нам нужно использовать класс play.libs.WS. Давайте подробнее рассмотрим вызов веб-службы.

Document doc = WS.url("http://www.webservicex.net/CurrencyConvertor.asmx").setHeader("content-type", "application/soap+xml").body(wsReq).post().getXml();

Первая часть запроса указывает URL, к которому мы хотим подключиться. Здесь я использую бесплатный образец веб-сервиса для живых валют. Вторая часть добавляет заголовок к запросу. Чтобы запрос работал, в запросе должно быть указано, что его содержимое — soap-xml, поэтому необходимо добавить заголовок. Третья часть устанавливает тело запроса в SOAP xml, который мы создали в начале действия, а последняя часть отправляет SOAP-запрос, используя метод post.
Последняя часть (getXml ()) возвращает ответ в виде объекта Document, готового для анализа.

Остальная часть действия преобразования просто получает результат из возвращенного XML и вычисляет общую сумму, преобразованную из суммы для преобразования, умноженной на обменный курс, возвращенный веб-службой. Все значения (включая значения, представленные формой) затем передаются на страницу HTML, чтобы их можно было отобразить, вызвав метод render.

Наконец, нам нужно вывести результаты конвертации. Итак, давайте создадим новый файл с именем app / views / Application / convert.html и добавим следующий код.

#{extends 'main.html' /}
#{set title:'Converted' /}

<h1>Total ${to} ${total}</h1>
Converted ${amount} ${from} to ${to} at an exchange rate of ${rate}

Теперь мы можем попробовать наше приложение. Перейдите по адресу http: // localhost: 9000, и вы увидите страницу, подобную этой.

Если мы выберем доллары США и фунты стерлингов и установим сумму, а затем нажмем конвертировать, мы должны увидеть результаты, подобные следующим.

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

Как это круто! Приложение для конвертации валюты, использующее реальные курсы валют LIVE, написанное менее чем в 50 строках кода.