Webservices PDF Skriv ut Skicka sidan
Skrivet av Calle Mowday   
2009-04-28 13:00

En webservice är ett program som körs på en webserver. Programmet kan vara programmerat i ett av flera olika språk, däribland Java och C#. I programmet har man en klass som är åtkomligt genom http requests.

En http request är samma typ av anrop som används av browsers när man surfar på nätet. Man kan skicka med information i dessa requests, och man får ett svar tillbaka. En användare skickar alltså information till webservicen, som behandlar förfrågan och sedan returnerar (skickar tillbaka) ett svar i form av XML.

På server sidan görs allt om till objekt, så server programmeraren behöver aldrig oroa sig för XML:en som används. Detta görs helt automatiskt. Det är lite som PHP eller ASP för er som är vana vid detta. Man skickar in en förfrågan, den kan t.ex. vara skapad som ett formulär och skickad med POST metoden. PHP/ASP skriptet tar emot den postade förfrågan, hanterar den, och sedan retuneras en färdig sida, helt baserad på förfrågningen som användaren gjorde. Skillnaden är att det som skickas och retuneras är XML.

 

Webservices i Flash nu då?

I AS2 fanns det en färdig webservice klass som kunde användas. Den kom med i MX klasserna och ligger under mx.services. Av någon anledning försvann detta stödet i AS3. Det skapades därför ett flertal klasser för att konsumera och använda webservices i AS3 av tredje parts utvecklare, bl.a. den som jag har gjort och som jag kommer använda genom alla mina exempel. Webservice klassen kommer, precis som på servern, göra om alla objekt till korrekta AS3 objekt, och du som utvecklare behöver aldrig bry dig om XML:en. Allt sköts automatiskt åt dig.

 

Kan man inte bara skicka och ta emot XML:en?

Absolut! Det är inte ett måste att använda sig av en Webservice decoder. Du kan skicka XML till en webservice, och sen ta hand om XML:en som kommer tillbaka. Men, en webservice har en jättestor XML sida som heter WSDL. En WSDL förklarar hur alla anrop ser ut, och hur svaren ser ut. Med hjälp av detta kan man därför skapa färdiga objekt av svaret, och omvandla ett objekt till XML som kommer att förstås på bägge sidor. WSDL:en förklarar alltså hur ett anrop ser ut, och hur svaret ser ut. När du använder en Webservice Decoder (som den jag byggt) använder den sig av den här WSDL:en. När du gör ett anrop mot servern görs dina objekt om till XML som servern kommer förstå. När servern sen skickar tillbaka ett svar (i form av XML) görs detta om på klientsidan (din sida) till riktiga AS3 objekt. Du behöver alltså inte oroa dig för en krånglig XML.


Förklara lite mer hur hela flödet fungerar!

Ok. Först hämtas WSDL:en från servern. När detta är gjort kan sedan flash göra anrop mot servern. Så fort en metod körs från flash till servern görs detta om till XML. Denna XML:en utformas efter hur WSDL:en säger att den ska se ut. När ett svar kommer tillbaka i form av XML görs denna om till ett AS3 objekt, enligt hur WSDL:en säger att den ska se ut.

Ne, nu slänger vi oss in i det här så kommer ni förstå mer.

Mitt första webservice anrop!!!

Nu ni, nu kör vi igång. Skapa ett nytt projekt, ställ in stolen rätt och förbered er på att kasta er in i en helt ny värld av möjligheter. Först av allt, spring över till http://doc.mowday.se och ladda ner den senaste versionen av Webservice paketet. I skrivande stund är detta 1.03. Packa upp den till din root nivå. I mitt fall är detta src mappen. Först behöver vi en klass där vi ska koda allt, skapa en ny klass som heter Main.as och fyll den med denna koden:

package
{
    import flash.display.Sprite;
    import se.mowday.webservice.Webservice;
    import se.mowday.webservice.WebserviceEvent;
   
    public class Main extends Sprite
    {
        //Konstruktorn
        public function Main():void
        {
             
        }
       
       
    }
   
}

 

