jswh/rpc

一个简单的类似RPC的API服务包

0.2 2017-06-30 05:53 UTC

This package is not auto-updated.

Last update: 2024-09-18 19:39:01 UTC


README

安装

composer require jswh/rpc

使用默认应用程序快速入门

index.php

    <?php
    require __DIR__ . '/vendor/autoload.php';
    $app = new \RPC\Application('Api');
    echo $app->run();

您的API文件

    <?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

调用API

https://: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));
    }