/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Webservice
Fra : René Iversen


Dato : 12-01-09 11:13

Hej,

jeg er ikke ny indenfor PHP programmering, men er rimelig blank, når det
kommer til at bygge en webservice, begreber indenfor emnet etc.

Jeg har et internt system kodet i PHP. Nogle data skal overføres via en
webservice til en ekstern part. Jeg har kigget på NuSOAP og kan også
returnere forskellige data fra min database... fx en adresse som en
tekststreng. Nu er jeg så blevet bedt om at overføre objekter. Det er i sig
selv ikke noget problem, da mit system er bygget op omkring objekter, men
hvordan overfører jeg et objekt via en webservice?

En kodestump vil gøre underværker, men måske også en forklaring af hvordan
det lader sig gøre. Det jeg sidder og tænker på er, at jeg har et objekt i
PHP med x antal funktioner etc. Hvordan "forstår" en webservice klient kodet
i et helt andet sprog dette objekt og kan arbejde med det?

Mvh. René


 
 
Kasper Johansen (12-01-2009)
Kommentar
Fra : Kasper Johansen


Dato : 12-01-09 11:32

René Iversen wrote:
> Nu er jeg så blevet bedt om at overføre objekter. Det er i
> sig selv ikke noget problem, da mit system er bygget op omkring
> objekter, men hvordan overfører jeg et objekt via en webservice?
>
> En kodestump vil gøre underværker, men måske også en forklaring af
> hvordan det lader sig gøre. Det jeg sidder og tænker på er, at jeg har
> et objekt i PHP med x antal funktioner etc. Hvordan "forstår" en
> webservice klient kodet i et helt andet sprog dette objekt og kan
> arbejde med det?

Du kan overføre et PHP-objekt ved hjælp af serialize() og unserialize().
Der står en masse om emnet på PHP's hjemmeside:

http://dk.php.net/manual/en/language.oop.serialization.php


Objekterne vil dog (såvidt jeg ved) ikke fungere i andre sprog end PHP.
Vær også opmærksom på "__wakeup()"-funktionen.


--
Med venlig hilsen
Kasper Johansen

René Iversen (12-01-2009)
Kommentar
Fra : René Iversen


Dato : 12-01-09 11:57

>
> Du kan overføre et PHP-objekt ved hjælp af serialize() og unserialize().
> Der står en masse om emnet på PHP's hjemmeside:
>
> http://dk.php.net/manual/en/language.oop.serialization.php
>
>
> Objekterne vil dog (såvidt jeg ved) ikke fungere i andre sprog end PHP.
> Vær også opmærksom på "__wakeup()"-funktionen.
>

Og i det tilfælde skal en PHP bygget klient vel have klassen liggende for at
kunne instantiere den.


Kasper Johansen (12-01-2009)
Kommentar
Fra : Kasper Johansen


Dato : 12-01-09 13:54

René Iversen wrote:
>> Du kan overføre et PHP-objekt ved hjælp af serialize() og
>> unserialize(). Der står en masse om emnet på PHP's hjemmeside:
>>
>> http://dk.php.net/manual/en/language.oop.serialization.php
>>
>> Objekterne vil dog (såvidt jeg ved) ikke fungere i andre sprog end
>> PHP. Vær også opmærksom på "__wakeup()"-funktionen.
>>
> Og i det tilfælde skal en PHP bygget klient vel have klassen liggende
> for at kunne instantiere den.

Nej - ikke helt. Objektet kan faktisk oprettes, uden at klassen er
indlæst. Objektet vil så bare kun indeholde de data, som dit objekt
indeholder - ingen funktioner. Og det vil vidst også give en E_NOTICE
eller E_STRICT tror jeg nok.


I dokumentationen står der:

"It is strongly recommended that you include the class definitions of
all such registered objects on all of your pages, even if you do not
actually use these classes on all of your pages. If you don't and an
object is being unserialized without its class definition being present,
it will lose its class association and become an object of class
__PHP_Incomplete_Class_Name without any functions available at all, that
is, it will become quite useless."


--
Med venlig hilsen
Kasper Johansen

Carsten (12-01-2009)
Kommentar
Fra : Carsten


Dato : 12-01-09 12:23

