<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 15103 -->
<sect1 id="zend.rest.server">
    <title>Zend_Rest_Server</title>

    <sect2 id="zend.rest.server.introduction">
        <title>導入</title>

        <para>
            Zend_Rest_Server は、完全に機能する REST サーバを作成するためのものです。
        </para>
    </sect2>

    <sect2 id="zend.rest.server.usage">
        <title>REST サーバの使用法</title>

        <example id="zend.rest.server.usage.example-1">
            <title>基本的な Zend_Rest_Server の使用法 - クラス</title>

            <programlisting role="php"><![CDATA[
$server = new Zend_Rest_Server();
$server->setClass('My_Service_Class');
$server->handle();
]]>
            </programlisting>
        </example>

        <example id="zend.rest.server.usage.example-2">
            <title>基本的な Zend_Rest_Server の使用法 - 関数</title>

            <programlisting role="php"><![CDATA[
/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return string
 */
function sayHello($who, $when)
{
    return "Hello $who, Good $when";
}

$server = new Zend_Rest_Server();
$server->addFunction('sayHello');
$server->handle();
]]>
            </programlisting>
        </example>
    </sect2>

    <sect2 id="zend.rest.server.args">
        <title>Zend_Rest_Server サービスのコール</title>

        <para>
            <classname>Zend_Rest_Server</classname> サービスをコールするには、
            GET/POST 時の引数 <code>method</code> にそのメソッド名を指定しなければなりません。
            その後に、任意の数の引数を続けることができます。これは、引数の名前
            (たとえば "who") を指定するか、あるいは引数の位置を表す数値
            (たとえば "arg1") を指定します。
        </para>

        <note>
            <title>数値インデックス</title>
            <para>
               数値で指定する引数のインデックスは、1 から始まります。
            </para>
        </note>

        <para>
            上の例の <code>sayHello</code> をコールするには、次のようにします。
        </para>

        <para>
            <code>?method=sayHello&amp;who=Davey&amp;when=Day</code>
        </para>

        <para>
            あるいは、このようにもできます。
        </para>

        <para>
            <code>?method=sayHello&amp;arg1=Davey&amp;arg2=Day</code>
        </para>
    </sect2>

    <sect2 id="zend.rest.server.customstatus">
        <title>独自のステータスの送信</title>

        <para>
            値を返す際に独自のステータスを返すには、
            キー <code>status</code> を含む配列を返します。
        </para>

        <example id="zend.rest.server.customstatus.example-1">
            <title>独自のステータスを返す</title>
            <programlisting><![CDATA[
/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return array
 */
function sayHello($who, $when)
{
    return array('msg' => "An Error Occurred", 'status' => false);
}

$server = new Zend_Rest_Server();
$server->addFunction('sayHello');
$server->handle();
]]>
</programlisting>
        </example>
    </sect2>

    <sect2 id="zend.rest.server.customxml">
        <title>独自の XML レスポンスを返す</title>

        <para>
            独自の XML を返したい場合は、
            <code>DOMDocument</code>、<code>DOMElement</code> あるいは
            <code>SimpleXMLElement</code> オブジェクトを返します。
        </para>

        <example id="zend.rest.server.customxml.example-1">
            <title>独自の XML を返す</title>

            <programlisting><![CDATA[
/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return SimpleXMLElement
 */
function sayHello($who, $when)
{
    $xml ='<?xml version="1.0" encoding="ISO-8859-1"?>
<mysite>
    <value>Hey $who! Hope you\'re having a good $when</value>
    <code>200</code>
</mysite>';

    $xml = simplexml_load_string($xml);
    return $xml;
}

$server = new Zend_Rest_Server();
$server->addFunction('sayHello');

$server->handle();
]]>
</programlisting>
        </example>

        <para>
            サービスからのレスポンスは、変更なしにクライアントに返されます。
        </para>
    </sect2>
</sect1>

<!--
vim:se ts=4 sw=4 et:
-->