Som ni ser har jag redan importerat flera klasser till denna klassen, men var lugn jag ska gå igenom allt!!! Hittills borde inget vara krångligt. Vi har skapat ett objekt som heter Main, ärver av klassen sprite och har en konstruktor där vi inte gör något än. Nu skapar vi ett nytt objekt av webservice klassen. Vi säger till den att vi vill anropa ”http://www.webservicex.net/ValidateEmail.asmx”. Det är en webservice som kontrollerar om en e-post adress är giltig eller inte. Den enda metoden som finns där är IsValidEmail. Den vill ha en e-post i form av en sträng som inparameter och skickar tillbaka en boolean (true/false) om det gick bra eller inte. Nu ska vår kod alltså se ut så här:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import se.mowday.webservice.Webservice;
    import se.mowday.webservice.WebserviceEvent;
   
    public class Main extends Sprite
    {
       
        public function Main():void
        {
            //Det är den här som är vår koppling till servern.
            var webservice:Webservice = new Webservice("http://www.webservicex.net/ValidateEmail.asmx");
        }
       
    }
   
}

 

Perfekt! Nu lägger vi på en lyssnar på det objektet som lyssnar på WebserviceEvent.

RESPONSE. RESPONSE eventet skickas ut varje gång vi får ett svar. I metoden som hanterar eventet kollar vi först om det gick bra eller inte.Gick det bra, skriver vi antingen ut ”Du har en giltig mail” i tracen, eller ”Du har inte en giltig mail”, beroende på vad servern säger. Om anropet gick fel tracar vi ut vad som gick fel.

Koden ser nu ut så här:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import se.mowday.webservice.Webservice;
    import se.mowday.webservice.WebserviceEvent;
   
    public class Main extends Sprite
    {
       
        public function Main():void
        {
            //Det är den här som är vår koppling till servern.
            var webservice:Webservice = new Webservice("http://www.webservicex.net/ValidateEmail.asmx");
            webservice.addEventListener(WebserviceEvent.RESPONSE, onResponse);
        }
       
        //Körs när servern har skickat tillbaka ett svar
        private function onResponse(e:WebserviceEvent):void
        {
            //Kontrollerar om anropet gick bra eller inte
            if (e.success)
            {
                //Anropet gick bra, skriv ut i tracen baserat på vad server svarade
                if (e.response)
                {
                    trace("Du har en giltig mail!");
                }
                else
                {
                    trace("Du har inte en giltig mail!");
                }
            }
            else
            {
                //Om det gick fel tracar vi ut FEL och felkoden och beskrivningen av felet
                trace("FEL: " + e.faultCode + " - " + e.faultDescription);
            }
        }
       
    }
   
}

 

Nu har vi allt färdigt! Det enda vi behöver göra nu är själva anropet. Webservice klassen är en såkallad proxy, så du kan tänka dig att du har servern som objekt, och kör alla metoder direkt på den. Skillnaden är att du inte får svaret direkt, utan måste vänta på detta. Nu kör vi metoden IsValidEmail:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import se.mowday.webservice.Webservice;
    import se.mowday.webservice.WebserviceEvent;
   
    public class Main extends Sprite
    {
       
        public function Main():void
        {
            //Det är den här som är vår koppling till servern.
            var webservice:Webservice = new Webservice("http://www.webservicex.net/ValidateEmail.asmx");
            webservice.addEventListener(WebserviceEvent.RESPONSE, onResponse);
           
            //Kör metoden IsValidEmail och skicka in " <script language='JavaScript' type='text/javascript'> <!-- var prefix = 'mailto:'; var suffix = ''; var attribs = ''; var path = 'hr' + 'ef' + '='; var addy31720 = 'calle' + '@'; addy31720 = addy31720 + 'mowday' + '.' + 'se'; document.write( '<a ' + path + '\'' + prefix + addy31720 + suffix + '\'' + attribs + '>' ); document.write( addy31720 ); document.write( '<\/a>' ); //--> </script><script language='JavaScript' type='text/javascript'> <!-- document.write( '' ); //--> </script>Den här e-postadressen är skyddad frÃ¥n spamrobotar. Du mÃ¥ste tillÃ¥ta Javascript för att visa e-postadressen <script language='JavaScript' type='text/javascript'> <!-- document.write( '</' ); document.write( 'span>' ); //--> </script>" som parameter
            webservice.IsValidEmail(" <script language='JavaScript' type='text/javascript'> <!-- var prefix = 'mailto:'; var suffix = ''; var attribs = ''; var path = 'hr' + 'ef' + '='; var addy18972 = 'calle' + '@'; addy18972 = addy18972 + 'mowday' + '.' + 'se'; document.write( '<a ' + path + '\'' + prefix + addy18972 + suffix + '\'' + attribs + '>' ); document.write( addy18972 ); document.write( '<\/a>' ); //--> </script><script language='JavaScript' type='text/javascript'> <!-- document.write( '' ); //--> </script>Den här e-postadressen är skyddad från spamrobotar. Du måste tillåta Javascript för att visa e-postadressen <script language='JavaScript' type='text/javascript'> <!-- document.write( '</' ); document.write( 'span>' ); //--> </script>");
        }
       
        //Körs när servern har skickat tillbaka ett svar
        private function onResponse(e:WebserviceEvent):void
        {
            //Kontrollerar om anropet gick bra eller inte
            if (e.success)
            {
                //Anropet gick bra, skriv ut i tracen baserat på vad server svarade
                if (e.response)
                {
                    trace("Du har en giltig mail!");
                }
                else
                {
                    trace("Du har inte en giltig mail!");
                }
            }
            else
            {
                //Om det gick fel tracar vi ut FEL och felkoden och beskrivningen av felet
                trace("FEL: " + e.faultCode + " - " + e.faultDescription);
            }
        }
       
    }
   
}

 

