pablito/structure

RestApis环境的基礎結構

1.11 2019-06-28 13:09 UTC

README

Structure Basic 是一個 Laravel 的組件。它允許我們創建一個基礎結構並從配置文件生成 RestApis。

內容表

安裝

Composer

運行以下命令以下載最新版本

composer require pablito/structure

Laravel

>= laravel5.5

ServiceProvider 將會自動載入

< laravel5.5

在您的 config/app.php 中,將 Structure\Basic\StructureServiceProvider::class 添加到 providers 數組的末尾

'providers' => [
    ...
    Structure\Basic\StructureServiceProvider::class,
],

如何工作?

配置文件

您首先會在配置文件(config/structure.php)中看到這些內容

return [  
  /* Default Paths */
  'paths' => [
      'contracts'    => 'App\Contracts\\',
      'models'       => 'App\Models\\',
      'observers'    => 'App\Observers',
      'repositories' => 'App\Repositories\\',
      'services'     => 'App\Services\\',
      'jobs'         => 'App\Jobs\\',
      'controller'   => 'App\Http\Controllers\API\\',
      'requests'     => 'App\Http\Requests\API\\',
      'resources'    => 'App\Http\Resources\\',
  ],  
  
  /* Component Options */
  'replace_all'        => false,

  /* Your services here */
  'services' => [
  ],

  /* Your routes structure here (3 levels) */
  'routes' => [
    ['prefix' => '', 'middleware' => ['cors']], // level 1
    ['prefix' => '', 'middleware' => []], // level 2
    ['prefix' => '', 'middleware' => []] // level 3
  ],

  /* Example Syntax */
  'routes_example' => [
    ['prefix' => 'level-name1', 'middleware' => ['cors']], // level 1
    ['prefix' => 'level-name2', 'middleware' => []], // level 2
    ['prefix' => 'level-name3', 'middleware' => []] // level 3
  ],

  /* Example Syntax */
  'services_example' => [
    'services_name' => [
      'fillables'        => ["param1", "param2"],
      'fieldSearcheable' => ["param1" => "like"],
      'resources'        => ['param1', 'param2', 'param3'],
      'routes'           => ['index', 'store', 'update'],
      'rules_store'      => [],
      'rules_update'     => [],
      'observer'         => FALSE
    ]
  ]
];

默認路徑

這裡是組件使用的默認資料夾結構。建議保持原樣,但也可以進行修改。必須存在且不可選的是所有配置的 path。

組件選項

  • replace_all => boolean /* 如果是 true,當運行主要命令時,將替換所有已存在的服務器檔案。如果為 false,則只創建不存在的檔案。 */

路由

當前版本和穩定版中,有 3 級別(數量不可選)。此部分配置哪些是前綴以及是否需要某些中間件。這部分的功能相對有限。但您可以設置 replace_all 為 false 并創建自己的 api.php 文件。

  • prefix => string
  • middleware => array()

服務(範例)

在這部分配置我們的服務,例如:如果需要創建一個返回數據庫角色 JSON 的 API,可以這樣配置我的服務:

範例

  'services' => [
    'roles' => [
      'fillables'         => ["name", "country_name"],
      'fieldSearcheable'  => ["name" => "like", "country_name"],
      'resources'         => ['id', 'name', 'country_name'],
      'routes'            => ['index'],
      'rules_store'       => [],
      'rules_update'      => [],
      'observer'          => FALSE
    ]
  ]

結果

可以使用兩種方式使用它

  • 使用請求:http://structure.local/api/prefix1/prefix2/prefix3/roles
{
  "data": [
    {
      "id": "1",
      "name": "Admin",
      "country_name": "Argentina"
    },
    {
      "id": "2",
      "name": "Supervisor",
      "country_name": "Chile"
    }
  ]
}

要了解如何過濾需要返回的字段或根據特定的 name 過濾,請參考:範例存儲庫

  • 如果您想從您的代碼中的某個地方使用它,您需要宣佈您所使用的服務接口的用法。我們看一個例子
    namespace App\Http\Controllers\API;
    use App\Http\Controllers\Controller;
    use App\Http\Resources\RoleResource;
    use App\Contracts\RoleInterface;  
    
    class RoleController extends Controller
    {
        public function __construct( RoleInterface $role ){
            $this->role = $role;
        }

        public function index(){
            return RoleResource::collection( $this->role->index() );
        }
    }

說明:接口名稱將從這:nombre_servicio_en_ingles_plural(配置文件中的服務名稱)變為這:NombreServicioEnInglesSingularInterface

服務(結構)

'services' => [
    'service_name' => [
      'fillables'        => ["param1", "param2"],
      'fieldSearcheable' => ["param1" => "like"],
      'resources'        => ['param1', 'param2', 'param3'],
      'routes'           => ['index', 'store', 'update'],
      'rules_store'      => [],
      'rules_update'     => [],
      'observer'         => FALSE
    ]
  ]
  • service_name:您的服務名稱(或數據庫中的表名),最好使用英文並使用復數形式
  • fillable:表的屬性
  • fieldSearcheable:要包含在過濾中的屬性。遵循此規則 "atributo" => "condition",如果未指定 condition,則默認為 "="
  • resources:需要返回 JSON 回應中的屬性。如果留空數組,則返回表的全部屬性,並可以使用 filter 參數進行過濾
  • routes:在当前版本中,可以声明3个选项,index 用于 GET 请求,store 用于 POST 请求,update 用于 PUT 请求。基于这些选项将创建可用的方法和路由。示例用法:app('role')->update($atributos, $id); 不必指定所有三个,可能只需要一个。
  • rules_store:如果使用 store,可以根据 Laravel 文档指定验证规则。
  • rules_update:如果使用 update,可以根据 Laravel 文档指定验证规则。
  • observer:接收一个布尔值,如果为 true,将在 observers 文件夹中创建一个类。请注意 Laravel 文档。

監聽器 & Job

当我们在 service 中配置 observer => true 时,它将在配置的路径下创建名为我们服务的 Observer 类。无需注册 observer,它将自动获取。尽管 observer 可以用于不同的功能,但在 packages 中主要考虑用于通过队列同步数据。但这并不意味着你不能用它来做其他事情。

为了使用它,首先需要配置队列的某些驱动程序。请参考 Laravel 文档。

一旦配置完成,为了使用同步,只需要配置将要同步的 API 数据(或 API)。Observer 类已经包含了所需的配置。

主要方法

配置文件后,或者每次修改时,都需要运行 ArtisanCLI 命令来通知应用程序我们的基本服务有新的或修改的内容。

命令

php artisan build:structure