Yii Framework Offizieller Leitfaden Serie 47 – Spezialthema: Webdienst

黄舟
Freigeben: 2023-03-05 19:04:01
Original
1544 Leute haben es durchsucht



Webservice ist ein Softwaresystem, das den gegenseitigen Zugriff zwischen Computern über Netzwerke hinweg unterstützt. In einer Webanwendung verwendet sie normalerweise eine Reihe von APIs, auf die über das Internet zugegriffen werden kann und die die angeforderten Dienste auf dem Remote-Systemhost ausführen. Vom Systemhost benötigte Dienste. Beispielsweise könnte ein Flex-basierter Client Funktionen aufrufen, um eine Webanwendung zu implementieren, die PHP auf der Serverseite ausführt. Webdienste basieren auf SOAP als Basisschicht des Kommunikationsprotokollstapels.

Yii bietet CWebService und CWebServiceAction, um die Implementierung von Webdiensten in Webanwendungen zu vereinfachen. Diese APIs werden in Form von Klassen implementiert, die als Dienstanbieter bezeichnet werden. Yii generiert für jede Klasse eine WSDL, die beschreibt, welche API verfügbar ist und wie der Client sie aufrufen kann. Wenn ein Client eine API aufruft, instanziiert Yii den entsprechenden Dienstanbieter und ruft die angeforderte API auf, um die Anfrage abzuschließen.

Hinweis: CWebService basiert auf der PHP-SOAP-Erweiterung. Bitte stellen Sie sicher, dass Sie diese Erweiterung zulassen, bevor Sie die Beispiele in diesem Abschnitt ausprobieren.

1. Dienstanbieter definieren (Definition Dienstanbieter)

Wie oben erwähnt, ist Dienstanbieter eine Klassendefinition, die remote aufgerufen werden kann. Yii verlässt sich auf Dokumentkommentare und Klassenreflexion, um zu ermitteln, welche Methoden remote aufgerufen werden können und welche Parameter und Rückgabewerte sie haben.

Beginnen wir mit einem einfachen Börsenkurs-Service. Mit diesem Service können Kunden Angebote für bestimmte Aktien anfordern. Den Dienstleister ermitteln wir wie folgt. Beachten Sie, dass wir eine Anbieterklasse StockController definieren, die CController erweitert. Dies ist nicht erforderlich. Warum das so ist, erklären wir gleich.


class StockController extends CController
{
    /**
     * @param string the symbol of the stock
     * @return float the stock price
     * @soap
     */
    public function getPrice($symbol)
    {
        $prices=array('IBM'=>100, 'GOOGLE'=>350);
        return isset($prices[$symbol])?$prices[$symbol]:0;
        //...return stock price for $symbol
    }
}
Nach dem Login kopieren

Oben deklarieren wir die Methode @soap über das Tag getPrice in der Dokumentation Kommentar Für eine Webdienst-API. Verlassen Sie sich auf Dokumentationskommentare, um Eingabeparameter-Datentypen und Rückgabewerte anzugeben. Andere APIs können auf ähnliche Weise deklariert werden.

2. Webdienstaktion deklarieren (Webdienstaktion definieren)

Der Dienstanbieter wurde definiert und wir ermöglichen den Zugriff darauf über den Client. Insbesondere werden wir eine Controller-Aktion erstellen, die diesen Dienst verfügbar macht. Dies kann einfach durch Definieren einer CWebServiceAction-Aktion in der Controller-Klasse erfolgen. Für unser Beispiel haben wir es in StockController eingefügt.


class StockController extends CController
{
    public function actions()
    {
        return array(
            'quote'=>array(
                'class'=>'CWebServiceAction',
            ),
        );
    }

    /**
     * @param string the symbol of the stock
     * @return float the stock price
     * @soap
     */
    public function getPrice($symbol)
    {
        //...return stock price for $symbol
    }
}
Nach dem Login kopieren

Dies ist der Webdienst, den wir erstellen müssen! Wenn wir versuchen, auf die Aktions-URL http://www.php.cn/ zuzugreifen, sehen wir viele XML-Inhalte, bei denen es sich tatsächlich um die WSDL-Beschreibung des von uns definierten Webdienstes handelt.

