llwebsol/rapid

一个简单且极简的php API框架

v3.0.0 2019-07-11 15:34 UTC

This package is auto-updated.

Last update: 2024-09-20 01:27:52 UTC


README

Build Status Latest Stable Version Scrutinizer Code Quality Code Intelligence Status

Total Downloads License

rAPId

一个简单且极简的php API框架

入门

创建名为 YourProject 的项目

  1. 为您的项目创建一个空目录并进入该目录

  2. 使用 $ composer init 设置您的项目(需要 composer)。

  3. 添加到您的 composer.json

    "require": {
        "llwebsol/rapid": "^3.0"
    },

    "scripts": {
        "post-update-cmd": "vendor/bin/rAPId"
    },
    
    "autoload": {
        "psr-4": {
            "YourProject\\": "src/"
        }
    }

现在运行 composer update,必要的文件将自动添加到您的项目根目录。

Docker

默认的 Dockerfile 和 docker-compose.yml 将被添加到您的根目录。您可以按需编辑这些文件,或者使用 docker-compose up 启动默认的Docker环境。您的应用程序将在 localhost:5000 上可用

控制器

将新文件添加到新添加的 Controllers 目录(它可能在 src/Controllers 中)

示例默认控制器

(src/Controllers/Main.php):

    <?php

    namespace YourProject\Controllers;

    use rAPId\Foundation\Controller;

    class Main implements Controller
    {
        /**
         * @return mixed
         */
        public function index(){

        }
    }

除非您添加另一个控制器或方法,否则所有路由都将指向主控制器中的 index 方法

接下来更新您的 rAPIdConfig.php

       'default_controller' => YourProject\Controllers\Main::class,

添加路由

通过添加新的控制器和新的控制器方法,可以向项目中添加路由。

示例:如果您导航到 http://www.your-project-url.com,则将触发 Main::index() 函数。

