Datan hakeminen muilta sivuilta, SOAP, handlerit ja sivupohja - Demo 9

Käytetään muiden tekemiä XML-dokumentteja ja WWW-sivuja tiedonlähteenä. Kokeillaan luoda oma SOAP-palvelu ja testataan sen käyttöä. Tutustutaan Apachen handlereihin ja toteutetaan niiden avulla oma sivupohja.

RSS-feedin sisällyttäminen omalle sivulle

HTML-dokumentin osan sisällyttäminen omalle sivulle

SOAP

Luodaan SOAP-palvelu, jolla voidaan hakea tietokannasta kuvioita.

SoapServer

  1. Luo Kuvio-tietokanta, ellet ole jo tehnyt sitä viikkotehtävässä 8.
  2. Luodaan WSDL-dokumentti, jolla kuvataan palvelun käyttämät tietotyypit ja funktiot. Tämä onnistuu helpoiten Eclipsellä. Valitse sitten File | New... | Other... | Web Services | WSDL.
  3. Anna nimeksi kuviohaku.wsdl ja kansioksi demo9, namespaceksi http://users.jyu.fi/~OMATUNNUS/sovellukset/demo9/ ja SOAP-viestien malliksi RPC/literal. Hyväksy muutokset ja katso, että Design-välilehti jää päälle.
  4. Luodaan perus-WSDL-määritykset lisäämällä ne kaavioon

    WSDL-kaavio

    • Laita portin address-kohtaan http://users.jyu.fi/~OMATUNNUS/sovellukset/demo9/kuviohaku.php.
    • Valitse input-tietotyypiksi string.
    • Valitse output-tietotyypiksi New.... Valitse Complex type ja anna nimeksi Kuviot. Napauta nuolta.
  5. Luodaan tietotyyppimääritykset:

    WSDL-tietotyyppikaavio

    • Valitse oikealla Kuviot ja kohta Add Element.
    • Napauta elementin tietotyyppiä ja valitse New.... Luo uusi Complex Type -elementti Kuvio.
    • Napauta vielä KuvioLista-elementtiä oikealla ja valitse Set Multiplicity | 0..* Zero or more.
    • Napauta Kuvio-elementtiä oikealla ja valitse Add Attribute.... Lisää string-tyyppiset attribuutit KuvioNimi ja TiedostoNimi.
  6. Luo uusi PHP-tiedosto kuviohaku.php. Kopioi siihen VT8:n mallivastauksesta ykköstason hae_kuvio.php-tiedoston koodit.
  7. Poista koodista header-määritys ja kaikki XML-tulostukset. Siirrä tietokantakysely WSDL:ssäkin määritettyyn funktioon getKuviot($haku). Vaihda request-parametrin tilalle SOAP-kutsusta saatu parametri $haku.
  8. Luo luokat Kuviot ja Kuvio:
    class Kuviot {
      public $KuvioLista = array();
    }
    
    class Kuvio {
      public $KuvioNimi;
      public $TiedostoNimi;
      
      public function __construct($kuvionimi, $tiedostonimi) {
        $this->KuvioNimi = $kuvionimi;
        $this->TiedostoNimi = $tiedostonimi;
      }
    }
  9. Luo getKuviot-funktiossa uusi Kuviot-luokan olio $kuviotResponse ennen SQL:n fetch-metodeja. Luo tulosrivejä silmukassa läpikäydessä aina uusi Kuvio-olio, jonka konstruktoriin viet tietokannasta tulleet datat. Data on lisättävä UTF-8-muodossa SOAP-vasteen vuoksi. Lisää uusi kuvio-olio Kuviot-olion taulukkoon:
    $kuvio = new Kuvio(utf8_encode($row["Kuvionimi"]), $row["Tiedostonimi"]);
    $kuviotResponse->KuvioLista[] = $kuvio;
  10. Palauta funktiosta $kuviotResponse.
  11. Lisää nyt PHP:n runko-osaan uuden SoapServer-olion luonti. Vie konstruktin parametrina luomasi WSDL-dokumentti kuviohaku.wsdl.
  12. Lisää addFunction-metodilla palveluun getKuviot-funktio.
  13. Käsittele handle-metodilla SOAP-pyynnöstä PHP:lle tullut data.

SoapClient

  1. Luo uusi PHP-tiedosto soap.php, jossa tulostetaan normaali XHTML-runko.
  2. Lisää body-osaan PHP-koodilohko, jossa luot uudet SoapClient-olion. Vie konstruktoriin parametrina WSDL-dokumentti kuviohaku.wsdl.
  3. Kysy mitä funktiota ja tyyppejä palvelu tarjoaa. Tämä onnistuu __getFunctions() ja __getTypes()-metodeilla.
  4. Kutsu getKuviot-metodia parametrilla "harmaa". Tulosta var_dump-funktiolla tuloksena tullut olio.
  5. Käy läpi foreach-silmukalla kaikki Kuviot-olion sisällä olevat Kuvio-oliot ja tulosta taulukkoon KuvioNimi ja TiedostoNimi.

    Kuviohaun tulokset taulukossa

Apache handlerit

Apachen handlereilla saadaan helposti otettua käyttöön oma sivupohja tai lisättyä esim. autentikointi kokonaisen sivuston päälle ilman, että tarvitsee tehdä mitään muutoksia yksittäisiin sivuihin.

Sivupohjan käyttöönotto

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/demot/demo9/
© Jukka Mäntylä (jmantyla@mit.jyu.fi) <http://www.iki.fi/jmantyla/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
2007-04-27 09:32:31