爱意满满的作品展示区。
jswh

又一个写玩具用的框架

  •  1
     
  •   jswh · Jun 30, 2017 · 3118 views
    This topic created in 3239 days ago, the information mentioned may be changed or developed.
    https://github.com/jswh/rpc
    基本上是类似写原生 PHP 的体验了
    Supplement 1  ·  Jun 30, 2017

    这个小框架适合写一些业务不那么重的小工具,简单快速,直接。自己把它用在 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 replies    2017-06-30 14:31:00 +08:00
    orderc
        1
    orderc  
       Jun 30, 2017 via iPhone
    这是啥
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3008 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:19 · PVG 23:19 · LAX 08:19 · JFK 11:19
    ♥ Do have faith in what you're doing.