Web service (XML-RPC)

Tags:    php
Skrevet af Bruger #4304 @ 25.01.2005

Indledning


Web services er kort fortalt, en måde at afvikle funktioner som andre har skrevet over nettet. XML-RPC[1] er en gammel måde at gøre dette på, den stammer helt tilbage fra 1998 hvor Userland Software[2] udviklede teknologien. Men web services er først blevet "rigtig " populære efter .NET kom på markedes, som gør stor brug af SOAP (ret mig hvis jeg tager fejl, men skulle mene de bruger SOAP).
Nu er os PHP programmøre midlertidigt så heldige, at der er nogen flinke folk som har lavet som har lavet en extension[3] til PHP. Denne extension er bygget over en API[4] til C. Udover denne extension, er der også lavet en lille klasse[5] til at hjælpe, når man laver XML-RPC server og klienter med PHP. Denne artikel, vil dog undlade at bruge denne klasse, og lave sin egen lille funktion som kan kalde og gøre ved.

Kort fortalt så virker XMl-RPC på den måde, at klienten kalder en server via port 80 (hvilket gør at det størstedelen af tiden går forbi diverse firewalls). Det klienten sender er et XML dokument, med information om hvilken funktioner der skal kaldes, med hvilken argumenter. Når serveren får denne XML, kalder den så denne funktion (suprise suprise), og sender så en XML streng tilbage til klienten. Denne indeholder så det funktionen har returneret (samt en hvilken type det er, så klienten ved om det er en streng, array, integer, etc.).
-- Bemærk: At du skal installere XML-RPC først, læs hvordan i PHP manualen[6]. Hvis du efter at havde kigget i PHP manualen stadig ikke kan hitte ud af, at få XML-RPC installeret... Ja så er du på den, da dette er krævet før nedenstående vil virke
ps. det kan være en god ide, at kopiere koden hen i din favorit php editor, da der kommer syntax farve på(formentlig), og det gør det nemmere at skelne kommentar fra kode.


Server delen


Tja vi starter med serveren, da vores klient af gode grunde ikke virker uden en server. Men det nemmeste ville væl være at komme med et fint lille eksempel(som jeg har kommenteret til min bedste kunnen).

xmlrpc_server.php
Fold kodeboks ind/udKode 

Puha, ja det var så serverdelen, nu kommer vi til klientdelen:


Klienten


Hvis du ikke har arbejdet med sockets[7] før, skal du holde tungen lige i munden. Men bliv nu ikke bange, det er ikke en artikkel om netværks programmering, og jeg vil derfor ikke gå nærmere ind i det (eller HTTP kaldet som også kommer nedenfor). Nu hvor jeg er færdig med at skræmme livet af jer alle sammen, med farlig farlig netværks programming, tror jeg bare vi smutter direkte videre til koden.

xmlrpc_client.php
Fold kodeboks ind/udKode 

Det var jo ualmindelig simpelt. Læg mærke til, at jeg sender NULL med som parameter, dette er nødvendigt, da 2. parameter i xmlrpc_encode_request ikek er frivilig. Det ville være muligt at sende alt muligt andet, men man risikere at funktionen man kalder fortolker det forkert, hvis der f.eks. er en sætning der ser således ud i server funktionen:
Fold kodeboks ind/udKode 

Hvis man i ovenstående tilfælde havde brugt '' i stedet for NULL, ville koden blive kørt.

Lad os prøve at flere parametre med. Dette gøres ved at sende dem som et array:
Fold kodeboks ind/udKode 

De 3 parametre skulle gerne være blevet til store bogstaver allesammen.


Konklusion


Blandt de 3-4 kendte måder at lave en webservice på, må man jo sige at XML-RPC er helt fin. Det har været på banen snart nogen år, og er derfor godt gennemtestet. Men som med alt andet, er det jo en smagssag, hvad man bedst kan lide at arbejde med, min personlige favorit er XML-RPC (derfor artiklen blev om denne metode).
Prøv evt. nogen af de gratis webservices du kan finde her:
http://xmlrpc.scripting.com/directory/1568/services
For at leje lidt rundt med XML-RPC.


Kilder


[1] XML-RPC Info: http://www.xmlrpc.com/
[2] Userland: http://www.userland.com
[3] PHP Manual: http://www.php.net/manual/en/ref.xmlrpc.php
[4] XML-RPC API til C: http://xmlrpc-epi.sourceforge.net/
[5] Hjælpe klasse: http://xmlrpc.usefulinc.com/php.html
[6] PHP Install: http://dk.php.net/install
[7] fsockopen: http://dk.php.net/manual/en/function.fsockopen.php

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (6)

User
Bruger #4304 @ 26.01.05 12:49
Jeg har også skrevet denne artikkel på engelsk:
http://birk-jensen.dk/psc/xmlrpc.htm
Den engelske version indeholder lidt(meget lidt) teori omkring XML-RPC, samt lidt ekstra af diverse.
User
Bruger #6389 @ 27.01.05 17:00
Jeg synes det er en udemærket artikel, har bare ingen ide om hvad jeg kan bruge det til. Synes der mangler et kort beskrevet praktisk eksempel, ligesom når man lærer noget i matematik, så får man lige et teknisk eksempel på hvor man kan bruge det. Det ville have været et stort plus. 3 herfra.
User
Bruger #4304 @ 04.02.05 15:32
hmm, et praktisk eksempel... Amazon har f.eks. en web service (ikke XML-RPC, men SOAP mener jeg), som man kan kalde, og få information omkring en bog. Her kan man så få alt den information der står på deres hjemmeside. Det er her en hel del nemmere at skaffe sig denne information via en webservice end at "skrappe" siden for info via normal HTTP forbindelse.
User
Bruger #4570 @ 28.05.05 23:04
Jeg må indrømme at jeg ikke helt forstod formålet. Derudover kunne jeg godt bruge din definition på en web service... tak ;)
User
Bruger #6953 @ 26.06.05 01:59
når i skriver vejledninger så undlad de overflødige ting som fx "stammer helt tilbage fra 1998" det glæmmr de fleste aligevæl, og jeg har det næsten aldtid sådan når jeg ser den slaks (kom nu til sagen) det tager i de værste tilfælde dobelt så lang tid at læse sig igenem en bog eller vejledning på netet.
User
Bruger #14381 @ 12.06.09 18:05
Jeg stod faktisk og ledte efter en PHP net service, sjovt nok, da jeg gik ind under PHP herinde uden at forvente at finde noget og voila... Her kom du med en artikkel om emnet...

Takker!

Og til jer andre, så hvad angår webservices HAR jeg prøvet at strippe HTML / CSS / RSS med .NET og det er ikke særligt sjovt... Så hellere udnytte PHP's styrke og smide det sammen med noget letforståeligt .NET client system
Du skal være logget ind for at skrive en kommentar.
t