Så där ja! Nu när du kör filmen får du vänta lite. Servern vi kopplar mot är långsam och först måste WSDL:en hämtas. (Om du vill se hur den ser ut kan du se den här: http://www.webservicex.net/ValidateEmail.asmx?wsdl). När det är gjort kommer det tracas ut om du har en giltig mail eller inte. Det finns självklart ingen anledningen att göra så här när man ska testa en mail, det tar för lång tid. Men man kan t.ex. hämta nyheter med en webservice, bygga ett login system. I stort sett allt där du behöver kommunicera med en server och där det inte behöver gå jättefort. Självklart går det snabbare efter första anropet. Vid första anropet hämtas först WSDL:en. Men detta görs bara en gång. Nästa gång du gör ett anrop vet vi redan hur WSDL:en ser ut, och behöver därför inte hämta den igen, utan kan köra metoderna direkt.

Summan av kardemumman

Det var det hela. Det finns en massa webservicar ute på nätet som är gratis att använda! Om du vill kan jag även visa hur man bygger en egen webservice! Om du vill detta, rösta ”Jag vill ha en fortsättning” längst upp. Har du några frågor, bara kontakta mig så hjälper jag dig mer än gärna!


Bedöm artikeln:
( 1 Bedömning )
Skapad 2009-04-28 13:00 av Calle Mowday

Visad 1402 gånger än så länge.

Senaste artiklarna av Calle Mowday


Lägg till kommentar


Medlemmar


Members Online: 0

Senaste registrerade

LisaRaichand : 22 april 2012 19:55pilu : 31 januari 2012 09:58Gostship99 : 07 januari 2012 19:37Director : 18 november 2011 05:44Dahlback : 17 november 2011 16:28mikwonwheels : 14 november 2011 13:20Kviddis : 04 oktober 2011 19:53buddha1966 : 25 september 2011 14:22idesign : 20 september 2011 08:45TxT : 05 september 2011 11:07ApelG : 05 september 2011 11:04
Partners
Adobe user group
fdt5-logo
TechSmith
Lynda user group
Apress user group
O´reilly user group
Peachpit user group
Friends Of Ed
Manning user group


Senaste blogginläggen

Av: Danel
-20.02.2012
Av: Patric Jonsson
-27.01.2012
Av: Patric Jonsson
- 3.01.2012
Av: Patric Jonsson
-29.11.2011
Av: Danel
-26.11.2011
Av: Patric Jonsson
-14.11.2011
Av: Patric Jonsson
- 8.11.2011
Av: Danel
- 7.11.2011
Av: Patric Jonsson
-27.09.2011

Senaste kommentarer

Senaste trådarna

Av Hallon
- 08/05/2012
Av goldensebbe
- 06/04/2012
Av Hallon
- 29/03/2012
Av buddha1966
- 06/03/2012
Av buddha1966
- 29/02/2012
Av Wide Circle
- 20/02/2012
Av zocstyle
- 15/02/2012
Av ufoalf30
- 05/01/2012
Av peterdavidsson
- 08/12/2011
Av JohnPaulie
- 03/12/2011
Av coffaldo
- 17/11/2011
Av buddha1966
- 05/11/2011
Av buddha1966
- 03/11/2011

Blogkalender

  • 2012 (3)
  • 2011 (37)
  • 2010 (85)
  • 2009 (18)
  • Vem är online

    Vi har 8 besökare online

    Relaterande artiklar

    RocketTheme Joomla Templates