资讯专栏INFORMATION COLUMN

Laravel Api 开发系列 - Dingo API 的使用

jlanglang / 3561人阅读

摘要:源码使用本文使用的数据库与基础篇相同,故不再重复说明。使用的用法与之前的自定义用法类似,甚至更加简单。首先定义路由如果要查看路由,需要使用创建控制器需要使用这个。

源码

使用 Dingo Api

本文使用的数据库与基础篇相同,故不再重复说明。

初始化

安装

$ composer require dingo/api:1.0.x@dev

注册

/config/app.php
"providers" => [
    DingoApiProviderLaravelServiceProvider::class,
],

为了能够自定义配置,首先需要执行

$ php artisan vendor:publish --provider="DingoApiProviderLaravelServiceProvider"
Copied File [/vendor/dingo/api/config/api.php] To [/config/api.php]
Publishing complete.

可以看到多了个 api.php 的配置文件,我们就可以在 .env 中对其进行配置,一些常用的配置项:

/.env
API_STANDARDS_TREE=vnd  # 公开的及商业项目用 vnd
API_SUBTYPE=api-demo  # 项目简称
API_PREFIX=api  # 前缀
API_VERSION=v1  # 不提供版本时使用的版本号
API_NAME="Laravel Api Demo"  # 使用 API Blueprint 命令生成文档的时候才用到
API_STRICT=false # Strict 模式要求客户端发送 Accept 头而不是默认在配置文件中指定的版本,这意味着你不能通过Web浏览器浏览API
API_DEFAULT_FORMAT=json 
API_DEBUG=true # 开启 debug 模式

创建一个基本的端点(路由在 api 中的叫法)测试下是否配置成功

/routes/api.php
$api = app("DingoApiRoutingRouter");
$api->version("v1", function ($api) {

    $api->get("test", function () {
        return "It is ok";
    });

});

访问 /api/test,返回 It is ok

使用

Dingo 的用法与之前的自定义 api 用法类似,甚至更加简单。首先定义路由

/routes/api.php
$api = app("DingoApiRoutingRouter");
$api->version("v1", function ($api) {

    $api->group(["namespace" => "AppApiControllers"], function ($api) {
        $api->resource("lessons","LessonController");
    });

});

如果要查看路由,需要使用

$ php artisan api:routes

创建控制器 - 需要使用 Helpers 这个 trait。

/app/Api/Controllers/LessonController.php
collection($lessons, new LessonTransformer());
    }

    public function show($id)
    {    
        // 尽管我们返回的不是 json,但是 dingo 会自动进行转化
        return Lesson::findOrFail($id);
    }
}

创建对应的 LessonTransformer

/app/Api/Transformers/LessonTransformer.php
 $lesson["title"],
            "content" => $lesson["body"],
            "is_free" => (bool) $lesson["free"]
        ];
    }
}

访问 api/lessons/3,结果如下

可以看出,Dingo 自动将响应的数据转化为了 json,不过我们还需要将其格式化

public function show($id)
{    
    $lesson = Lesson::findOrFail($id);
    return $this->response->item($lesson, new LessonTransformer());
}

现在,就可以得到格式化的数据了

跟 Laravel 类似,也可以使用分页

public function index()
{    
    $lessons = Lesson::paginate(15);
    return $this->response->paginator($lessons, new LessonTransformer());
}

将会返回 15 条信息以及分页信息

当请求出错时,Dingo 会自动帮我们进行处理

也可以自定义

public function show($id)
{    
    $lesson = Lesson::find($id);
    if(!$lesson){
        return $this->response->errorNotFound("错误的 id");
    }
    return $this->response->item($lesson, new LessonTransformer());
}

结果如下

结合简单的认证

我们可以在 Api 中加入自带的验证功能,比如 HTTP 基础认证。首先,创建一个测试用户

$ php artisan tinker
>>> $user = new AppUser();
>>> $user->name = "zen"
>>> $user->email = "ihuangmx@qq.com"
>>> $user->password = bcrypt("123456")
>>> $user->save()
=> true

在控制器中加入 Laravel 自带的中间件即可

public function __construct()
{
    $this->middleware("auth.basic");
}

现在访问时会提示输入用户名和密码,这里的用户名指的是邮箱

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23055.html

相关文章

  • laravel5.5+dingo+JWT开发后台API

    摘要:我的博客中文文档中使用辅助文章参考这篇文章基本就能搭建出环境,我使用的版本跟他一样,不知道别的版本有啥大的区别,但是网上找的其他一些文章使用的是旧的版本,封装的东西路径可能不一样,可能会保错,有些文档还说要手动添加和,其实新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文档: https://www.bookstack....

    printempw 评论0 收藏0
  • Laravel+Dingo/Api 自定义响应

    摘要:在最近的开发开发项目中,我使用了这个第三方库。是个很强大的库,但在开发的过程中,需要自定义响应字段。刚开始使用时,返回如下手机号格式不正确这是输入字段验证错误时,返回的结果。尤其是,需要对每一个对象进行新建,然后序列化。 在最近的开发开发项目中,我使用了Dingo/Api这个第三方Api库。Dingo是个很强大的Api库, 但在开发的过程中,需要自定义响应字段。 刚开始使用Ding/A...

    xcold 评论0 收藏0
  • 20151103addinfo-laravel小练习-小结

    摘要:学习了一段时间的小结一下最近做的小任务写下来才知道好乱糟糟,还是以记录学习的资料为主,写的很糟糕,还需要再揣度多屡屡思路。 学习了一段时间的laravel,小结一下最近做的laravel小任务,写下来才知道好乱糟糟,还是以记录学习的资料为主,写的很糟糕,还需要再揣度多屡屡思路。20151103-16 源码地址:https://github.com/dingyiming/xc-add...

    jackzou 评论0 收藏0
  • laravelDingo api如何Custom ExceptionHandler

    摘要:背景在近期使用处理接口时,发现本身中无法捕获异常。后来查阅资料发现,接管了请求的异常处理。导致无法自定义错误返回,很是头疼。最后在的找到了处理方法。 背景 在近期使用Dingo api处理接口时,发现laravel本身appExceptionsHandler中无法捕获异常。 后来查阅资料发现,Dingo api接管了api请求的异常处理。导致无法自定义错误返回,很是头疼。 最后在di...

    Ku_Andrew 评论0 收藏0
  • laravel 5.4 + dingo api + jwt 代替Passport

    摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活来的,每个都试了一堆问题,到底你们做完有没有总结过一次然后有几个使用,完全不行啊,太监版不是我想要的。后来,终于找到例子并实测成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活来的,每个都试了一堆问题,到底你们做完有没有总结过一次?然后有几个使用lunmen+dingo api+jwt,完全不行啊,太监版不是我想要的。...

    _Zhao 评论0 收藏0

发表评论

0条评论

jlanglang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<