Tutorial servicii web: client pentru un serviciu web în PHP

Aşa cum am promis într-un articol anterior, în acest articol vă voi explica cum puteţi crea un client pentru un serviciu web. În tutorialul serviciului, am folosit limbajul Java, însă de această dată voi folosi PHP.

Veţi avea nevoie de următoarele:

  • Apache Web Server, sau un server similar care poate să ruleze script-uri PHP, recomand XAMPP.
  • Un editor PHP, eu folosesc Eclipse PDT.
  • Librăria NuSOAP , descărcaţi de la Sourceforge nusoap-0.9.5.zip .

Desigur, pentru ca clientul să funcţioneze, trebuie să aveţi serverul Tomcat pornit şi serviciul web descris în tutorialul precedent disponibil.

Crearea unui proiect nou în Eclipse PDT este foarte simplă, File -> New -> PHP Project. Alegeţi opţiunea de a crea proiectul din surse deja existente, şi cu browse navigaţi în directorul htdocs al XAMPP-ului, şi creaţi-vă un director pentru proiect, de exemplu ”wsclient”. Desigur dacă folosiţi un alt server acesta se poate avea alte denumiri ca www, wwwroot etc.
Creaţi apoi în directorul proiectului, wsclient, un director pentru librăriile nusoap, cu acelaş nume. Puneţi aici directoarele samples şi lib obţinute din arhiva nusoap-0.9.5:

Mergeţi apoi în Eclipse selectaţi proiectul şi daţi click-dreapta -> Refresh.
Pentru a fi mai uşor înţeleasă aplicaţia PHP va fi compusă din 3 fişiere, şi anume:

  • wsinit.php – aici definim endpoint-ul (URL-ul) serviciului web pe care îl invocăm şi iniţializăm o variabilă client;
  • set.php – trimite un nou număr serviciului web;
  • get.php – cere serviciului web şi afişează ultimul număr trimis.

Pentru a crea fişiere php, selectaţi proiectul şi mergeţi la File-> New -> PHP File. Introduceţi numele şi click Finish. Creaţi cele 3 fişiere şi puneţi în ele codul de la link-urile fiecăruia. În final structura proiectului va arăta aşa:

Acum, pentru a-l testa, asiguraţi-vă mai întâi că aveţi pornit serverul web, XAMPP.  Apoi navigaţi cu browser-ul web la adresa http://localhost/wsclient/set.php . Veţi observa formularul care vă cere să introduceţi un număr. Acesta va fi trimis serviciului web, iar pe a doua pagină, http://localhost/wsclient/get.php acesta va fi afişat.

Construirea unui client se reduce la câteva linii de cod, cu ajutorul unei librării specializate. Şi în Java se pot construi clienţi la fel de uşor cu ajutorul API-urilor AXIOM.

Tutorial: Servicii web cu Tomcat şi Apache Axis 2

În acest tutorial voi descrie cum se poate realiza un serviciu web folosind Apache Axis. Dacă nu ştiţi ce este un serviciu web, câteva definiţii găsiţi pe wikipedia.
De ce aveţi nevoie:

  • Eclipse Java care se poate descărca de pe sit-ul Eclipse.
  • Apache Tomcat, recomand versiunea 6 disponibilă pentru download aici. Luaţi din lista ”Binary Distributions” arhiva care se potriveşte cu sistemul vostru de operare.
  • Apache Axis 2 – motorul pentru servicii web. Versiunea 1.5 se poate  descărca de aici. Din lista de acolo luaţi arhiva de tip WAR.

