dingo笔记


使用Dingo API可以快速建立自己的API。

dingo相关网址

dingo安装

  • 安装laravel dingo/api
composer require dingo/api:1.0.x@dev
  • 注册服务提供者 config/app.php
'providers' => [
    Dingo\Api\Provider\LaravelServiceProvider::class
]
  • 写入配置文件 config/api.php
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
  • 配置 .env
API_PREFIX=api
API_SUBTYPE=html
API_VERSION=v1
API_DOMAIN=html.dev
API_STRICT=false
API_DEBUG=true

dingo路由设置 routes/api.php

测试网址:http://html.dev/api/dingo

// 获取一个api路由实例
$api = app('Dingo\Api\Routing\Router');
# 定义一个分组, 从而可以支持多路由
$api->version('v1', function($api){
   $api->get('dingo', function(){
      return 'Hello dingo!';
   });
});

dingo路由多版本,控制器,中间件的使用

测试网址:http://html.dev/api/dingo

// 控制器生成
php artisan make:controller DingoController
// 中间件生成
php artisan make:middleware Dingo
// 中间件注册别名dingo 文件:app/Http/Kernel.php
use App\Http\Middleware\Dingo;
'dingo' => [
    Dingo::class,
],

具体代码实现如下:

// 定义一个分组, 从而可以支持多路由
$api->version('v1', function ($api) {
    $api->get('dingo', function () {
        $msg = 'Hello dingo!' . PHP_EOL;
        $msg .= "版本号:" . getenv('API_VERSION') . PHP_EOL;

        return $msg;
    });
});

// 将多个版本指向一个控制器进行操作
$api->version(['v1', 'v2'], function ($api) {
    $api->get('dingo', 'App\Http\Controllers\DingoController@index');
});

// 将多个版本指向一个控制器进行操作, 并使用自定义中间件进行处理
$api->version(['v1', 'v2'], ['middleware' => 'dingo'], function ($api) {
    $api->get('dingo', 'App\Http\Controllers\DingoController@index');
});

dingo相关问题补充说明

不是全包需要做的处理

# 先更新 composer
composer update
# 将.env.example重命名为.env
# 更新密钥
php artisan key:generate

dingo配置

dingo配置在.env文件中.

# 你的 subtype 一般是你应用或者php项目的简称,全小写
API_SUBTYPE=myapp
# 前缀
API_PREFIX=api
# 域名
API_DOMAIN=api.myapp.com
# 版本
API_VERSION=V1
# name 只用在你生成文档的时候,当你生成文档的时候用作默认的名字,避免必须去手动定义
API_NAME="My API"
# 默认情况下,有条件的请求默认开启,它将利用客户端的缓存机制在可能的情况下缓存 API 请求。
API_CONDITIONAL_REQUEST=false
# 当调试模式开启时,一般的错误被包捕获,结果中包含了一个 debug 键,值为详细的错误追踪
# 如果开启严格模式,发送非法的 Acceept 会抛出一个未处理的异常 
API_STRICT=false
API_DEBUG=true

dingo路由配置

dingo使用了一套自己的路由控制,这样可以和laravel的路由控制分离开来.

# 获取一个API路由实例.
$api = app('Dingo\Api\Routing\Router');
# 定义一个版本分组,从而可以支持多路由.
$api->version('v1', function($api){});
# 返回多个版本
$api->version(['v1', 'v2'], function($api){});
# 通过在第二个参数上传递一个属性数组,你可以把这个分组当做你自己特殊框架的标准分组
$api->version('v1', ['middleware' => 'foo'], function($api){});
# 你也可以为某些特殊的端点嵌套使用分组
$api->version('v1', function($api){
    $api->group(['middleware' => 'foo'], function($api){});
});
# 一旦你有了一个版本分组,你就可以在分组必报的参数中,通过 $api 创建端点。
$api->version('v1', function($api){
    $api->get('users/{id}', 'App\Api\Controllers\UserController@show');
});
# 路由被分组以后,你可以在不同的组里创建相同的路由.
$api->version('v1', function($api){
    $api->get('users/{id}', 'App\Api\V1\Controllers\UserController@show');
});
$api->version('v2', function($api){
    $api->get('users/{id}', 'App\Api\V2\Controllers\UserController@show');
});
# 路由重命名
$api->get('users/{id}', ['as' => 'users.index', 'uses' => 'Api\V1\UserController@show']);
# 使用别名路由
app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('users.index');
# 如果你正在使用 Laravel 5.1 你可以使用 Artisan 命令看到你注册的路由
php artisan api:routes