"René Iversen" <riversen@sletriversen.dk> skrev i en meddelelse
news:496b17b7$0$15884$edfadb0f@dtext01.news.tele.dk...
> Nu er jeg så blevet bedt om at overføre objekter. Det er i sig selv ikke
> noget problem, da mit system er bygget op omkring objekter, men hvordan
> overfører jeg et objekt via en webservice?

Det er næppe PHP objekter de ønsker på klientsiden. Det er nok nærmere dine
datamodel-objekter de har brug for. F.eks. hvis du har en "laesKunde"
funktion så skal output være dit kunde-objekt. I webservice sammenhæng taler
man jo ofte sammen via xml (fordi det er universielt). xml ouput fra et
givent webservice kald er derfor ofte udtrykt i et xml schema (xsd).

Carsten



René Iversen (12-01-2009)
Kommentar
Fra : René Iversen


Dato : 12-01-09 13:18

"Carsten" <carsten@noexists.dk> wrote in message
news:496b2817$0$15879$edfadb0f@dtext01.news.tele.dk...
>
> Det er næppe PHP objekter de ønsker på klientsiden. Det er nok nærmere
> dine datamodel-objekter de har brug for. F.eks. hvis du har en "laesKunde"
> funktion så skal output være dit kunde-objekt. I webservice sammenhæng
> taler man jo ofte sammen via xml (fordi det er universielt). xml ouput fra
> et givent webservice kald er derfor ofte udtrykt i et xml schema (xsd).
>

Hej Carsten,

jeg er helt blank... hvordan output'er jeg mit objekt i xml'en, så man har
noget ud af det i den anden ende uanset ens tilgangsvinkel? Har du mulighed
evt. at lave et simpelt eksempel?

Mvh. René


Stig Johansen (12-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 12-01-09 16:32

Carsten wrote:

> xml ouput fra
> et givent webservice kald er derfor ofte udtrykt i et xml schema (xsd).

Som begge plejer at være udtrykt i et WSDL.

Til OP:
Hvis det er en færdigbygget client, så få fat i det WSDL der har ligget til
grund for bygningen.
Hvis det er en ny service, så byg den, og eksponér WSDL'en til bygning af en
client.

--
Med venlig hilsen
Stig Johansen

Carsten (12-01-2009)
Kommentar
Fra : Carsten


Dato : 12-01-09 17:30

"René Iversen" <riversen@sletriversen.dk> skrev i en meddelelse
news:496b17b7$0$15884$edfadb0f@dtext01.news.tele.dk...
> jeg er ikke ny indenfor PHP programmering, men er rimelig blank, når det
> kommer til at bygge en webservice, begreber indenfor emnet etc.

webservices er et meget stort kapitel at tage hul på, og PHP er vist ikke
lige det sprog som bedst understøtter webservices (men eftersom jeg primært
er java udvikler så kan jeg tage fejl). Jeg kommer her med nogle begreber in
short:

En webservice (operation) er en stump kode som (typisk) tager et xml
dokument som input og som (ligeså typisk) leverer et xml dokument som
output. Operationen såvel som input og output er beskrevet overfor klienten
(ham der skal kalde din webservice-operation) via en WSDL (web service
definition language). Inde i wsdl'en er input og output defineret via xml
schema (xsd). Wsdl'en fortæller ligeledes hvor webservicen kører og hvilke
operationer der tilbydes. F.eks. kan en Customer webservice tilbyde
operationerne getCustomerByCVR og getCustomerById. I så fald vil wsdl'en
vise at der er to operationer hvoraf de to af operationerne leverer samme
output (f.eks. CustomerData) men tager et lidt forskelligt input (cvr.nr.
eller id).

Input og output er typisk en "forhandling" mellem ham der skriver
webservicen og ham der skal bruge den. Hvis der ikke er een specifik bruger
af en given webservice så er det udgiveren som bestemmer (klart nok). Du
skal altså nok have fat i dem som har sagt til dig at du skal "levere dine
objekter". Hvad mener han når han siger det ? har han måske allerede noget
kode som kan finde ud af at lave et webservice kald og mangler han derfor
din wsdl (og xsd'erne indlejret heri) ?

....korte af det lange så skriver man ikke "bare" en webservice. Det kommer
helt an på "domænet".

Carsten



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste