phalapi/phprpc

PhalApi 2.x 扩展类库:PHPRPC

dev-master 2019-09-06 02:20 UTC

This package is not auto-updated.

Last update: 2022-01-20 21:48:59 UTC


README

PhalApi 2.x扩展类库,基于PHPRPC的扩展。

安装和配置

修改项目下的composer.json文件,并添加:

    "phalapi/phprpc":"dev-master"

然后执行composer update

使用

为了使用PHPRPC协议而非HTTP协议,需要提供新的入口。可以编写新的./public/index_phprpc.php入口:

<?php
/**
 * 统一访问入口 - PHPRPC专用
 */

require_once dirname(__FILE__) . '/init.php';

$server = new PhalApi\PHPRPC\Lite();
$server->response();

示例

这里以?s=App.Site.Index为例进行说明。

(1)浏览器访问失败

在使用了phprpc协议后,我们再以浏览器(HTTP协议)访问调用新接口时,如:

http://localhost/phalapi/public/phprpc_index.php

会预期地出现以下失败信息:

phprpc_functions="YToxOntpOjA7czo4OiJyZXNwb25zZSI7fQ==";

(2)通过phprpc协议调用

如果通过phprpc协议调用,我们则可以得到接口返回的 源数据
假设请求的接口为:?s=App.Site.Index,则可以得到我们熟悉的:

array(3) {
  ["ret"]=>
  int(200)
  ["data"]=>
  array(3) {
    ["title"]=>
    string(13) "Hello PhalApi"
    ["version"]=>
    string(5) "2.5.2"
    ["time"]=>
    int(1554284952)
  }
  ["msg"]=>
  string(0) ""
}

phprpc协议调试

为了方便进行phprpc协议下接口调用的调试,我们提供了一个脚本小工具。

Usage为:

$ php ./vendor/phalapi/phprpc/bin/check.php 
Usage: ./vendor/phalapi/phprpc/bin/check.php <url> [POST data]

如上面的对?s=App.Site.Index调用,使用脚本即为:

$ php ./vendor/phalapi/phprpc/bin/check.php http://localhost/phalapi/public/phprpc_index.php?s=App.Site.Index

array(3) {
  ["ret"]=>
  int(200)
  ["data"]=>
  array(3) {
    ["title"]=>
    string(13) "Hello PhalApi"
    ["version"]=>
    string(5) "2.5.2"
    ["time"]=>
    int(1554284952)
  }
  ["msg"]=>
  string(0) ""
}

对客户端的调整

虽然服务端不需要作出太多的改动,但对于客户端来说,仍然需要进行三方面的调整以进行phprpc协议的调用以及参数的传递和返回结果的获取。

现分说如下。

(1)调用方式的改变

首当其冲的就是调用方式的改变,但值得开心的是,phprpc对很多语言都有支持。具体可以查看phprpc官网。

(2)POST参数传递方式的改变

其次对POST参数传递的改变。考虑到phprpc协议中对POST的数据有一定的复杂性,这里统一作了简化。 正如我们下面的代码所示:

    public function response($params = NULL) {
        $paramsArr = json_decode($params, TRUE);
        if ($paramsArr !== FALSE) {
            \PhalApi\DI()->request = new Request(array_merge($_GET, $paramsArr));
        } else {
            \PhalApi\DI()->request = new Request($_GET);
        }

        $rs = $this->phalapi->response();

        return $rs->getResult();
    }

我们约定: 通过第一个参数用JSON格式来传递全部原来需要POST的数据

当POST的数据和GET的数据冲突时,以POST为准。

所以,相应地,当需要传递POST参数时,客户需要这样调整(如PHP下):

$client->response(json_encode($params)))

如无此POST参数,则可以忽略不传。

(3)返回结果格式的改变

最后,就是返回结果格式的改变。

在phprpc协议下,因为可以更轻松地获取接口返回的源数据,所以这里也同样不再通过字符串流式的序列返回(如原来的JSON或XML),而是直接返回接口的 源数据 。如上面示例中所看到的结果一样。

这点,需要特别注意。

参考

phprpc官网:http://www.phprpc.org/zh_CN/