Zend_Json-Server.xml 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15807 -->
  4. <sect1 id="zend.json.server">
  5. <title>Zend_Json_Server - JSON-RPCサーバー</title>
  6. <para>
  7. <classname>Zend_Json_Server</classname>は<ulink
  8. url="http://groups.google.com/group/json-rpc/">JSON-RPC</ulink>
  9. サーバー実装です。それは
  10. <ulink url="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">バージョン 2 仕様</ulink>
  11. と同様に
  12. <ulink url="http://json-rpc.org/wiki/specification">JSON-RPCバージョン 1 仕様</ulink>
  13. の両方をサポートします;
  14. それは、サービスのメタデータをサービス利用者に提供するために、
  15. <ulink url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">サービス
  16. マッピング定義 (SMD) 仕様</ulink>の
  17. PHP実装を提供します。
  18. </para>
  19. <para>
  20. JSON-RPCは、軽量なリモート・プロシージャ呼出しプロトコルです。
  21. そのプロトコルでは、JSONをそのメッセージのエンベロープのために利用します。
  22. このJSON-RPC実装はPHPの<ulink
  23. url="http://us.php.net/manual/en/function.soap-soapserver-construct.php">SoapServer</ulink>
  24. APIに従います。
  25. このことにより典型的状況では、簡単に下記のことができます:
  26. </para>
  27. <itemizedlist>
  28. <listitem><para>サーバーオブジェクトのインスタンス化</para></listitem>
  29. <listitem><para>一つ以上の関数やクラス/オブジェクトをサーバーオブジェクトに配置</para></listitem>
  30. <listitem><para>リクエストの handle()</para></listitem>
  31. </itemizedlist>
  32. <para>
  33. <classname>Zend_Json_Server</classname>は
  34. どんな付属のクラスまたは関数でも<xref linkend="zend.server.reflection" />Reflectionを実行することを利用します。
  35. また、SMDと実施するメソッド呼び出しのシグナチュアとの両方をビルドするためにその情報を使います。
  36. そのように、それはどんな付属の関数またはクラス・メソッドでも完全なPHP docblock文書を最小限、持つ命令文です:
  37. </para>
  38. <itemizedlist>
  39. <listitem><para>パラメータとそれらで期待される変数の型の全て</para></listitem>
  40. <listitem><para>戻り値変数の型</para></listitem>
  41. </itemizedlist>
  42. <para>
  43. <classname>Zend_Json_Server</classname>はこの時だけPOSTリクエストをリスンします;
  44. 幸いにも、この文書の時点では、ワイルドなJSON-RPC実装の大半は、
  45. そのようにリクエストをポストするだけです。
  46. 次の例で示されるように、
  47. リクエストの処理だけではなく、サービスSMDの配信の両方で
  48. 同じサーバーエンドポイントを簡単に利用できるようにします。
  49. </para>
  50. <example id="zend.json.server.usage">
  51. <title>Zend_Json_Server利用方法</title>
  52. <para>
  53. 最初に、JSON-RPCサーバーによって公開したいクラスを定義しましょう。
  54. そのクラスを 'Calculator' とし、
  55. 'add'、'subtract'、'multiply' 及び 'divide'メソッドを定義します:
  56. </para>
  57. <programlisting language="php"><![CDATA[
  58. /**
  59. * Calculator - JSON-RPCを通じて公開するサンプル・クラス。
  60. */
  61. class Calculator
  62. {
  63. /**
  64. * 2つの変数の合計を返します
  65. *
  66. * @param int $x
  67. * @param int $y
  68. * @return int
  69. */
  70. public function add($x, $y)
  71. {
  72. return $x + $y;
  73. }
  74. /**
  75. * 2つの変数の差を返します
  76. *
  77. * @param int $x
  78. * @param int $y
  79. * @return int
  80. */
  81. public function subtract($x, $y)
  82. {
  83. return $x - $y;
  84. }
  85. /**
  86. * 2つの変数の積を返します
  87. *
  88. * @param int $x
  89. * @param int $y
  90. * @return int
  91. */
  92. public function multiply($x, $y)
  93. {
  94. return $x * $y;
  95. }
  96. /**
  97. * 2つの変数の除算結果を返します
  98. *
  99. * @param int $x
  100. * @param int $y
  101. * @return float
  102. */
  103. public function divide($x, $y)
  104. {
  105. return $x / $y;
  106. }
  107. }
  108. ]]></programlisting>
  109. <para>
  110. それぞれのメソッドで戻り値のための項目だけでなく、
  111. それぞれのパラメータとその型を示す項目を持つdocblockを持つことに注意してください。
  112. それに関しては、Zend Frameworkで<classname>Zend_Json_Server</classname>や
  113. その他のいずれのサーバー構成要素を利用するときでも、これは<emphasis>絶対重要</emphasis>です。
  114. </para>
  115. <para>
  116. それでは、リクエストを処理するためのスクリプトを作成します:
  117. </para>
  118. <programlisting language="php"><![CDATA[
  119. $server = new Zend_Json_Server();
  120. // どのような機能が利用できるか示します:
  121. $server->setClass('Calculator');
  122. //リクエストを処理:
  123. $server->handle();
  124. ]]></programlisting>
  125. <para>
  126. しかしながら、JSON-RPCクライアントがメソッドを自動検出することができるように、
  127. SMDを返す問題を対象にしません。
  128. それは、HTTPがメソッドをリクエストすることを確定し、
  129. それから、若干のサーバー・メタデータを指定することによって達成されます:
  130. </para>
  131. <programlisting language="php"><![CDATA[
  132. $server = new Zend_Json_Server();
  133. $server->setClass('Calculator');
  134. if ('GET' == $_SERVER['REQUEST_METHOD']) {
  135. // URLのエンドポイント及び使用するJSON-RPCのバージョンを示します:
  136. $server->setTarget('/json-rpc.php')
  137. ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
  138. // SMDをつかみます
  139. $smd = $server->getServiceMap();
  140. // クライアントにSMDを返します
  141. header('Content-Type: application/json');
  142. echo $smd;
  143. return;
  144. }
  145. $server->handle();
  146. ]]></programlisting>
  147. <para>
  148. DojoツールキットでJSON-RPCサーバーを利用するなら、
  149. その2つがきちんと相互作用することを確実にするために、
  150. 特別な互換性フラグをセットする必要もあります:
  151. </para>
  152. <programlisting language="php"><![CDATA[
  153. $server = new Zend_Json_Server();
  154. $server->setClass('Calculator');
  155. if ('GET' == $_SERVER['REQUEST_METHOD']) {
  156. $server->setTarget('/json-rpc.php')
  157. ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
  158. $smd = $server->getServiceMap();
  159. // Dojo互換を設定します:
  160. $smd->setDojoCompatible(true);
  161. header('Content-Type: application/json');
  162. echo $smd;
  163. return;
  164. }
  165. $server->handle();
  166. ]]></programlisting>
  167. </example>
  168. <sect2 id="zend.json.server.details">
  169. <title>高度な詳細</title>
  170. <para>
  171. <classname>Zend_Json_Server</classname>の機能の大半が
  172. <xref linkend="zend.json.server.usage" />で説明されており、
  173. より高度な機能を利用できます。
  174. </para>
  175. <sect3 id="zend.json.server.details.zendjsonserver">
  176. <title>Zend_Json_Server</title>
  177. <para>
  178. <classname>Zend_Json_Server</classname>は、
  179. JSON-RPCを提供する中心的なクラスです;
  180. それはすべてのリクエストを扱い、
  181. レスポンス・ペイロードを返します。
  182. 下記のメソッドがあります:
  183. </para>
  184. <itemizedlist>
  185. <listitem><para><code>addFunction($function)</code>:
  186. サーバーに関連するユーザーランド関数を指定します。
  187. </para></listitem>
  188. <listitem><para><code>setClass($class)</code>:
  189. サーバーに関連するクラスまたはオブジェクトを指定します;
  190. そのアイテムのすべてのpublicメソッドは、
  191. JSON-RPCメソッドに公開されます。
  192. </para></listitem>
  193. <listitem><para><code>fault($fault = null, $code = 404, $data =
  194. null)</code>:
  195. <classname>Zend_Json_Server_Error</classname>オブジェクトを生成して返します。
  196. </para></listitem>
  197. <listitem><para><code>handle($request = false)</code>:
  198. JSON-RPCリクエストを処理します;
  199. 任意で、利用するための<classname>Zend_Json_Server_Request</classname>オブジェクトを渡します。
  200. (デフォルトで1つ生成されます)
  201. </para></listitem>
  202. <listitem><para><code>getFunctions()</code>:
  203. 付属のメソッド全ての一覧を返します。
  204. </para></listitem>
  205. <listitem><para><code>setRequest(Zend_Json_Server_Request
  206. $request)</code>:
  207. サーバーのために使用するためのリクエストオブジェクトを指定します。
  208. </para></listitem>
  209. <listitem><para><code>getRequest()</code>:
  210. サーバーで使われるリクエストオブジェクトを取得します。
  211. </para></listitem>
  212. <listitem><para><code>setResponse(Zend_Json_Server_Response
  213. $response)</code>:
  214. サーバーのために使用するためのレスポンスオブジェクトを設定します。
  215. </para></listitem>
  216. <listitem><para><code>getResponse()</code>:
  217. サーバーで使われるレスポンスオブジェクトを取得します。
  218. </para></listitem>
  219. <listitem><para><code>setAutoEmitResponse($flag)</code>:
  220. サーバーがレスポンスとすべてのヘッダを自動的に送り出さなければならないかどうか示します;
  221. デフォルトで、これはtrueです。
  222. </para></listitem>
  223. <listitem><para><code>autoEmitResponse()</code>:
  224. レスポンスの自動送出が使用可能かどうか決定します。
  225. </para></listitem>
  226. <listitem><para><code>getServiceMap()</code>:
  227. <classname>Zend_Json_Server_Smd</classname>オブジェクトの形で
  228. サービス・マップ記述を取得します
  229. </para></listitem>
  230. </itemizedlist>
  231. </sect3>
  232. <sect3 id="zend.json.server.details.zendjsonserverrequest">
  233. <title>Zend_Json_Server_Request</title>
  234. <para>
  235. JSON-RPCのリクエスト環境は、
  236. <classname>Zend_Json_Server_Request</classname>オブジェクトにカプセル化されます。
  237. このオブジェクトによって、リクエストIDやパラメータ、JSON-RPC仕様のバージョンを含む
  238. JSON-RPCリクエストの必要な部分を設定することができます。
  239. それにはJSONまたは一組のオプションによってそれ自体をロードする能力があって、
  240. それ自体を<code>toJson()</code>メソッドによりJSONとして翻訳できます。
  241. </para>
  242. <para>
  243. リクエスト・オブジェクトでは、以下のメソッドを利用できます:
  244. </para>
  245. <itemizedlist>
  246. <listitem><para><code>setOptions(array $options)</code>:
  247. オブジェクトの設定を指定します。
  248. <code>$options</code>は、どの 'set' メソッドにもマッチするキーを含むでしょう:
  249. <code>setParams()</code>、<code>setMethod()</code>、
  250. <code>setId()</code>及び<code>setVersion()</code>
  251. </para></listitem>
  252. <listitem><para><code>addParam($value, $key = null)</code>:
  253. メソッド呼び出しで使うパラメータを追加します。
  254. パラメータは値そのものか、パラメータ名を任意に含むことができます。
  255. </para></listitem>
  256. <listitem><para><code>addParams(array $params)</code>:
  257. 一度に複数のパラメータを追加します。
  258. <code>addParam()</code>の代わりになります。
  259. </para></listitem>
  260. <listitem><para><code>setParams(array $params)</code>:
  261. 一度に全てのパラメータを設定します;
  262. 既存の全てのパラメータを上書きします。
  263. </para></listitem>
  264. <listitem><para><code>getParam($index)</code>:
  265. 位置または名前でパラメータを返します。
  266. </para></listitem>
  267. <listitem><para><code>getParams()</code>:
  268. 一度に全てのパラメータを返します。
  269. </para></listitem>
  270. <listitem><para><code>setMethod($name)</code>:
  271. 呼び出すメソッドを設定します。
  272. </para></listitem>
  273. <listitem><para><code>getMethod()</code>:
  274. 呼び出されるメソッドを取得します。
  275. </para></listitem>
  276. <listitem><para><code>isMethodError()</code>:
  277. リクエストが異常で、エラーに終わるかどうか決定します。
  278. </para></listitem>
  279. <listitem><para><code>setId($name)</code>:
  280. リクエスト識別子(クライアントでレスポンスにリクエストにマッチすることに使われる)をセットします。
  281. </para></listitem>
  282. <listitem><para><code>getId()</code>:
  283. リクエストの識別子を取得します。
  284. </para></listitem>
  285. <listitem><para><code>setVersion($version)</code>:
  286. リクエストが適合するJSON-RPC仕様バージョンを設定します。
  287. おそらく '1.0' かまたは '2.0' のどちらかです。
  288. </para></listitem>
  289. <listitem><para><code>getVersion()</code>:
  290. リクエストで使われるJSON-RPC仕様バージョンを取得します。
  291. </para></listitem>
  292. <listitem><para><code>loadJson($json)</code>:
  293. JSON文字列からリクエストオブジェクトを読み込みます。
  294. </para></listitem>
  295. <listitem><para><code>toJson()</code>:
  296. リクエストをJSONストリングに翻訳します。
  297. </para></listitem>
  298. </itemizedlist>
  299. <para>
  300. HTTPに特有のバージョンは、
  301. <classname>Zend_Json_Server_Request_Http</classname>を通して利用できます。
  302. このクラスは<code>php://input</code>を通じてリクエストを取得し、
  303. <code>getRawJson()</code>メソッドを通じて生のJSONへのアクセスを可能にします。
  304. </para>
  305. </sect3>
  306. <sect3 id="zend.json.server.details.zendjsonserverresponse">
  307. <title>Zend_Json_Server_Response</title>
  308. <para>
  309. <!-- TODO -->
  310. The JSON-RPC response payload is encapsulated in the
  311. <classname>Zend_Json_Server_Response</classname> object. This object allows
  312. you to set the return value of the request, whether or not the
  313. response is an error, the request identifier, the JSON-RPC
  314. specification version the response conforms to, and optionally
  315. the service map.
  316. </para>
  317. <para>
  318. レスポンス・オブジェクトでは、以下のメソッドを利用できます:
  319. </para>
  320. <itemizedlist>
  321. <listitem><para><code>setResult($value)</code>:
  322. レスポンス結果を設定します。
  323. </para></listitem>
  324. <listitem><para><code>getResult()</code>:
  325. レスポンス結果を取得します。
  326. </para></listitem>
  327. <listitem><para><code>setError(Zend_Json_Server_Error
  328. $error)</code>:
  329. エラーオブジェクトを設定します。
  330. 設定すると、JSONにシリアライズ化するとき、これがレスポンスとして使われます。
  331. </para></listitem>
  332. <listitem><para><code>getError()</code>:
  333. もしあれば、エラーオブジェクトを取得します。
  334. </para></listitem>
  335. <listitem><para><code>isError()</code>:
  336. レスポンスがエラー・レスポンスであるかどうか。
  337. </para></listitem>
  338. <listitem><para><code>setId($name)</code>:
  339. リクエスト識別子
  340. (クライアントはオリジナルのリクエストでレスポンスにマッチするかもしれません)
  341. を設定します。
  342. </para></listitem>
  343. <listitem><para><code>getId()</code>:
  344. リクエスト識別子を取得します。
  345. </para></listitem>
  346. <listitem><para><code>setVersion($version)</code>:
  347. レスポンスが適合するJSON-RPCバージョンを設定します。
  348. </para></listitem>
  349. <listitem><para><code>getVersion()</code>:
  350. レスポンスが適合するJSON-RPCバージョンを取得します。
  351. </para></listitem>
  352. <listitem><para><code>toJson()</code>:
  353. レスポンスがエラー・レスポンスで、エラー・オブジェクトをシリアライズ化するならば、
  354. JSONに対するレスポンスをシリアライズ化します。
  355. </para></listitem>
  356. <listitem><para><code>setServiceMap($serviceMap)</code>:
  357. サービス・マップ・オブジェクトをレスポンスに設定します。
  358. </para></listitem>
  359. <listitem><para><code>getServiceMap()</code>:
  360. もしあれば、サービス・マップ・オブジェクトを取得します。
  361. </para></listitem>
  362. </itemizedlist>
  363. <para>
  364. <!-- TODO -->
  365. An HTTP specific version is available via
  366. <classname>Zend_Json_Server_Response_Http</classname>. This class will
  367. send the appropriate HTTP headers as well as serialize the
  368. response as JSON.
  369. </para>
  370. </sect3>
  371. <sect3 id="zend.json.server.details.zendjsonservererror">
  372. <title>Zend_Json_Server_Error</title>
  373. <para>
  374. <!-- TODO -->
  375. JSON-RPC has a special format for reporting error conditions.
  376. All errors need to provide, minimally, an error message and error
  377. code; optionally, they can provide additional data, such as a
  378. backtrace.
  379. </para>
  380. <para>
  381. <!-- TODO -->
  382. Error codes are derived from those recommended by <ulink
  383. url="http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php">the
  384. XML-RPC EPI project</ulink>. <classname>Zend_Json_Server</classname>
  385. appropriately assigns the code based on the error condition. For
  386. application exceptions, the code '-32000' is used.
  387. </para>
  388. <para>
  389. <classname>Zend_Json_Server_Error</classname>
  390. は以下のメソッドを公開します:
  391. </para>
  392. <itemizedlist>
  393. <listitem><para><code>setCode($code)</code>:
  394. エラーコードを設定します;
  395. 認められたXML-RPCエラーコード範囲にそのコードがないならば、
  396. -32000が割り当てられます。
  397. </para></listitem>
  398. <listitem><para><code>getCode()</code>:
  399. 現行のエラーコードを取得します。
  400. </para></listitem>
  401. <listitem><para><code>setMessage($message)</code>:
  402. エラーメッセージを設定します。
  403. </para></listitem>
  404. <listitem><para><code>getMessage()</code>:
  405. 現行のエラーメッセージを取得します。
  406. </para></listitem>
  407. <listitem><para><code>setData($data)</code>:
  408. backtraceのような、
  409. エラーを制限する補助データをさらにセットします。
  410. </para></listitem>
  411. <listitem><para><code>getData()</code>:
  412. 現行のエラー補助データをいずれも取得します。
  413. </para></listitem>
  414. <listitem><para><code>toArray()</code>:
  415. エラーを配列にキャストします。
  416. 配列は 'code'や'message'及び'data'キーを含むでしょう。
  417. </para></listitem>
  418. <listitem><para><code>toJson()</code>:
  419. エラーをJSON-RPCエラー表現にキャストします。
  420. </para></listitem>
  421. </itemizedlist>
  422. </sect3>
  423. <sect3 id="zend.json.server.details.zendjsonserversmd">
  424. <title>Zend_Json_Server_Smd</title>
  425. <para>
  426. <!-- TODO -->
  427. SMD stands for Service Mapping Description, a JSON schema that
  428. defines how a client can interact with a particular web service.
  429. At the time of this writing, the <ulink
  430. url="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">specification</ulink>
  431. has not yet been formally ratified, but it is in use already
  432. within Dojo toolkit as well as other JSON-RPC consumer clients.
  433. </para>
  434. <para>
  435. <!-- TODO -->
  436. At its most basic, a Service Mapping Description indicates the
  437. method of transport (POST, GET, TCP/IP, etc), the request
  438. envelope type (usually based on the protocol of the server), the
  439. target URL of the service provider, and a map of services
  440. available. In the case of JSON-RPC, the service map is a list of
  441. available methods, which each method documenting the available
  442. parameters and their types, as well as the expected return value
  443. type.
  444. </para>
  445. <para>
  446. <!-- TODO -->
  447. <classname>Zend_Json_Server_Smd</classname> provides an object oriented
  448. way to build service maps. At its most basic, you pass it
  449. metadata describing the service using mutators, and specify
  450. services (methods and functions).
  451. </para>
  452. <para>
  453. <!-- TODO -->
  454. The service descriptions themselves are typically instances of
  455. <classname>Zend_Json_Server_Smd_Service</classname>; you can also pass all
  456. information as an array to the various service mutators in
  457. <classname>Zend_Json_Server_Smd</classname>, and it will instantiate a
  458. service object for you. The service objects contain information
  459. such as the name of the service (typically the function or
  460. method name), the parameters (names, types, and position), and
  461. the return value type. Optionally, each service can have its own
  462. target and envelope, though this functionality is rarely used.
  463. </para>
  464. <para>
  465. <!-- TODO -->
  466. <classname>Zend_Json_Server</classname> actually does all of this behind
  467. the scenes for you, by using reflection on the attached classes
  468. and functions; you should create your own service maps only if
  469. you need to provide custom functionality that class and function
  470. introspection cannot offer.
  471. </para>
  472. <para>
  473. <classname>Zend_Json_Server_Smd</classname>での利用可能なメソッドを含みます:
  474. </para>
  475. <itemizedlist>
  476. <listitem><para><code>setOptions(array $options)</code>:
  477. オプション配列からSMDオブジェクトをセットアップします。
  478. ミューテーターのすべてを、キーとして使うことができます。
  479. (メソッドは 'set' で始まります)
  480. </para></listitem>
  481. <listitem><para><code>setTransport($transport)</code>:
  482. サービスにアクセスするために使われるトランスポートを設定します;
  483. 現行では POST だけがサポートされます。
  484. </para></listitem>
  485. <listitem><para><code>getTransport()</code>:
  486. 現行のサービストランスポートを取得します。
  487. </para></listitem>
  488. <listitem><para><code>setEnvelope($envelopeType)</code>:
  489. サービスにアクセスするために使われるであろうリクエスト・エンベロープを設定します。
  490. 現行では定数の
  491. <classname>Zend_Json_Server_Smd::ENV_JSONRPC_1</classname>及び
  492. <classname>Zend_Json_Server_Smd::ENV_JSONRPC_2</classname>をサポートします。
  493. </para></listitem>
  494. <listitem><para><code>getEnvelope()</code>:
  495. 現行のリクエスト・エンベロープを取得します。
  496. </para></listitem>
  497. <listitem><para><code>setContentType($type)</code>:
  498. リクエストが使うであろうコンテンツタイプを設定します。
  499. (デフォルトでは、これは 'application/json' です)
  500. </para></listitem>
  501. <listitem><para><code>getContentType()</code>:
  502. サービスにリクエストするための、現行のコンテンツタイプを取得します。
  503. </para></listitem>
  504. <listitem><para><code>setTarget($target)</code>:
  505. サービスのためのURLエンドポイントを設定します。
  506. </para></listitem>
  507. <listitem><para><code>getTarget()</code>:
  508. サービスのためのURLエンドポイントを取得します。
  509. </para></listitem>
  510. <listitem><para><code>setId($id)</code>:
  511. 一般的に、(ターゲットと同じく)これはサービスのURLエンドポイントです。
  512. </para></listitem>
  513. <listitem><para><code>getId()</code>:
  514. サービスIDを取得します。
  515. (一般的に、サービスのURLエンドポイントです)
  516. </para></listitem>
  517. <listitem><para><code>setDescription($description)</code>:
  518. サービスの定義を設定します。
  519. (一般的に、サービスの目的を説明する物語の情報です)
  520. </para></listitem>
  521. <listitem><para><code>getDescription()</code>:
  522. サービスの定義を取得します。
  523. </para></listitem>
  524. <listitem><para><code>setDojoCompatible($flag)</code>:
  525. SMDがDojoツールキットと互換かどうか示すフラグを設定します。
  526. trueの場合、生成されたJSON SMDは、
  527. DojoのJSON-RPCクライアントが期待する形式に従ってフォーマットされます。
  528. </para></listitem>
  529. <listitem><para><code>isDojoCompatible()</code>:
  530. Dojo互換性フラグの値を返します。
  531. (デフォルトではfalseです)
  532. </para></listitem>
  533. <listitem><para><code>addService($service)</code>:
  534. マップするサービスを追加します。
  535. <classname>Zend_Json_Server_Smd_Service</classname>のコンストラクタに渡す情報の配列か、
  536. またはそのクラスのインスタンスでしょう。
  537. </para></listitem>
  538. <listitem><para><code>addServices(array $services)</code>:
  539. 一度に複数のサービスを追加します。
  540. </para></listitem>
  541. <listitem><para><code>setServices(array $services)</code>:
  542. 一度に複数のサービスを設定します。
  543. 以前に設定されたサービスを全て上書きします。
  544. </para></listitem>
  545. <listitem><para><code>getService($name)</code>:
  546. 名前でサービスを取得します。
  547. </para></listitem>
  548. <listitem><para><code>getServices()</code>:
  549. 付属のサービスを全て取得します。
  550. </para></listitem>
  551. <listitem><para><code>removeService($name)</code>:
  552. マップからサービスを除去します。
  553. </para></listitem>
  554. <listitem><para><code>toArray()</code>:
  555. サービスマップを配列にキャストします。
  556. </para></listitem>
  557. <listitem><para><code>toDojoArray()</code>:
  558. サービスマップをDojoツールキット互換の配列にキャストします。
  559. </para></listitem>
  560. <listitem><para><code>toJson()</code>:
  561. サービスマップをJSON表現にキャストします。
  562. </para></listitem>
  563. </itemizedlist>
  564. <para>
  565. <classname>Zend_Json_Server_Smd_Service</classname>には下記のメソッドがあります:
  566. </para>
  567. <itemizedlist>
  568. <listitem><para><code>setOptions(array $options)</code>:
  569. 配列からオブジェクトの状態を設定します。
  570. どのミューテーター(メソッドは 'set' で始まります)でもキーとして使われ、
  571. このメソッドを通じて設定されるでしょう。
  572. </para></listitem>
  573. <listitem><para><code>setName($name)</code>:
  574. サービス名を設定します。
  575. (一般的には、関数やメソッドの名前)
  576. </para></listitem>
  577. <listitem><para><code>getName()</code>:
  578. サービス名を取得します。
  579. </para></listitem>
  580. <listitem><para><code>setTransport($transport)</code>:
  581. サービスのトランスポートを設定します。
  582. (現行では、<classname>Zend_Json_Server_Smd</classname>によりサポートされる
  583. トランスポートのみ許可されます)
  584. </para></listitem>
  585. <listitem><para><code>getTransport()</code>: Retrieve the
  586. current transport.</para></listitem>
  587. <listitem><para><code>setTarget($target)</code>:
  588. サービスのURLエンドポイントを設定します。
  589. (一般的には、
  590. <!-- TODO -->
  591. this will be the
  592. same as the overall SMD to which the service is
  593. attached).</para></listitem>
  594. <listitem><para><code>getTarget()</code>:
  595. サービスのURLエンドポイントを取得します。
  596. </para></listitem>
  597. <listitem><para><code>setEnvelope($envelopeType)</code>:
  598. サービスのエンベロープタイプを設定します。
  599. (現行では、<classname>Zend_Json_Server_Smd</classname>によりサポートされる
  600. エンベロープのみ許可されます)
  601. </para></listitem>
  602. <listitem><para><code>getEnvelope()</code>:
  603. サービスのエンベロープタイプを取得します。
  604. </para></listitem>
  605. <listitem><para><code>addParam($type, array $options = array(),
  606. $order = null)</code>:
  607. <!-- TODO -->
  608. Add a parameter to the
  609. service. By default, only the parameter type is
  610. necessary. However, you may also specify the order, as
  611. well as options such as:</para>
  612. <itemizedlist>
  613. <listitem><para><emphasis>name</emphasis>:
  614. パラメータ名
  615. </para></listitem>
  616. <listitem><para><emphasis>optional</emphasis>:
  617. パラメータが任意か否か
  618. </para></listitem>
  619. <listitem><para><emphasis>default</emphasis>:
  620. パラメータの既定値
  621. </para></listitem>
  622. <listitem><para><emphasis>description</emphasis>:
  623. パラメータを記述するテキスト
  624. </para></listitem>
  625. </itemizedlist>
  626. </listitem>
  627. <listitem><para><code>addParams(array $params)</code>:
  628. <!-- TODO -->
  629. Add
  630. several parameters at once; each param should be an assoc
  631. array containing minimally the key 'type' describing the
  632. parameter type, and optionally the key 'order'; any other
  633. keys will be passed as <code>$options</code> to
  634. <code>addOption()</code>.</para></listitem>
  635. <listitem><para><code>setParams(array $params)</code>:
  636. 一度に複数のパラメーターを設定します。
  637. 既存のパラメータを全て上書きします。
  638. </para></listitem>
  639. <listitem><para><code>getParams()</code>:
  640. 現行で設定されているパラメータを全て取得します。
  641. </para></listitem>
  642. <listitem><para><code>setReturn($type)</code>:
  643. サービスの返り値の型を設定します。
  644. </para></listitem>
  645. <listitem><para><code>getReturn()</code>:
  646. サービスの返り値の型を取得します。
  647. </para></listitem>
  648. <listitem><para><code>toArray()</code>:
  649. サービスを配列にキャストします。
  650. </para></listitem>
  651. <listitem><para><code>toJson()</code>:
  652. サービスをJSON表現にキャストします。
  653. </para></listitem>
  654. </itemizedlist>
  655. </sect3>
  656. </sect2>
  657. </sect1>
  658. <!--
  659. vim:se ts=4 sw=4 et:
  660. -->