Trebuie să va informez ca am utilizat un sistem de operare linux în acest tutorial, însă puteţi să îl executaţi şi pe Windows fără nici o ezitare, numai că diferă căile către directoare care se separă prin ”\” în loc de ”/” .  

    Instrucţiunile pentru instalarea Tomcat se găsesc în fişierul RUNNING.txt, din directorul obţinut în urma extragerii arhivei cu distribuţia – şi sunt destul de explicite. Dacă va iese instalarea la vizitarea url-ului http://localhost:8080/ veţi obţine pagina implicită Tomcat cu mesajul ”If you’re seeing this page via a web browser, it means you’ve setup Tomcat successfully. Congratulations!”. Nu uitaţi să modificaţi fişierul tomcat-users.xml din directorul /conf al Tomcat astfel încît să aveţi definit un utilizator cu rol de manager. Al meu arată cam aşa: tomcat-users.xml . Desigur în loc de ”######” puneţi o parolă, uşor de ţinut minte pentru voi. Apoi restartaţi Tomcat şi intraţi la pagina ”Tomcat Manager” din meniul Administration al paginii implicite. Dacă vă puteţi autentifica cu utilizatorul ”administrator” şi parola aleasă funcţionează.

    Urmează instalarea motorului de servicii web – Axis2. Practic impropriu spus instalare, deoarece îl vom încărca pe serverul Tomcat ca o aplicaţie web. Extrageţi arhiva axis2-1.5-war.zip. În urma extragerii veţi obţine câteva fişiere printre care unul numit axis2.war. Acum tot pe pagina Tomcat Manager mai jos veţi găsi un forumular – WAR File to deploy. Alegeţi fişierul axis2.war şi click ”Deploy”. 
    Dacă nu se înregistrează erori vom obţine pagina de bun-venit a Axis2 la url-ul http://localhost:8080/axis2/ , unde ni se oferă şi un serviciu web demonstrativ.

    Urmează să construim efectiv un serviciu web. Voi explica realizarea unui serviciu web foarte simplu cu două metode: una care stochează un număr şi cealaltă care returneză numărul stocat. Pentru asta trebuie să pornim Ecplise, şi din meniul File alegem New->Java Project. La numele proiectului scriem MyFirstWebService şi click Finish.

     
    Apoi dăm click-dreapta pe directorul proiectului ”MyFirstWebService”, din partea stângă şi alegem New->Package . Numele pachetului va fi ”ws”. Click Finish:

    Urmează să creem clasa corespunzătoare serviciului web. Pentru asta dăm click-dreapta pe numele pachetului ”ws” şi din meniu alegem New->Class. Alegem numele clasei să fie Number ca şi în imagine:

     
    Click Finish. Acum ar trebui să avem o structură similară cu cea din imaginea următoare:

    Codul pentru clasa Number se găseşte la link-ul Number.java. Copiaţi codul de acolo. După cum probabil aţi observat aceasta este construită pe modelul claselor POJO. Acum pentru a putea compila proiectul avem nevoie de o clasa cu o metodă statică main. Folosim acceaşi paşi ca la creearea clasei Number: New->Class cu numele Main şi bifăm ”public static void main(String[] args)”.

    Copiem pentru aceasta codul tot la link-ul  Main.java. Apoi compilăm proiectul ca aplicaţie Java: click-dreapta Run As -> 2 Java Application . La consolă va apare mesajul ”Proiectul a fost compilat.”.
    Am compilat clasa pentru serviciul web, acum urmează să construim o arhivă .aar pe care să o putem adauga în containerul Axis2.

    Ne deplasăm cu managerul de fişiere în directorul bin/ al proiectului – unde se găsesc fişierele .class compilate. La mine acestea se află în directorul /home/adrian/Workspace/MyFirstWebService/bin:

    Copiez directorul ws de aici într-un alt director cu numele NumberService într-o locaţie pe disc. Tot în acest director creez un nou director cu numele META-INF. În el creez un fişier xml – services.xml, cu următorul conţinut services.xml. La sfârşit structura de directoare va arăta aşa:

    Selectăm conţinutul directorului NumberService şi îl arhivăm într-o arhivă de tip ZIP. Fişierului rezultat îi schimbăm extensia în .aar (Axis Archive), devenind NumberService.aar.

    Acesta din urmă va fi mutat în directorul $TOMCAT_INSTALL/webapps/axis2/WEB-INF/services/ unde prin ”$TOMCAT_INSTALL” am făcut referire la directorul în care a fost instalat serverul Tomcat.
    Nu ne mai rămâne decât să pornim Tomcat, dacă cumva nu este deja pornit, şi să facem refresh la pagina de listare a serviciilor Axis2 : http://localhost:8080/axis2/services/listServices , unde, dacă totul este în regulă serviciul nostru va fi listat astfel:

    Prin click pe numele serviciului vom obţine fişierul WSDL specific.
    Pentru a testa serviciul, putem apela metodele sale prin parametrii GET astfel:

    Rezultatul:

    Serviciile web sunt foarte utile, mai ales când suntem nevoiţi să prelucrăm date la distanţă pentru a fi utilizate pe terminale cu resurse limitate cum sunt telefoanele mobile – de pe care nu ne putem permite să ne conectăm la o bază de date fie ea Oracle sau MySQL. Funcţionează pe portul 80 iar clienţii pot fi dezvoltaţi în apropape orice limbaj. Într-un articol viitor voi descrie realizarea unui client pentru acest serviciu în PHP.