0

PHP XML-RPC / JSON-RPC クライアントとサーバーで XML-RPC と JSON-RPC の例やチュートリアルを探しています

誰か教えてくれませんか?

ありがとうございました?申し訳ありませんが、私の英語はうまくありません。

4

3 に答える 3

0

json-rpc サービスを実装する最善の方法は、Zend コンポーネント Zend_Json_Server を使用することだと思います。

したがって、Zend_Json コンポーネントを使用して json-rpc サービスを php に実装することをお勧めします。Zend フレームワークでは、そのコンポーネントを「すぐに」使用できます。したがって、次のような構造を実行できます。

Project
   |
   ------libs/Zend
                |
                -----Json/
                       |
                       -----Server/
                |
                -----Loader.php

そして、次のようなものを実装します。

<?php

  // path to dir with Zend root
  set_include_path(__DIR__ . "/libs");
  // path to Zend loader
  require_once __DIR__ . "/libs/Zend/Loader.php";

  Zend_Loader::loadClass('Zend_Json_Server');

  $server = new Zend_Json_Server();
  $server->setClass('Service');

  /**
   * Service Implementation
   */
  class Service
  {
      public function __construct()
      {
        // init some service attributes ...
      }

      /**
       * example of api method exposed by service
       * return "hello world" message
       * @param $domain
       * @return object (json)
       */
       public function helloworld()
       {
            $aOut = array('msg' => 'hello world');
            return json_encode($aOut);
       }

       // ... other methods of the service

 }

try {
    $output = $server->handle();
    echo $output;
} catch (Exception $e) {
    echo  ($e->getMessage());
    //header('HTTP/1.1 400 BAD REQUEST');
    exit();
}

クライアントについては、ポスト リクエストで次のような json メッセージを送信できます。

{ 
    "jsonrpc": "2.0", 
    "method": "helloworld", 
    "params": {}, 
    "id": 1 
}

この投稿Send json post using phpでは、curl または Http Zend モジュールを介した json リクエストの例をいくつか見ることができます。

于 2014-04-15T16:24:28.827 に答える
0

RPC プロトコルに vdata を使用します: http://vdata.dekuan.org/

1、PHPとJavaScriptはどちらもOKです。

2, クロスオリジン リソース共有 (CORS) 呼び出しは引き続き問題ありません。

PHP : クライアントでサービスを呼び出す

    dekuan\vdata\CConst を使用します。
    dekuan\vdata\CRequest を使用します。


    $cRequest = CRequest::GetInstance();
    $arrResp = [];
    $nCall = $cRequest->Post
    (
        [
            'url' => 'http://api-account.dekuan.org/login',
            'データ' =>
            [
                'u_name' => 'ユーザー名',
                'u_pwd' => 'パスワード',
                'u_keep' => 1
            ]、
            'version' => '1.0', // サービスの必要なバージョン
            'timeout' => 30, // 秒単位のタイムアウト
            'cookie' => [], // 配列でも文字列でもどちらでもかまいません。
        ]、
        $arrResp
    );
    if ( CConst::ERROR_SUCCESS == $nCall &&
        $cRequest->IsValidVData( $arrResp ) )
    {
        // arrResp
        // 'errorid' : エラー ID
        // 'errordesc' : エラーの説明
        // 'vdata' : 仮想データ
        // 'version' : サービスのインサービス バージョン
        // 'json' : 元の json 配列
        print_r( $arrResp );
    }

PHP : サーバーでクライアントに応答する

    dekuan\vdata\CResponse を使用します。


    $cResponse = CResponse::GetInstance();

    $cResponse->SetServiceName( 'vdata プロトコル サービス' );
    $cResponse->SetServiceUrl( 'http://vdata.dekuan.org/vdata' );
    $cResponse->送信
    (
        0, // エラー ID
        "error desc", // エラーの説明
        [ "info" => "..." ], // カスタマイズされた情報
        '1.0' // サービスのインサービス バージョン
    );

于 2016-10-30T16:27:50.380 に答える