Tipp: Standardmäßig geht CWebServiceAction davon aus, dass der aktuelle Controller ein Dienstanbieter ist. Dies liegt daran, dass wir die Methode getPrice in StockController definieren.

3. Webdienst konsumieren

Um dieses Beispiel zu vervollständigen, erstellen wir einen Client, der den soeben erstellten Webdienst nutzt. Der Client im Beispiel ist in PHP geschrieben, kann aber auch in anderen Sprachen geschrieben werden, z. B. Java, C#, Flex usw.


$client=new SoapClient('http://hostname/path/to/index.php?r=stock/quote');
echo $client->getPrice('GOOGLE');
Nach dem Login kopieren

Führen Sie das obige Skript im Webseiten- oder Konsolenmodus aus. Wir sehen den Preis von GOOGLE 350 .

4. Datentypen

Wenn auf die definierten Methoden und Eigenschaften remote zugegriffen wird, müssen wir die Datentypen der Eingabe- und Ausgabeparameter angeben. Die folgenden primitiven Datentypen können verwendet werden:

  • str/string: entspricht xsd:string;

  • int/integer: entspricht xsd:int;

  • float/double: entspricht xsd:float;

  • bool/boolean: entspricht xsd:boolean;

  • Datum: entspricht xsd:date;

  • Uhrzeit: entspricht xsd:time;

  • DatumUhrzeit : entspricht xsd:dateTime;

  • Array: entspricht xsd:string;

  • Objekt: entspricht xsd:struct;

  • gemischt: Entspricht xsd:anyType.

Wenn der Typ zu keinem der oben genannten primitiven Typen gehört, wird er als zusammengesetzte Eigenschaft betrachtet eines zusammengesetzten Typs. Ein zusammengesetzter Typ wird als Klasse betrachtet und seine Eigenschaften werden als öffentliche Mitgliedsvariablen der Klasse betrachtet und in Dokumentationskommentaren mit @soap gekennzeichnet.

Wir können Array-Typen auch verwenden, indem wir [] nach einem primitiven oder zusammengesetzten Typ anhängen. Dadurch wird ein Array des angegebenen Typs definiert.

Das Folgende ist ein Beispiel für die Definition der getPosts-Web-API und die Rückgabe eines Arrays von Post-Objekten.


class PostController extends CController
{
    /**
     * @return Post[] a list of posts
     * @soap
     */
    public function getPosts()
    {
        return Post::model()->findAll();
    }
}

class Post extends CActiveRecord
{
    /**
     * @var integer post ID
     * @soap
     */
    public $id;
    /**
     * @var string post title
     * @soap
     */
    public $title;
}
Nach dem Login kopieren

5. Klassenzuordnung

Um den Verbund vom Clienttyp zu erhalten Parameter muss die Anwendung die Zuordnung vom WSDL-Typ zur entsprechenden PHP-Klasse definieren. Dies erfolgt durch die Konfiguration der Eigenschaft classMap von CWebServiceAction.


class PostController extends CController
{
    public function actions()
    {
        return array(
            'service'=>array(
                'class'=>'CWebServiceAction',
                'classMap'=>array(
                    'Post'=>'Post',  // or simply 'Post'
                ),
            ),
        );
    }
    ......
}
Nach dem Login kopieren

6. Abfangen von Remote-Methodenaufrufen (Abfangen von Remote-Methodenaufrufen)

Durch die Implementierung der IWebServiceProvider-Schnittstelle kann der Dienstanbieter Remote-Methodenaufrufe abfangen. In IWebServiceProvider::beforeWebMethod kann der Dienstanbieter die aktuelle CWebService-Instanz und den Namen der über CWebService::methodName angeforderten Methode abrufen. Es kann „false“ zurückgeben, wenn die Remote-Methode aus irgendeinem Grund nicht aufgerufen werden soll (z. B. unbefugter Zugriff).

Das Obige ist der Inhalt von Yii Framework Official Guide Series 47 – Spezialthema: Webservice. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!