pablito / structure
RestApis环境的基礎結構
Requires
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