g4t7 [Main]
CEWebS
Info
Das CEWebS UI das Sie hier im Browser sehen ist der Container. Alle Inhalte im Content-Bereich (wo sie grade lesen) werden von Web Services bereit gestellt (es gibt eins für Wiki, XML Tools, Abgaben, etc.).
Was braucht der Container, damit er Ihr Web Service aufrufen kann?
- Nur die WSDL Ihres Services. Die ist vorgegeben – alles was Sie anpassen ist der Endpoint zu Ihrer Implementierung
Was braucht Ihr Service, damit es in den Container eingebunden werden kann?
- Die CEWebS WSDL und eine Implementierung davon (Endpoint)
- Informationen über die User. Die User werden ausschliesslich vom Container verwaltet, dh User anlegen, Namen ändern, etc. ist tabu (geht auch gar nicht). Sie kriegen eine XML Datei mit Usern.
Wie kommt der Content vom Service ins Container-UI?
- Im Container wird das aufzurufende Service durch den parameter t im URL identifiziert
- Container ruft Endpoint des Services t auf
- Funktion getDocument(…) (identifiziert durch URL Parameter m=D): Liefert XHTML string, den anzuzeigenden Inhalt
- Funktion getChunk(…) (identifiziert durch URL Parameter m=C): Liefert XHTML/XML string, für AJAX Aufrufe aus dem Container
- Funktion getFile(…) (identifiziert durch URL Parameter m=F): Liefert base64 string, für download von Files
- Jedes Service kann beliebige Kommandos unterstützen, die es selbst definieren kann und implementieren muss. Bei jedem Aufruf wird ein Kommando mitgegeben (meistens default: show). Das Kommando wird im URL idenfiziert durch den Parameter c
- Bei jedem Aufruf können weitere HTTP GET und POST Parameter mitgegeben werden. Das Service kriegt diese nur vom Container "weitervermittelt" wenn Sie mit CEWebS_ beginnen.
Also zusammenfassend: der URL
http://www.pri.univie.ac.at/courses/pi-swa/ws09/index.php?m=D&t=derntl&c=edit&CEWebS_c=g4t7&CEWebS_what=CEWebS&CEWebS_back=Main
bedeutet:
- Der Conainer ist http://www.pri.univie.ac.at/courses/pi-swa/ws09
- Die Methode die Aufgerufen wird ist getDocument (wegen m=D)
- Das Service das aufgerufen wird ist identifiziert durch t=derntl (der Container weiss dann den WSDL URL für das Service)
- Das Kommando das ich gerade sehe ist edit, weil ich diese Seite gerade editiere
- Zusätzlich HTTP GET Parameter (die der "Editieren" Link rechts unten bereitgestellt hat):
- CEWebS_c=g4t7 identifiziert das Wiki-Compartment g4t7 – Ihr Teambereich)
- CEWebS_what=CEWebS identifiziert die Seite, die heisst hier "CEWebS"
- CEWebS_back=Main identifiziert die Seite auf die ich zurückkehren werde nachdem ich auf "Speichern" drücke
Was kommt da so im HTML vor, das vom Service geliefert wird?
- Eiserne Regel 1: Das Service sollte zwecks einheitlichem Aussehens die CSS Klassen verwenden, die der «Container definiert»!
- Eiserne Regel 2: XHTML liefern!
- Achtung: Bevor der Inhalt, den ein Service liefert, angezeigt wird, wird er vom Container transformiert. Dabei werden u.a. CEWebS-Links in HTML Hyperlinks umgewandelt. Ein CEWebS Link auf sich selbst (das Service weiss ja nicht welche ID t es im Container hat) mit Methode = document und Kommando= "show" sieht wie folgt aus:<a href="CEWebS://self/document/show">Show</a>Das wird vom Container transformiert in:<a href="http://www.pri.univie.ac.at/courses/pi-swa/ws09/index.php?m=D&t=myservice&c=show">Show</a>falls das Service die ID myservice hat.
- Um einen Link zu dieser Seite zu machen, kann man:CEWebS://derntl/document/edit&CEWebS_c=g4t7&CEWebS_what=CEWebS&CEWebS_back=Mainschreiben, was der Container in den URLhttp://www.pri.univie.ac.at/courses/pi-swa/ws09/index.php?m=D&t=derntl&c=edit&CEWebS_c=g4t7&CEWebS_what=CEWebSverwandelt.
Implementierung
Wir nehmen hier ein Beispiel-Service, das im c=show ein Formular anzeigt. Die Formulardaten werden an c=processform geschickt, dort in ein XML File geschrieben und das wars.
Schritt 1: Delivery Files
Sie brauchen einen Server für das Service (Almighty oder eigenes Hosting) der über HTTP zugänglich ist und Web Service Anfragen über SOAP bearbeiten kann.
Entpacken Sie die Delivery.zip in ein Verzeichnis auf Ihrem Server, das über HTTP zugänglich ist.
Schritt 2: Data Files
Entpacken Sie die Data.zip in ein Verzeichnis auf Ihrem Server, das über HTTP nicht zugänglich ist (dort werden die Userdaten und sonstige Service-daten rumliegen):
- persons.xml : Die User, die dem Container und Ihrem Service bekannt sind. Wenn der Container Ihr Service aufruft, schickt er die ID des eingeloggten Benutzers mit. Im Service können Sie über $this→users per SimpleXML darauf zugreifen.
- config.xml: Eine Konfigurationsdatei, die Sie beliebig gestalten können. Im Service können Sie über $this→config per SimpleXML darauf zugreifen.
Schritt 3: Anpassungen
Jenachdem wie Ihr Server heisst und wo Sie die Delivery.zip und Data.zip hinentpackt haben, müssen Sie jetzt ein paar Anpassungen in den entpackten Files machen.
Angenommen Ihr Host heisst myhost.at, Sie haben dort die Delivery.zip ins public HTML Unterverzeichnis delivery entpackt.
Nehmen Sie folgende Anpassungen vor:
- CEWebSDelivery.wsdl: In Zeile 292 den Endpoint anpassen, sodass er auf die entpackte CEWebSDelivery.php zeigt, z.B. http://myhost.at/delivery/CEWebSDelivery.php.
- Stellen Sie sicher, dass Sie aus dem PHP r/w Zugriff auf jenes Verzeichnis haben, in das Sie die Data.zip entpackt haben.
- ImplBase.php: Das ist die Basisklasse für alle Kommando-Implementierungen. In Zeile 101 den Pfad anpassen, sodass er der Teil vor {$filename} in das Verzeichnis zeigt, wo Sie die Data.zip entpackt haben.
- Für jedes Kommando (c=XXX) gibt es eine Implementierung, die heisst ImplXXX.php. Dort implementieren Sie die Funktion document(), das ist jene die den XHTML für den Container liefert.
Schritt 5: WSDL Link sagen
- Sie müssen mir nun den URL der CEWebSDelivery.wsdl Datei Ihres Service sagen «per Email» (z.B. http://myhost.at/delivery/CEWebSDelivery.wsdl).
- Ich trage diesen in den Container ein, vergebe eine Service ID (t), ab dann können Sie das aus diesem Container aufrufen.
Schritt 6: Loslegen
Starten Sie bei ImplShow.php, Funktion document() und schauen und probieren Sie dort rum.
Bei Problemen mich einfach fragen. Es wäre gut wenn Sie die *.php als *.phps verfügbar machen auf Ihrem Server, damit ich reinschaun kann.
Files:
Letzte Änderung: 16.12.2009, 10:54 | 905 Worte