这个小框架适合写一些业务不那么重的小工具,简单快速,直接。自己把它用在 BAE 上放一些自己的服务。贴一下 readme 吧。
composer require jswh/rpc
<?php
require __DIR__ . '/vendor/autoload.php';
$app = new \RPC\Application('Api');
echo $app->run();
<?php
namesapce Api;
class Hello
{
/**
* @httpMethod GET
* @param string $name
* @return void
*/
public function hello($name) {
return 'Hello ' . $name . ' !'
}
}
php -S localhost:8000 index.php
http://localhost:8000/Hello.hello?name=world
<?php
class MyParser implements RPC\interfaces\ProcedureParser {
public function parse($path) {
preg_match("/(\w+)\.(\w+)$/", $_SERVER['REQUEST_URI'], $matches);
if (count($matches) !== 3) {
return null;
}
$p = new Procedure('MyApi', $matches[1], $matches[2]);
return $p;
}
}
<?php
Annotation::registerMeta('method', 'GET|PUT|POST');
$parser = new MyParser
$procedure = $parser->parse(null);
$annotation = new Annotation($procedure->getClass(), $procedure->method);
$method = $annotation->meta('method');
if ($method && $method !== $_SERVER['HTTP_METHOD']) {
header('', true, 404);
} else {
if ($method === "GET") {
$params = $_GET;
} else {
$params = array_merge($_POST, $_GET);
}
header('Content-Type: application/json');
return json_encode($procedure->call($params));
}