Web service –?podpora v Nette?
- marek.dusek
- Člen | 99
A co konkrétně potřebuješ – klienta nebo server? Nativní SOAP (http://cz.php.net/…ook.soap.php) ti nestačí?
- daliborcaja
- Člen | 57
Nevím zda to ještě řešíš.?
Nicméně ja jsem tuto věc řešil asi takto:
<?php
class WebService extends SoapClient {
private static $times = array();
private $name;
const EXCEPT = 'Nepodařilo se připojit na databázi. Zkuste to později.';
public function __construct($wsdl, $name = 'default', $user = NULL, $pass = NULL, $compression = TRUE) {
try {
if (!isset($wsdl))
throw new Exception();
$this->name = $name;
self::$times[$name] = 0;
$this->startTimer();
$soapOpts['encoding'] = 'utf-8';
if ($compression === TRUE)
$soapOpts['compression'] = SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP;
if (isset($user, $pass)) {
$soapOpts['login'] = $user;
$soapOpts['password'] = $pass;
}
parent::__construct($wsdl, $soapOpts);
$this->stopTimer();
} catch (Exception $e) {
throw new Exception(self::EXCEPT);
}
}
public function __call($function_name, array $arguments = array()) {
try {
$this->startTimer();
$ret = parent::__call($function_name, $arguments);
$this->stopTimer();
return $ret;
} catch (Exception $e) {
throw new Exception(self::EXCEPT);
}
}
private function startTimer() {
Debug::timer('WebService_' . $this->name);
}
private function stopTimer() {
self::$times[$this->name] += Debug::timer('WebService_' . $this->name);
}
public static function getTime() {
$time = 0;
foreach (self::$times as $value) {
$time += $value;
}
return $time;
}
public static function getTimes($name = NULL) {
if ($name == NULL)
return self::$times;
foreach (self::$times as $key => $value) {
if ($name == $key)
return $value;
}
return 0;
}
}
?>
Krom přihlášení to sleduje časy které si pak můžeš vypsat pomocí statických metod na konci (jednak celkový pro všechny webservice, tak i pole časů konkrétních webservice). Je to dobré pro sledování co tu aplikaci brzdí, který ze serverů je pomalý.
- Jan Tvrdík
- Nette guru | 2595
Pokud máte někdo zkušenosti s implementací WebService, můžete poradit na anglické části fóra: https://forum.nette.org/…ices-example#…
- daliborcaja
- Člen | 57
Jan Tvrdík napsal(a):
Pokud máte někdo zkušenosti s implementací WebService, můžete poradit na anglické části fóra: https://forum.nette.org/…ices-example#…
Díval jsem se, ale jedná se tam o aplikaci na straně serveru a s tím
zkušenosti nemám.
Klienty používám celkem často tak kdyby snad někdo něco potřeboval
z této oblasti tak rád poradím.
EDIT:
Nakone jsem se ještě nad tím zamyslel a hodil jsem tam příspěvek. Tady je to v češtině:
Myslím si že metody volané přes webservice jsou většinou metody modelu. Pokud chceš přes webservice posílat pouze objekty vracené modelem (např. dibirow), přidal bych do třídy webservice metody které by pouze volaly své metody v modelu, čímž by se jednoduše zabezpečil přístup jen ke zvoleným metodám. Zde leze také přidat autorizaci.
Editoval daliborcaja (24. 2. 2011 19:42)