nailfor/shazam-api

快速API开发

v0.1.8 2024-09-06 14:25 UTC

This package is not auto-updated.

Last update: 2024-09-20 14:40:32 UTC


README

此库允许API开发者以极简的方式快速创建API。

特性

所有模型都继承自 Illuminate\Database\Eloquent\Model,因此大多数方法都是原生支持的。

安装

安装此扩展的首选方式是通过composer

运行以下命令之一:

composer require nailfor/shazam-api

配置

添加 config/app.php

    'providers' => [
        ...
        nailfor\shazam\API\Providers\RouteServiceProvider::class,
    ];

config/shazam.php

<?php

use nailfor\shazam\Http\Controllers\Controller;
use nailfor\shazam\API\Models\Paginator;

return [
    'namespace' => 'App',
    'path' => 'Http/Controllers',
    'routes' => [
        //there is subdirectory of Http/Controllers for routing
        'API',
    ],
    'paginator' => Paginator::class,
    'pages' => [
        'perPage' => 'per_page',
        'page' => 'page',
    ],

    'debug' => env('SQL_DEBUG', false),
];

用法

基本用法

仓库

  • 在您的应用中创建目录 Repositories\API
  • 添加 UserRepository.php 如下
<?php

namespace App\Repositories\API;

use App\Models\User;
use nailfor\shazam\API\Repositories\APIRepository;

class UserRepository extends APIRepository
{
    protected static string $model = User::class;
}

控制器

  • 在 Http/Controllers 目录中创建子目录 API
  • 添加 UserController.php 如下
<?php

namespace App\Http\Controllers\API;

use App\Repositories\API\UserRepository;
use nailfor\shazam\API\Http\Controllers\ApiController;

class UserController extends ApiController
{
    public function __construct(UserRepository $model)
    {
        parent::__construct($model);
    }
}

您可以使用以下方式为控制器指定规则:

class UserController extends ApiController
{
    //By default can't store and destroy
    protected array $can = [
        'store',
    ];

    //By default can index and show
    protected array $cant = [
        'index',
        'show',
    ];
    ...
}

请求验证

  • 在 Http/Requests 目录中创建子目录
  • 添加请求文件,或者直接运行 ./artisan make:request StoreRequest

StoreRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
     */
    public function rules(): array
    {
        return [
            'id' => 'required',
        ];
    }

    public function messages(): array
    {
        return [
            'id.required' => 'Id is require',
        ];
    }
}

现在您可以像这样编辑控制器类

class UserController extends ApiController
{
    protected static array $requests = [
        'store' => StoreRequest::class,
    ];
    ...
}

当 'store' 是Laravel CRUD操作之一(index, show, store, destroy)时

  • 编辑 app\Http\Kernel.php,找到 "protected $middlewareGroups = [...]" 并添加到每个
    \nailfor\shazam\API\Http\Middleware\RequestValidator::class,

之后,您可以进行如下请求:http::///api/user

鸣谢

许可证

GNU许可证(GNU)。请参阅许可证文件获取更多信息。