[扩展推荐]Laravel Orion —— 快速构建 REST API

Laravel

你有注意过吗,在建立 API 的时候总是一遍遍地写相同的代码吗?创建一个控制器,然后创建 listing , creating , showing , updating , deleting 方法。在创建另外一个控制器时,你又要创建这些方法。然后为了更新关联或者支持数据表的新字段,你再去写一些定制方法(函数)?听起来很熟悉,不是吗?

在过去的一年,我使用一个 Laravel 包准确地做好这些 – 抽象它们的模式,因此你就可以更加关注真正重要的事情 – 建立你的应用。

Laravel Orion 允许你在一分钟之内建立一个全特性 REST API 。它提供一些公共方法进行 CRUD 操作,模型的软删除,和执行综合搜索。它的分工明确,像 Laravel 中 Requests 负责验证, Policies 负责授权, Resources 负责转换响应。

最棒的部分?它可以在模型和它们的关联中使用!是的,所有关联,复杂一点的 belongsToManymorphToMany 都支持。意味着,你可以在控制器中,仅写两行代码就可以完成 sync 一个模型的关联。

现在看一些例子。

模型资源

假设你有一个 Post 模型,里面保存博客文章,现在你想通过 REST API 对它进行管理。

使用 Laravel Orion 的话,简单的3个步骤就能完成:

首先,从 Orion\Http\Controllers\Controller 继承并创建 PostsController

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{

}

然后定义$model属性,并给它赋值一个标准模型类。完整的控制器如下所示:

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{
    /**
     * Fully-qualified model class name
     */
    protected $model = Post::class; // or "AppModelsPost"
}

最后,通过调用Orion :: resourceapi.php中注册路由。

<?php

use Illuminate\Support\Facades\Route;
use Orion\Facades\Orion;
use App\Http\Controllers\PostsController;

Route::group(['as' => 'api.'], function() {
    Orion::resource('posts', PostsController::class);
});

完成 :tada: 现在您可以通过 REST API 创建,列出,搜索,查看,更新,和删除博客的文章。 尝试通过(POST) https://<你的应用程序地址>/api/posts 接口创建文章 :wink:

你也可以通过运行 php artisan route:list 命令查看所有可用的接口。

关联资源

关联资源和模型资源非常类似,有两个小的差别:

  • 关联资源的控制器需要从 Orion\Http\Controllers\RelationController 继承
  • 在控制器中,要额外定义一个 $relation 变量,告诉 Laravel Orion ,模型要使用哪个关联。

首先,从 Orion\Http\Controllers\RelationController 继承并创建控制器。

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\RelationController;

class PostCommentsController extends RelationController
{
}

然后定义 $model$relation 属性。控制器看起来像这样:

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\RelationController;

class PostCommentsController extends RelationController
{
    /**
    * 模型的类名
    */
    protected $model = Post::class; // 或者 "App\Models\Post"

    /**
    * 在 Post 模型中定义的关系名。
    */
    protected $relation = 'comments';
}

最后,在 api.php 中调用 Orion::morphToManyResource 注册路由。

<?php

use Illuminate\Support\Facades\Route;
use Orion\Facades\Orion;
use App\Http\Controllers\PostsController;
use App\Http\Controllers\PostCommentsController;

Route::group(['as' => 'api.'], function() {
    Orion::resource('posts', PostsController::class);
    Orion::morphToManyResource('posts', 'comments', PostCommentsController::class);
});

现在可以通过 REST API 管理文章和评论了。

最后注意

策略

确保已经为通过 API 暴露的模型创建并注册了策略或者考虑使用 DisableAuthorization trait (仅为本地测试),避免因为没有注册策略或者策略错误而造成的403错误。

使用 Sanctum 或者其它 Auth 看守器

默认的情况, api 看守器用于决定当前登录用户的授权。

然而,你可以通过修改控制器的 resolveUser 方法改变用户的授权方式。

namespace App\Http\Controllers\Api;

use Orion\Http\Controllers\Controller;
use App\Models\Post;

class PostsController extends Controller
{
    /**
     * @var string $model
     */
    protected $model = Post::class;

     /**
     * 基于看守器取回当前通过验证的用户。.
     *
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function resolveUser()
    {
        return Auth::guard('sanctum')->user();
    }
}

下一步?

过去的一年对于所有人来说是非常的疯狂,但这并不能阻止我们创新和向前进!下面是 Laravel Orion 将要做的事情:

  • 整合 Typescript SDK 让前端更加方便和标准。
  • 完全支持 JSON 字段
  • 增强批处理
  • 测试程序

祝你保持健康和有个好周末!

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-orion

译文地址:https://learnku.com/laravel/t/52966

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

哇靠,这么,这么地强大!!!好牛逼啊!!!

3年前 评论

返回数据的格式,能够自定义,就更强大了!

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!