如果您要在主控制器中添加名为 doSomething() 的函数,则导航到 your-project-url/do-something(或者如果您更喜欢下划线,则为 your_project_url/do_something

您也可以通过添加新的控制器来添加新的路由

示例: (src/Controllers/SomethingElse.php)

<?php
    namespace YourProject\Controllers;

    use rAPId\Foundation\Controller;

    class SomethingElse implements Controller
    {
        public function index(){
            return 'You are in the Index';
        }

        public function anotherThing(){
            return 'You are in Another Thing';
        }

    }

现在,导航到 http://www.your-project-url.com/something-else 将渲染 "您在索引中"

而导航到 http://www.your-project-url.com/something-else/another-thing/ 将渲染 "您在 Another Thing"

输入

您可以在公共控制器方法中指定输入参数。

例如,如果您要将以下函数添加到 YourProject\Controllers\SomethingElse

    public function getData($a_var = 'Not Defined', $another_var = 'Not Defined'){
        return [
            'A Var' => $a_var,
            'Another Var' => $another_var
        ];
    }

有三种方式接收输入。

1:

您可以直接通过URL接收数据

http://www-your-project-url.com/something-else/get-data/11/76

{
    "A Var": 11,
    "Another Var": 76
}

2:

您可以通过查询参数接收数据(仅通过GET请求)

http://www-your-project-url.com/something-else/get-data?another_var=76&a_var=11

{
    "A Var": 11,
    "Another Var": 76
}

注意 顺序无关紧要,但参数将被映射到函数中的名称。如果您的查询字符串包含在函数中未定义的键,则将忽略它

http://www-your-project-url.com/something-else/get-data?another_var=76&an_undefined_var=11

{
  "A Var": "Not Definied",
  "Another Var": 76
}

3:

您可以通过POST参数接收数据

示例

http://www-your-project-url.com/something-else/get-data 发送POST请求

带有参数 ['a_var' => 11, 'another_var' => 76]

将输出

{
    "A Var": 11,
    "Another Var": 76
}

与带有查询参数的GET请求类似,未定义的参数键将被忽略

注意事项

  • 您可以将URL参数与GET或POST参数混合……尽管您可能不应该这样做
    • http://www-your-project-url.com/something-else/get-data/76?a_var = 11 将将 $a_var = 11 传递给函数,并将下一个开放的参数传递值 76。
      {
          "A Var": 11,
          "Another Var": 76
      }
      
      因此,没有查询字符串的相同URL将传递 $a_var = 76 到函数
      {
          "A Var": 76,
          "Another Var": "Not Definied"
      }
      
    • 这对于POST参数也是相同的
  • 因此,对于POST请求,将忽略查询字符串
    • 因此,向 http://www-your-project-url.com/something-else/get-data?a_var=11&another_var=76 发送的POST请求,如果没有在POST中提供任何数据,将输出
    {
        "A Var": "Not Definied",
        "Another Var": "Not Defined"
    }
    

输出

从控制器返回的任何内容都将进行序列化,并以正确的头部返回给用户

如果你的控制器方法中没有返回任何内容,那么将不会以这种方式输出。如果你想要提供图片,请自行处理图片的输出,并不要从你的控制器中返回任何内容

你的API返回的序列化输出类型由你的 rAPIdConfig.php 文件中的 output_serializer 变量决定

目前支持JSON和XML。如果你想要输出其他类型的数据,你可以编写自己的序列化器,该序列化器实现 rAPId\Data\Serialization\Serializer 接口,然后可以自由地提交拉取请求!

数据库

rAPId 使用 llwebsol/EasyDB 包来进行简单的数据库交互

应该在项目根目录中放置一个 .env.example 文件。将此文件复制到 .env,然后用你的数据库凭证覆盖,显然,不要将此文件提交到版本控制中

你现在可以通过调用辅助函数来访问EasyDB的一个实例

    $db = db();

数据库事件监听器

你可以通过创建一个实现了 EasyDb\Events\Listener 接口的类来使用EasyDB的事件系统,然后在你的 config/database.php 中注册该监听器

示例

例如,如果你创建了一个用于更新每个数据库插入/更新的 modified_user 的监听器类

    'listeners' => [
        ...
        Event::BEFORE_SAVE  => [
            MyModifiedUserListener::class
        ],
        ...
    ]

多个数据库连接

如果你需要连接到另一个数据库,请在 .env 中添加你的新凭证

示例

...
SECONDARY_DB_HOST=mydb.path.com
SECONDARY_DB_NAME=another_db

SECONDARY_DB_USER=xyz
SECONDARY_DB_PASSWORD=123

然后更新你的 config/database.php

        'primary' => [
            'db_type'                     => env('DB_TYPE','mysql'),
            'host'                        => env('DB_HOST'),
            'db_name'                     => env('DB_NAME'),
            'port'                        => env('DB_PORT'),
            'user'                        => env('DB_USER'),
            'password'                    => env('DB_PASSWORD'),
        ],

        'secondary' => [
            'db_type'                     => env('SECONDARY_DB_TYPE','mysql'),
            'host'                        => env('SECONDARY_DB_HOST'),
            'db_name'                     => env('SECONDARY_DB_NAME'),
            'port'                        => env('SECONDARY_DB_PORT'),
            'user'                        => env('SECONDARY_DB_USER'),
            'password'                    => env('SECONDARY_DB_PASSWORD'),
        ]

请注意,默认情况下,db() 辅助函数将返回主数据库的连接。

要连接到上面的示例中的 "secondary"

$db = db('secondary');

其他

抛出 InvalidUrlException 将显示你的默认404页面。一旦你设置了一个默认控制器,所有无效的路由将通过该类中的 index() 方法。如果你不希望某些内容为某个随机的URL渲染,那么考虑在你的默认控制器索引中抛出此异常

示例

    class Main extends Controller{
        public function index(){
            throw new InvalidURLException();
        }

        public function test($x){
            return ['x' => $x];
        }
    }

my-site.com/xyz 将返回404响应,而 my-site.com/test 将返回有效的响应

初始化

rAPId 还会将 initialize.php 文件解压缩到你的根目录中。你可以在该文件中放置任何初始化代码。