develings/api-x

使用简单的JSON文件创建一个完整的API。

0.0.2 2022-02-18 08:22 UTC

README

Logo

Build Status Total Downloads Latest Stable Version License

请注意

此包仍在积极开发中,并且可能随着每个更新包含破坏性更改。

关于

仅使用简单的JSON文件创建一个完整的API。

搜索

搜索应该简单易用

{ "name": "string|search:like" },
{ "description": "string|search:like_left" },
{ "description": "string|search:like_right" },
{ "uuid": "string|search:equal" },

简单示例

{
    "name": "App",
    "version": "1.0",
    "description": "A demo application using the ApiX library",
    "endpoint": "/api/v1.0/",
    "authentication": "token:users,api_key",
    "events": true,
    "db": {
        "driver": "mariadb",
        "prefix": "app_test_"
    },
    "servers": [
        {
            "url": "http://app.test"
        },
        {
            "url": "https://someId.execute-api.eu-central-1.amazonaws.com/dev"
        }
    ],
    "api": [
        {
            "name": "device",
            "timestamps": true,
            "soft_deletes": true,
            "identifier": "uuid",
            "sort_key": "created_at",
            "per_page": 10,
            "fields": {
                "uuid": "string|primary|default:uuid",
                "device_id": "string:64|unique",
                "last_active_at": "datetime|index|on_update_fill:datetime",
                "device_user_id": "uuid|nullable",
                "api_key": "string|default:alphanumeric,36"
            },
            "relations": {
                "user": "belongsTo:users"
            }
        }
    ]
}

我们目前支持正常的laravel DB驱动程序。

此定义将创建一个OpenAPI规范路由以及一个用于设备表的迁移,包括其端点。

需要做的只是实例化API类。

安装

您只需要引入composer包,就完成了。

composer install develings/api-x

在项目的根目录中创建api.json文件。

php artisan api:make

实例化

// add this to config/app.php
'providers' => [
    ...
    \ApiX\ApiXServiceProvider::class,
],

// add the route (e.g. routes/web.php)
$api = new ApiX\ApiX(base_path('api.json'));
$api->setRoutes();

模拟数据

由于我们从api.json文件中获得了所有需要的定义,因此还可以使用faker包填充测试数据。即将推出

计划功能

使用路由语法从PHP中获取代码而不是从api.json中获取。例如

{
    "api": [
        "@App\\ApiX\\DeviceAPI",
        "@App\\ApiX\\UserAPI:getDefinition",
        {
            "name": "company",
            "fields": "@App\\ApiX\\CompanyAPI:getFields"
        }
    ]
}