You are not logged in.

1

Sunday, September 5th 2010, 5:53pm

Daten extern bereitstellen

Hallo zusammen,

ich würde gerne einen Webservice programmieren, der von mir berechnete Daten aus einer Datenbank für externe zugänglich macht, damit diese sie auf ihrer Homepage einbinden können.
Leider sind die Beispiele, welche ich per google finde alle relativ alt oder setzen irgendwelche Kenntnisse voraus.

Ich bin ein eher ein lern-by-example Mensch und würde mich daher über ein kleines Beispiel - wie ich Informationen bereitstelle - sehr freuen.

Die Arbeit muss nicht komplett erledigt sein, aber ich bräuchte vielleicht mal ein grundsätzlichen Aufbau, welche Klassen und WSDL Files ich eigentlich alles brauche.


Danke

2

Sunday, September 5th 2010, 6:46pm

Heute scheint dein Glückstag. Ich hatte Lust ein Tutorial zu schreiben:
PHP SOAP Server mit WSDL und API Schlüssel

Es muss übrigens kein SOAP/WSDL sein.
Alternativen wären ein REST Service, oder noch einfachere Mittel wie normale HTTP Aufrufe oder eine JavaScript API.

3

Monday, September 6th 2010, 8:58pm

Hallo,
vielen Dank erstmal für die tolle Anleitung.
Ich hätte allerdings 2 weitere Fragen zum Thema:

Wenn ich das Ganze lokal bei mir laufen lasse, dann bekomme ich folgenden error:

PHP Quellcode

1
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in C:\Users\peter\Documents\xampp\htdocs\webservice\client.php:35 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://localhos...', 'http://localhos...', 1, 0) #1 [internal function]: SoapClient->__call('getFoo', Array) #2 C:\Users\peter\Documents\xampp\htdocs\webservice\client.php(35): SoapClient->getFoo('a', 'b') #3 {main} thrown in C:\Users\peter\Documents\xampp\htdocs\webservice\client.php on line 35


Ich habe in "client.php" und "server.php" nur die URLs angepasst. Fehlt mir noch was?


Eine weitere Frage zur Thematik: brauche ich eigentlich ein Webservice?
Die User bekommen von mir im Prinzip alles vorgekaut und haben keine Möglichkeit, die Funktionen durch Parameter zu erweitern.

Lohnt sich da der Aufwand eines Webservices überhaupt oder würde es nicht auch ein "include("http://www.url-zu-meinen-daten.de/daten.php")" reichen?


vielen dank!

4

Tuesday, September 7th 2010, 6:18pm

also ein include auf fremde Quellen funktioniert nicht. Ansonsten kannst du natürlich auch eine Simple HTTP API anbieten.
Weil dein Aufruf natürlich die andere Seite blockieren kann, solltest du außerdem einen Timeout einbauen...

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
function fetch_integration($data) {
	$context = stream_context_create(array(
		'http' => array('timeout' => 0.5)
	));
	$source = 'http://deineurl/?'.http_build_query($data);
	$html = @file_get_contents($source, 0, $context)."";
	return $html;
}
 
 
echo fetch_integration(array(
	'apikey' => 'einhundert'
));

5

Wednesday, September 8th 2010, 9:59am

Entschuldigung, wenn ich dich weiter stören muss.

Aber a) ist das doppelte $$ Zeichen beim Parameter ein Syntaxfehler? und b) wo genau kommt das hin?

egal in welches File ich es packe, es klappt nicht.


vielen dank!

This post has been edited 1 times, last edit by "ali g" (Sep 8th 2010, 11:39am)


6

Wednesday, September 8th 2010, 1:57pm

Denke das ist kein Syntaxfehler,
in PHP kann man als Variablennamen Variablen nehmen, also

PHP Quellcode

1
2
3
$varname = "bsp";
$$varname = 2;
echo $bsp;

Jedenfalls war das früher so, als ich noch so einen Quatsch gemacht habe ;)

7

Wednesday, September 8th 2010, 6:57pm

Syntaxfehler ist es keiner. Gewollt war es dennoch nicht ;) Habe meinen Code aktualisiert.
Welcher Fehler kommt denn? Ich kann dir ja nicht beantworten wo es hinkommt. Es muss halt dein "Kunde" benutzen, da wo deine Ausgabe erscheinen soll.
Da wo du ein Posting weiter oben noch include anwenden wolltest.

