Title: Web Services mit PHP
1Web Services mit PHP
- Konrad Wulf
- wulf_at_hlrs.de
- Softwaretechnology Group
- http//www.hlrs.de/organization/st
- High Performance Computing Centre Stuttgart (HLRS)
Diese Folien liegen unter http//programming.jaco
mac.de/Web_service_kurs_php.ppt
2Zitat
- Wenn Du ein Schiff bauen willst, so trommle
nicht Menschen zusammen, um Holz zu beschaffen,
Werkzeuge vorzubereiten, Aufgaben zu vergeben und
die Arbeit einzuteilen, sondern lehre die
Menschen die Sehnsucht nach dem weiten endlosen
Meer. - - Antoine de Saint-Exupéry
3Web Services Was ist das? Warum? Und Wozu?
- Definition
- XML basierte Kommunikation
- Remote procedure calls gt verteilte Anwendungen
- Attraktivität
- Standardisierte Schnittstellen
- Interoperabel jede Anwendung auf x-beliebigem
Betriebssystem und programmiert in egal welcher
Sprache, irgendwo auf der Welt, kann mit jeder
anderen kommunizieren. - Simple Idee, starke Auswirkungen
4Vielseitigkeit PHP
- Ein PHP/NuSOAP Client, der von einem Java Web
Service das Wissen bekommt ...
5Vielseitigkeit J2ME
- Ein J2ME kSOAP Client fürs Handy, entwickelt mit
dem Wireless Toolkit (WTK) von Sun, greift auf
den gleichen Service zu.
6Vielseitigkeit java.swing
7Gliederung
- Einführung XML, DTD und Schemata
- Webservice Grundkonzepte SOAP, WSDL, UDDI
- Einfachen Client erstellen mit PHP/NuSOAP
- Einfachen Server erstellen aus einem Interface /
einer WSDL - Kenntnisse vertiefen complex types, access
control, service orchestration
8Extensible Markup Language (XML) 1.0
- XML dient der Formatierung von Daten
- XML Markups bestehen immer aus einer öffnenden
und einer schließenden Marke (ltmarkegtlt/markegt). - Dieser Marken dürfen verschachtelt werden, nicht
jedoch über Kreuz gt formelle Richtigkeit d.
Dokumentes - Das Format von XML Dokumenten wird i.d.R. durch
DTDs (Document Type Definition) oder XML
Schemata festgelegt. Anhand dieser Regeln kann
die Validität des Dokumentes geprüft werden. - Spezifikation http//www.w3.org/TR/REC-xml
9An XML file with a DTD
lt?xml version"1.0"?gt lt!DOCTYPE note
lt!ELEMENT note (to,from,heading,body)gt
lt!ELEMENT to (PCDATA)gt lt!ELEMENT from
(PCDATA)gt lt!ELEMENT heading (PCDATA)gt
lt!ELEMENT body (PCDATA)gt gt ltnotegt
lttogtTovelt/togt ltfromgtJanilt/fromgt
ltheadinggtReminderlt/headinggt ltbodygtDon't forget
me this weekendlt/bodygt lt/notegt
Document Type Definition (DTD)
XML Data
10XML Schema
- a basic type system
- XML schemas define a wide range of basic types
like integer, float or byte, but also non-numeric
types like date or time. - complex types
- Certainly the most important feature is the
possibility to define own data types, like
tailor-made objects, making it possible to follow
the object oriented paradigm. - define extensible logical rules
- XML schemas allow to define logical rules like
the minimal and maximal occurrence of an element,
grouping several elements together or to combine
XML documents and schemata dynamically. - Specification at http//www.w3.org/TR/xmlschema-0/
11An XML Schema Example
lt?xml version"1.0"?gtltxsschema
xmlnsxs"http//www.w3.org/2001/XMLSchema"target
Namespace"http//www.w3schools.com"xmlns"http/
/www.w3schools.com"elementFormDefault"qualified"
gt ltxselement name"note"gt
ltxscomplexTypegt ltxssequencegt
ltxselement name"to" type"xsstring"/gt
ltxselement name"from" type"xsstring"/gt
ltxselement name"heading" type"xsstring"/gt
ltxselement name"body" type"xsstring"/gt
lt/xssequencegt lt/xscomplexTypegt
lt/xselementgtlt/xsschemagt
12XML Schemas are the Successors of DTDs
- XML Schemas are being more and more used in Web
applications as a replacement for DTDs. Here are
some reasons XML Schemas ... - ... are extensible to future additions
- ... are richer and more useful than DTDs
- ... are written in XML
- ... support data types
- ... support namespaces
13Gliederung
- Einführung XML, DTD und Schemata
- Webservice Grundkonzepte SOAP, WSDL, UDDI
- Einfachen Client erstellen mit PHP/NuSOAP
- Einfachen Server erstellen aus einem Interface /
einer WSDL - Kenntnisse vertiefen complex types, access
control, service orchestration
14Graph SOAP, WSDL, UDDI
15Simple Object Access Protocol (SOAP) 1.1
- SOAP is a lightweight protocol for exchange of
information in a decentralized, distributed
environment. It is an XML based protocol that
consists of three parts an envelope that defines
a framework for describing what is in a message
and how to process it, a set of encoding rules
for expressing instances of application-defined
datatypes, and a convention for representing
remote procedure calls and responses. SOAP can
potentially be used in combination with a variety
of other protocols however, the only bindings
defined in the specification describe how to use
SOAP in combination with HTTP and HTTP Extension
Framework. - Specification at http//www.w3.org/TR/SOAP/
16Structure of a SOAP Message
17An Example of a SOAP Request
POST /StockQuote HTTP/1.1Host
www.stockquoteserver.comContent-Type text/xml
charset"utf-8"Content-Length nnnnSOAPAction
"Some-URI"ltSOAP-ENVEnvelopexmlnsSOAP-ENV"htt
p//schemas.xmlsoap.org/soap/envelope/"SOAP-ENVe
ncodingStyle"http//schemas.xmlsoap.org/soap/enco
ding/"gt ltSOAP-ENVBodygt ltmGetLastTradePrice
xmlnsm"Some-URI"gt ltsymbolgtDISlt/symbolgt
lt/mGetLastTradePricegt lt/SOAP-ENVBodygtlt/S
OAP-ENVEnvelopegt
18Corresponding SOAP Response
HTTP/1.1 200 OKContent-Type text/xml
charset"utf-8"Content-Length
nnnnltSOAP-ENVEnvelope xmlnsSOAP-ENV
"http//schemas.xmlsoap.org/soap/envelope/"SOAP-E
NVencodingStyle "http//schemas.xmlsoap.org/soap
/encoding/"/gt ltSOAP-ENVBodygt ltmGetLastTrad
ePriceResponse xmlnsm"Some-URI"gt ltPrice
gt34.5lt/Pricegt lt/mGetLastTradePriceResponsegt
lt/SOAP-ENVBodygtlt/SOAP-ENVEnvelopegt
19Corresponding SOAP Fault
- HTTP/1.1 200 OKContent-Type text/xml
charset"utf-8"Content-Length
nnnnltSOAP-ENVEnvelope xmlnsSOAP-ENV
"http//schemas.xmlsoap.org/soap/envelope/"SOAP-E
NVencodingStyle "http//schemas.xmlsoap.org/soap
/encoding/"/gt ltSOAP-ENVBodygt
ltSOAP-ENVFaultgt ltfaultcodegtClientlt/faultcod
egt ltfaultactorgtlt/faultactorgt
ltfaultstringgtYou provided a Company Code that is
not listed.lt/faultstringgt
ltfaultdetailgtlt/faultdetailgt
lt/SOAP-ENVFaultgt lt/SOAP-ENVBodygtlt/SOAP-ENVEn
velopegt
20Web Services Description Language (WSDL) 1.1
- WSDL is an XML format for describing network
services as a set of endpoints operating on
messages containing either document-oriented or
procedure-oriented information. The operations
and messages are described abstractly, and then
bound to a concrete network protocol and message
format to define an endpoint. Related concrete
endpoints are combined into abstract endpoints
(services). WSDL is extensible to allow
description of endpoints and their messages
regardless of what message formats or network
protocols are used to communicate, however, the
only bindings described in the specification
describe how to use WSDL in conjunction with SOAP
1.1, HTTP GET/POST, and MIME. - Specification at http//www.w3.org/TR/wsdl
21Structure of a WSDL Description
22WSDL Description Example 1
lt?xml version"1.0" encoding"UTF-8"
?gtltdefinitions name"HelloWorldService"
targetNamespace"http//hello.org/wsdl"
xmlnstns"http//hello.org/wsdl"
xmlns"http//schemas.xmlsoap.org/wsdl/"
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
xmlnssoap"http//schemas.xmlsoap.org/wsdl/soap/"
gt lttypes /gt ltmessage name"sayHello"gt
ltpart name"String_1" type"xsdstring" /gt
lt/messagegt ltmessage name"sayHelloResponse"gt
ltpart name"result" type"xsdstring" /gt
lt/messagegt ltportType name"HelloIFPort"gt
ltoperation name"sayHello"gt
ltinput message"tnssayHello" /gt
ltoutput message"tnssayHelloResponse" /gt
lt/operationgt lt/portTypegt ...
23WSDL Description Example 2
... ltbinding name"HelloIFBinding"
type"tnsHelloIFPort"gt ltoperation
name"sayHello"gt ltinputgt
ltsoapbody encodingStyle"http//schemas.xmlsoa
p.org/soap/encoding/" use"encoded"
namespace"http//hello.org/wsdl" /gt
lt/inputgt ltoutputgt
ltsoapbody encodingStyle"http//schemas.xmlsoap.o
rg/soap/encoding/" use"encoded"
namespace"http//hello.org/wsdl" /gt
lt/outputgt ltsoapoperation
soapAction"" /gt lt/operationgt
ltsoapbinding transport"http//schemas.xmlsoap.or
g/soap/http" style"rpc" /gt lt/bindinggt
ltservice name"HelloWorld"gt ltport
name"HelloIFPort" binding"tnsHelloIFBinding"gt
ltsoapaddress location"http//java.rus
.uni-stuttgart.de/jaxrpc-hello/jaxrpc/HelloIF"
/gt lt/portgt lt/servicegtlt/definitionsgt
24What is UDDI?
- UDDI is a platform-independent framework for
describing services, discovering businesses, and
integrating business services by using the
Internet. - UDDI stands for Universal Description, Discovery
and Integration - UDDI is a directory for storing information about
web services - UDDI is a directory of web service interfaces
described by WSDL - UDDI communicates via SOAP
- UDDI is built into the Microsoft .NET platform
- Example http//uddi.microsoft.com/
http//www.xmethods.net
25Gliederung
- Einführung XML, DTD und Schemata
- Webservice Grundkonzepte SOAP, WSDL, UDDI
- Einfachen Client erstellen mit PHP/NuSOAP
- Einfachen Server erstellen aus einem Interface /
einer WSDL - Kenntnisse vertiefen complex types, access
control, service orchestration
26PHP Webservices mit NuSOAP
- Quelle
- http//dietrich.ganx4.com/nusoap/index.php
- Tutorials NuSOAP
- Einfach http//www.zend.com/zend/tut/tutorial-cam
pbell.php - Weiterführend
- http//programming.jacomac.de/NuSOAP_wrox_SampleC
hapter_1861007469.pdf - Wichtig
- NuSOAP braucht die globale Variable
HTTP_RAW_POST_DATA. Diese ist nur verfügbare,
wenn in php-config always_populate_raw_post_data
On
27BLZ Abfrage in PHP/NuSOAP
- lt?php require_once('nusoap-0.6.3/nusoap.php')
blz "60050101" soapclient new
soapclient('http//appserver.pepperzak.net/bankcod
e/BankCodeEJBHome/wsdl.jsp','wsdl') proxy
soapclient-gtgetProxy() reply
proxy-gtgetNameByCode(blz) echo "Name der
Bank ".reply ?gt
http//rus.jacomac.de/web_services/blz_client.php
28Erweiterungen
- Ausgabe der SOAP Nachrichten
- zu sehen unter http//rus.jacomac.de/web_services
/blz_client_nachrichten.php - Auffangen der Fehler
echo 'ltxmpgt'.proxy-gtrequest.'lt/xmpgt'echo
'ltxmpgt'.proxy-gtresponse.'lt/xmpgt'
if(err proxy-gtgetError()) print "ERROR
err" /bei BLZ sendet server keine faults /
29Gliederung
- Einführung XML, DTD und Schemata
- Webservice Grundkonzepte SOAP, WSDL, UDDI
- Vorbereitung Arbeitsplatz
- Einfachen Client erstellen mit PHP/NuSOAP
- Einfachen Server erstellen aus einer WSDL
- Kenntnisse vertiefen complex types, access
control, service orchestration
30say_hello_service.php
lt?require_once('nusoap-0.6.3/nusoap.php')s
new soap_serverfunction sayHello(inputString)
if(is_string(inputString)) return
"Seien Sie willkommen, " . inputString . "!"
else return new soap_fault('Client','
','The parameter to this service must be a
string.') s-gtregister('sayHello')s-gt
service(HTTP_RAW_POST_DATA)?gt
31Corresponding CLI Client
- lt?require_once('nusoap-0.6.3/nusoap.php')if
(empty(argv1)) echo "Sie muessen noch
einen Parameter angeben, damit es klappt."
exitmyString argv1parameters
array(myString)s new soapclient('http//rus.
jacomac.de/web_services/say_hello_service_wsdl.php
')result s-gtcall('sayHello',parameters)i
f(!err s-gtgetError()) echo 'Result
'.result else echo 'Error '.err?gt
32Authorisierung
- The soapclient object provides a method called
setCredentials(). This method is used when HTTP
authentication is needed to access a SOAP server.
The two arguments to the method are a username
and password. Its functionality is shown in the
example below - s new soapclient(
- 'http//somesite.com/protected/service.php')
- s-gtsetCredentials('myUsername','myPassword')
- You can then continue your SOAP calls, as you
would normally do. The most common way of
implementing this level of security on the server
is to use Apache's .htaccess files to implement
required authorization to protect a directory or
file. - Wichtig setCredentials() muss vor dem
eigentlichen Aufruf ausgeführt werden, da Header
zuerst gesendet werden. Die methode macht nix
anderes als header (' Authorization Basic
'.base64_encode("usernamepassword")."\r\n")
33How to generate a WSDL File with PHP/NuSOAP
- The correponding WSDL file can be found at
http//rus.jacomac.de/web_services/say_hello_servi
ce_wsdl.php?wsdl - The source http//rus.jacomac.de/web_services/say
_hello_service_wsdl.phps - Further Instructions on how to generate WSDLs
with PHP/NuSOAP are available http//dietrich.ganx
4.com/nusoap/testbed/round2_base_server.phps
34Gliederung
- Einführung XML, DTD und Schemata
- Webservice Grundkonzepte SOAP, WSDL, UDDI
- Einfachen Client erstellen mit PHP/NuSOAP oder
Java/GLUE - Einfachen Server erstellen aus einem Interface /
einer WSDL - Kenntnisse vertiefen complex types, access
control
35Complex Types Beispiel Google
- Es können per SOAP ganze Objekte übergeben
werden. Diese heißen in der Terminologie der WSDL
Complex Types. Anhand vom Google Webservice
soll der Umgang mit solchen Datentypen gezeigt
werden - Authorisierungscode holen https//www.google.com/
accounts/NewAccount?continuehttp//api.google.com
/createkeyfollowuphttp//api.google.com/createke
y - WSDL befindet sich unter http//rus.jacomac.de/we
b_services/GoogleSearch.wsdl - PHP Beispiel http//rus.jacomac.de/web_services/g
oogle_client.php?searchsomethinguseful - Sourcecode
- http//rus.jacomac.de/web_services/google_client.p
hps - Java Beispiel
- http//java.rus.uni-stuttgart.de/web_services_kur
s/GoogleClient.java
36GoogleClient Klassendiagramm
Das gesuchte Element
37Wissensquiz
- Wissensquiz à la Wer wird Millionär?
- Die WSDL liegt unter http//java.rus.uni-stuttgart
.de/quiz/quiz.wsdl - Bitte einen Client erstellen.
38Wissensquiz eine Lösung
- Zu sehen unter http//rus.jacomac.de/web_services
/wissens_quiz/ - SourceCode von der Datenbankabstraktionsschicht
http//rus.jacomac.de/web_services/wissens_quiz/li
b/QuizDatabase_soap.inc.phps
39IDEs für PHP
- PHPEdit (http//www.phpedit.net/products/PHPEdit/)
, Nusphere PHPEd(http//www.nusphere.com/products/
) - Texteditoren mit Syntax-highlighting gibt es
viele, doch richtig Spass macht es erst wenn man
(deutlich produktivitätssteigernd) - kontextbezogen in die Dokumentation springen
kann, wenn - die verfügbare Funktionen und deren Signatur
automatisch angezeigt werden (Code completion),
wenn - bereits Sprache und Webserver konfiguriert und
integriert sind, wenn - es eine Überblicksnavigation für vorhandene
Funktionen und Klassenmethoden gibt und nicht
zuletzt - ein Debugger integriert ist, bei dem man den
Programmablauf zu Laufzeit detailliert
mitverfolgen kann