V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jswh
V2EX  ›  分享创造

又一个写玩具用的框架

  •  1
     
  •   jswh · 2017-06-30 14:21:20 +08:00 · 2463 次点击
    这是一个创建于 2463 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/jswh/rpc
    基本上是类似写原生 PHP 的体验了
    第 1 条附言  ·  2017-06-30 17:45:26 +08:00

    这个小框架适合写一些业务不那么重的小工具,简单快速,直接。自己把它用在 BAE 上放一些自己的服务。贴一下 readme 吧。

    Make Things Simple

    installation

    composer require jswh/rpc
    

    quick start with default application

    index.php

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

    your api file

        <?php
        namesapce Api;
        
        class Hello
        {
            /**
             * @httpMethod GET
             * @param string $name
             * @return void
             */
            public function hello($name) {
                return 'Hello ' . $name . ' !'
            }
        }
    

    start application

    php -S localhost:8000 index.php
    

    call api

    http://localhost:8000/Hello.hello?name=world
    

    write your own

    procedure parser

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

    logic

        <?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));
        }
    
    1 条回复    2017-06-30 14:31:00 +08:00
    orderc
        1
    orderc  
       2017-06-30 14:31:00 +08:00 via iPhone
    这是啥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3266 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:11 · PVG 22:11 · LAX 07:11 · JFK 10:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.