Exposer un composant comme un service Web

SCA pour PHP peut générer des fichiers WSDL à partir des annotations dans un composant, ce qui fait qu'il peut être facilement déployé et exposé comme un service Web. Pour fournir à SCA les informations dont il a besoin pour produire le WSDL, il est nécessaire d'ajouter l'annotation @binding.soap dans l'annotation @service et de spécifier les paramètres et les valeurs de retour avec les annotations @param et @return. Ces annotations seront lues quand le fichier WSDL sera produit, et l'ordre et les types des paramètres va déterminer le contenu de la section <schema> du fichier WSDL.

SCA pour PHP produit toujours des fichiers WSDL pour les composants qui exposent des services Web. Notez que cela n'empêche pas les composants de consommer des services Web qui ne sont pas des composants SCA, et qui sont documentés avec des fichiers WDSL qui ne sont pas dans le même format.

Les types scalaires qui peuvent être utilisé dans les annotations @param sont les quatres types scalaires communs de PHP : booléen, entier, nombre décimal et chaîne de caractères. Ils sont simplement transformés en un équivalent au format XML. L'exemple ci-dessous, qui est une implémentation triviale du service StockQuote avec des appels à ConvertedStockQuote illustre l'utilisation de chaîne de caractères et nombre décimal.

Exemple #1 Service StockQuote

<?php

include "SCA/SCA.php";

/**
 * Implémentation d'un service distant StockQuote Web.
 *
 * @service
 * @binding.soap
 *
 */
class StockQuote {

    
/**
     * Lit une cotation pour un symbole
     *
     * @param string $ticker Le symbole de l'action
     * @return float La cotation de l'action
     */
    
function getQuote($ticker) {
        return 
80.9;
  }
}
?>

Un fichier WSDL, semblable au document suivant (mais avec une localisation de service autre que 'localhost', probablement) sera généré pour le service :

Exemple #2 Generated WSDL

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xsi:type="tDefinitions"
    xmlns:tns2="http://StockQuote" xmlns:tns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns3="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://StockQuote">
  <types>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://StockQuote">
      <xs:element name="getQuote">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ticker" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="getQuoteResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="getQuoteReturn" type="xs:float"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </types>

  <message name="getQuoteRequest">
    <part name="getQuoteRequest" element="tns2:getQuote"/>
  </message>
  <message name="getQuoteResponse">
    <part name="return" element="tns2:getQuoteResponse"/>
  </message>
  <portType name="StockQuotePortType">
    <operation name="getQuote">
      <input message="tns2:getQuoteRequest"/>
      <output message="tns2:getQuoteResponse"/>
    </operation>
  </portType>
  <binding name="StockQuoteBinding" type="tns2:StockQuotePortType">
    <operation name="getQuote">
      <input>
        <tns3:body xsi:type="tBody" use="literal"/>
      </input>
      <output>
        <tns3:body xsi:type="tBody" use="literal"/>
      </output>
      <tns3:operation xsi:type="tOperation" soapAction=""/>
    </operation>
    <tns3:binding xsi:type="tBinding" transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  </binding>
  <service name="StockQuoteService">
    <port name="StockQuotePort" binding="tns2:StockQuoteBinding">
      <tns3:address xsi:type="tAddress" location="http://localhost/StockQuote/StockQuote.php"/>
    </port>
  </service>
</definitions>

<!-- this line identifies this file as WSDL generated by SCA for PHP. Do not remove -->