Web service –?podpora v Nette?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sin
Člen | 82
+
0
-

Máte někdo zkušenost s propojením Nette a Web service ? Existuje nějaká podpora pro to ? já jsme nic o tom nenašel… Díky

marek.dusek
Člen | 99
+
0
-

A co konkrétně potřebuješ – klienta nebo server? Nativní SOAP (http://cz.php.net/…ook.soap.php) ti nestačí?

sin
Člen | 82
+
0
-

potřebuju klienta, zatím si spíš zjištuju možnosti, o soap vím, ale zatím jsem si ho nenastudoval…ale asi to na něj dopadne…

daliborcaja
Člen | 57
+
0
-

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ý.

sinacek
Člen | 23
+
0
-

Díky, nakonec z toho sešlo, ale děkuju za zájem a ukázku

daliborcaja napsal(a):

Nevím zda to ještě řešíš.?

Jan Tvrdík
Nette guru | 2595
+
0
-

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
+
0
-

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)