8

Thursday, September 9th 2010, 11:27am

so gesehen kommt es bei deinem Beispiel in die client.php?!

ich bekomme folgenden timeout:
Fatal error: Maximum execution time of 60 seconds exceeded in C:\Users\peter\Documents\xampp\htdocs\webservice\client.php on line 50

10

Friday, September 10th 2010, 10:02am

das ist der Methodenaufruf:

echo $client->getFoo('a', 'b');


danke

11

Friday, September 10th 2010, 9:16pm

wird ja langsam ziemlich wild hier.. reine HTTP API, SOAP API, was machst du denn nun?
Nach deinen letzten 3 Postings hat eigentlich jeder gedacht du nutzt die HTTP APi. Jetzt auf einmal wieder SOAP?

Und nun hast du einfach das Beispiel aus dem Wiki kopiert und das klappt nicht? Ansonsten - wenn du Änderungen gemacht hast - dann musst du uns die natürlich zeigen. Wie sollen wir sonst den Fehler nachvollziehen...

12

Friday, September 10th 2010, 9:26pm

Hallo Donut,

vielen Dank für dein Support ;)

Ich wusste um ehrlich zu sein nicht, dass ich hier in den Technologien rumspringe ;)

Ich habe eigentlich die ganze Zeit von deinem Tutorial gesprochen und nur irgendwann kurz an der Webservicevariante gezweifelt.
Änderungen habe ich eigentlich nur in den Pfadangaben gemacht.
->

Source code

1
2
3
$uri = 'localhost';
$uri = 'http://localhost/php/soap-server-wsdl-auth/server.php?wsdl';
$location = 'http://localhost/php/soap-server-wsdl-auth/server.php';



danke!

13

Saturday, September 11th 2010, 11:41am

im server ist auch noch eine uri hinterlegt. Sorg einfach dafür, dass nirgends mehr demo.easy-coding vorkommt.
Die 3 Zeilen oben musst du noch kurz ändern.. Zeile 2 muss lauten: $wsdl = '...
Aber daran liegts nicht...

14

Sunday, September 12th 2010, 5:35pm

Vielen Dank.
es läuft nun!

Ich habs einfach mal auf mein webspace geladen und nun kommen die Meldungen nicht mehr!

danke

//edit:
sorry für die dumme frage, aber muss ich meine Methoden noch irgendwo initialisieren? danke

This post has been edited 1 times, last edit by "ali g" (Sep 12th 2010, 6:27pm)


16

Sunday, September 12th 2010, 7:01pm

obwohl ich weitere Methoden in APIService geschrieben habe, findet der Client sie nicht :

Quoted


Fatal error: Uncaught SoapFault exception: [Client] Function ("getTest") is not a valid method for this service in C:\Users\peter\Documents\xampp\htdocs\webservice\client.php:37 Stack trace: #0 [internal function]: SoapClient->__call('getTest', Array) #1 C:\Users\peter\Documents\xampp\htdocs\webservice\client.php(37): SoapClient->getTest() #2 {main} thrown in C:\Users\peter\Documents\xampp\htdocs\webservice\client.php on line 37


daher dachte ich, dass ich die Methode vielleicht noch irgendwo "bekannt" (=initialisieren) muss (was du ja eigentlich auch nicht gemacht hast).
Außerdem habe ich "$server->addFunction()" gefunden, was mich auf diese initialisieren-Idee gebracht hat.


Danke!

18

Sunday, September 12th 2010, 8:18pm

Dann passt bei mir leider irgendwas noch nicht...

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
 
/**
 * API Service
 */
class APIService {
 
	/**
	 * gets foo
	 */
	public function getFoo($param1, $param2) {
		return 'hello '.$param1.' / '.$param2;
	}
 
	/**
	 * sets foo
	 */
	public function setFoo($param1, $param2) {}
 
 
	/**
	 * gets foo
	 */
	public function getFoo2($param1, $param2) {
		return 'hello '.$param1.' / '.$param2;
	}
 
	/**
	 * sets foo
	 */
	public function setFoo2($param1, $param2) {}
 
}
 
 
?>



Die WSDL sieht aber eigentlich ganz gut aus:
http://paste-it.net/public/oaa0a8e/

Similar threads

Social bookmarks