Flex 4: Webové služby

Adobe Flex

Používání webových služeb, postavených na protokolu SOAP, patří ve Flexu 4 k základním možnostem volání vzdálených služeb. Navíc není pro základní operace potřeba učit se SOAP do hloubky – Flash Builder 4 dokáže prozkoumat službu, vrátit dostupné metody i návratové typy a předpřipravit potřebný kód.

Seriál: Stručný průvodce po frameworku Flex 4 (6 dílů)

  1. Flex 4: začínáme 25.1.2010
  2. Flex 4: States a Transitions 1.2.2010
  3. Flex 4: Drag-and-drop 8.2.2010
  4. Flex 4 – formuláře a validace 1.3.2010
  5. Flex 4: skinování aplikací 9.3.2010
  6. Flex 4: Webové služby 12.4.2010

V rámci Flexu se s webovými službami pracuje pomocí tříd mx.rpc.soap.mxml.WebService, Operation a AbstractOperation. Naštěstí se nemusíme učit do hloubky SOAP ani psát vlastní handlery, ale máme možnost si veškerý kód k ovládání webové služby nechat vygenerovat Flash Builderem 4 z WSDL, podobně jako např. ve Visual Studiu. Ušetříme tím nejenom čas při psaní, ale předejdeme i případným chybám, které snadno vzniknou při ručním psaní kódu.

Ukázka 1: Převod měny

V následujícím příkladě si ukážeme připojení na veřejnou webovou službu CurrencyConvertor, která vrací metodou ConversionRate aktuální převodní kurz dvou měn. Adresa WSDL pro tuto službu je http://www.web­servicex.net/Cu­rrencyConvertor­.asmx?wsdl

Začneme, jako vždy, tím, že si vytvoříme nový Flex projekt ve Flash Builderu 4. V menu si zvolíme Data -> Connect to Data/Service. Zobrazí se nám tabulka služeb, z níž si vybereme Web Service.

Flex 4 webservices

Na další stránce zadáme do pole pro WSDL adresu služby WSDL souboru, viz výše http://www.webservicex.net/CurrencyConvertor.asmx?wsdl. Vidíme, že jméno třídy a balíčku se nám samo doplní. Po kliknutí na Next prozkoumá Flash Builder možnosti služby a nabídne, které chceme použít.

Flex 4 webservices

Jako Port zvolíme CurrencyConvertorSoap. Vypíše se nám seznam dostupných metod této webové služby, což je v tomto případě pouze metoda ConversionRate. Po kliknutí na Finish se vygeneruje patřičný kód – třídy CurrencyConvertor.as_Super_CurrencyConvertor.as.

Flex 4 webservices

V případě, že by se služba změnila, je možné provést Refresh, a kód se automaticky přegeneruje. V panelu Data/Services vidíme seznam metod.

Flex 4 webservices

Vytvoříme si jednoduché uživatelské rozhraní a pomocí drag-and-drop přeneseme metodu ConversionRate z panelu Data/Services na tlačítko  Převést.

Flex 4 webservices

Kód doplníme o CZK a EUR:

protected function button_clickHandler(event:MouseEvent):void
{
    ConversionRateResult.token = currencyConvertor.ConversionRate("CZK","EUR");
}

Přidáme ovladač pro výsledek:

<s:CallResponder id="ConversionRateResult" result="ConversionRateResult_resultHandler(event)"/>

Zbývá jen ošetřit zobrazení výsledků konverze:

protected function ConversionRateResult_resultHandler(event:ResultEvent):void
{
    txtTo.text = String(Number(txtFrom.text)*Number(event.result));
}

Celý kód bude vypadat zhruba takto:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:currencyconvertor="services.currencyconvertor.*">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;

            protected function button_clickHandler(event:MouseEvent):void
            {
                ConversionRateResult.token = currencyConvertor.ConversionRate("CZK","EUR");
            }


            protected function ConversionRateResult_resultHandler(event:ResultEvent):void
            {
                txtTo.text = String(Number(txtFrom.text)*Number(event.result));
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <s:CallResponder id="ConversionRateResult" result="ConversionRateResult_resultHandler(event)"/>
        <currencyconvertor:CurrencyConvertor id="currencyConvertor" fault="Alert.show(event.fault.faultString + 'n' + event.fault.faultDetail)" showBusyCursor="true"/>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:TextInput x="54" y="10" id="txtFrom"/>
    <s:TextInput x="54" y="40" id="txtTo"/>
    <s:Button x="53" y="70" label="Převést" id="button" click="button_clickHandler(event)"/>
    <s:Label x="13" y="16" text="CZK"/>
    <s:Label x="13" y="46" text="EUR"/>
</s:WindowedApplication>

Test Operation: testování metod služby

Pokud si chcete interaktivně otestovat návratové hodnoty webové služby, můžete použít panel Test Operation. Vyberete metodu, zadáte parametry a dáte Test. Vrátí se vám výsledek.

Flex 4 webservices

Chcete diskutovat o Flexu s dalšími čtenáři? Chcete probrat něco, co není tématem tohoto článku? Využijte diskusi o Flexu v diskusním fóru Zdrojáku.

Ukázka 2: Texty písní

Ukážeme si ještě jeden rychlý příklad aplikace, založené na SOAP. Využijeme tentokrát službu ChartLyrics, která nabízí texty k písním. K této službě si napíšeme jednoduchou klientskou aplikaci.

Flex 4 webservices

Adresa WSDL souboru této služby je: http://api.char­tlyrics.com/a­piv1.asmx?WSDL

Stejným postupem jako u předchozího příkladu si načteme službu, a dáme jí jméno ChartLyrics. Flash Builder nám vygeneruje pro tuto službu několik metod:

Flex 4 webservices

Při vytváření kódu postupujeme podobným přímočarým způsobem jako u předchozího příkladu – vytvoříme si jednoduchý formulář, přeneseme metodu na akční tlačítko a ošetříme předání parametrů a zobrazení výsledků.

Kompletní projekt je ke stažení zde: Webservices demo: Lyrics.fxp. Výsledná aplikace (.air): Nainstalovat Lyrics (máte-li nainstalovaný AIR, lze kliknutím na tento odkaz aplikaci nainstalovat)

Nasazení aplikace

Při nasazení aplikace na server je potřeba mít na paměti, že server s WebService musí akceptovat požadavky z vaší domény. To lze vyřešit pomocí umístění tzv. crossdomain.xml souboru na server s WebService. Pokud byste tedy nahráli první příklad na svůj server, nebude fungovat, protože webová služba nebude akceptovat vaši doménu. Je potřeba to mít na paměti. Velké množství veřejně dostupných webových služeb má v tomto souboru „wildcard“ pro příjem požadavků z jakékoli domény. V případě AIRové aplikace, která běží jako desktopová, tento problém mít nebudete.

Závěr

Flash Builder 4 usnadňuje psaní aplikací, které využívají SOAP API, podobným způsobem, jakým to dělá např. Visual Studio či jiné nástroje, známé z vývoje pro desktop.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 7

Přehled komentářů

langpa Jako priklad ano, jako reseni NE!
pas2007 Re: Jako priklad ano, jako reseni NE!
-tom- Pěkný
-tom- Re: Pěkný
-tom- OT Dotaz
Tom Krcha Re: OT Dotaz
-tom- Re: OT Dotaz
Zdroj: http://www.zdrojak.cz/?p=3210