<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ebene7 &#187; SOAP</title>
	<atom:link href="http://blog.ebene7.com/schlagwort/soap/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ebene7.com</link>
	<description></description>
	<lastBuildDate>Tue, 04 Jun 2013 18:57:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Eigener Webservice in fünf Minuten</title>
		<link>https://blog.ebene7.com/2010/05/19/eigener-webservice-in-fuenf-minuten/</link>
		<comments>https://blog.ebene7.com/2010/05/19/eigener-webservice-in-fuenf-minuten/#comments</comments>
		<pubDate>Wed, 19 May 2010 05:00:03 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Webservice]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=836</guid>
		<description><![CDATA[Für verschiedene Aufgaben ist es notwendig, dass mehrere Anwendungen möglichst nahtlos miteinander kommunizieren können. Dafür eignen sich Webservices sehr gut und wenn man keine Wissenschaft daraus machen möchte, kann man auch schnelle Ergebnisse erzielen Damit wir zum Testen ein paar &#8230; <a href="https://blog.ebene7.com/2010/05/19/eigener-webservice-in-fuenf-minuten/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Für verschiedene Aufgaben ist es notwendig, dass mehrere Anwendungen möglichst nahtlos miteinander kommunizieren können. Dafür eignen sich <a href="http://de.wikipedia.org/wiki/Webservice" target="_blank">Webservices</a> sehr gut und wenn man keine Wissenschaft daraus machen möchte, kann man auch schnelle Ergebnisse erzielen</p>
<p><span id="more-836"></span>Damit wir zum Testen ein paar &#8220;lebendige&#8221; Daten haben, schreiben wir uns erstmal eine kleine Testklasse.</p>
<pre><code>&lt;?php
// myDate.php
class myDate
{
  function date($format='Y-m-d H:i:s', $timestamp = null)
  {
    return date($format, ($timestamp ? $timestamp : time()));
  }
}</code></pre>
<p>Im Prinzip kann hier eine beliebige Klasse verwendet werden.</p>
<p>Da wir nun eine Datenquelle haben, müssen wir diese auch zugänglich machen. Der Webservice dient aber nicht nur dem Datenaustausch. Objekte und Funktionen können damit über das Netzwerk fernbedient werden. Im besten Fall merkt man den Unterschied nicht, ob man mit einem lokalen Objekt oder einem Webservice arbeitet.</p>
<p>Nun aber zu unserem Server&#8230;</p>
<pre><code>&lt;?php
// server.php
require_once('myDate.php');

$server = new SoapServer(null, array('uri' =&gt; 'http://test-webservice/'));
$server-&gt;setClass('myDate');  // oder $server-&gt;setObject(new myDate());
$server-&gt;handle();</code></pre>
<p>Zuerst binden wir die Klasse <code>myDate</code> ein. Innerhald einer Anwendung wird das wahrscheinlich über Autoload geschehen. Die Instanz des Servers erzeuge ich in minimalster Form, ebenso sparsam bin ich beim Aufruf von handle(). Damit der Server arbeiten kann, müssen wir ihm den Klassennamen oder eine fertiges Objekt übergeben.</p>
<p>Wer nun mehr Code beim Client erwartet, den muss ich leider enttäuschen, es wird noch weniger.</p>
<pre><code>&lt;?php
// client.php
$url = 'http://' . $_SERVER['SERVER_NAME']
     . dirname($_SERVER['PHP_SELF']) . '/server.php';
$client = new SoapClient(null, array('location' =&gt; $url,
                                     'uri' =&gt; 'http://test-webservice/'));

echo 'Output: ' . $client-&gt;date();</code></pre>
<p>Wir erzeugen uns eine Instanz des Soap-Clients und können dann wie auf dem &#8220;echten&#8221; Objekt Methoden aufrufen. Die Methode Date funktionert wie die PHP-Funktion <code>date()</code> mit einem Standardformat.</p>
<p>Ein wenig mehr ist schon zu beachten, wenn wir den Server in einer Controller-Action verbauen wollen. In dem Fall müssen wir die Ausgabe buffern und ans das Response-Objekt übergeben.</p>
<pre><code>$server = new SoapServer(null, array('uri' =&gt; 'http://test-webservice/'));
$server-&gt;setObject($helper);

ob_start();
$server-&gt;handle(file_get_contents('php://input'));
$this-&gt;getResponse()-&gt;appendBody(ob_get_contents());
ob_clean();</code></pre>
<p>Wer mehr zu dem Thema wissen will, sollte sich das Kapitel <a href="http://de2.php.net/manual/en/book.soap.php" target="_blank">SOAP im PHP-Manual</a> ansehen.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/05/19/eigener-webservice-in-fuenf-minuten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
