准备环境(php7+laravel)
-> composer create-project --prefer-dist laravel/laravel laravel-dingo`
安装dingo
-> composer require dingo/api:1.0.x@dev
编辑app/config.php、在provider配置块里注册dingo包到laravel框架中
Laravel\Tinker\TinkerServiceProvider::class,
Dingo\Api\Provider\LaravelServiceProvider::class,
```php
在config目录生成dingo的配置配置文件
```shell
-> php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
然后在config目录中会生成api.php就是dingo的配置文件
dingo包提供了两个门面
Dingo\Api\Facade\API
Dingo\Api\Facade\Route
在.env文件中开启调试模式、以方便在出错时查看出错的详细信息和配置api路由的url前缀
API_PREFIX=api
API_DEBUG=true
注意:如果api前缀dingo的api前缀是api会覆盖laravel默认的api前缀。
路由
为了避免和laravel自带的路由冲突、必须使用dingo提供的路由对象注册路由
在路由文件中获取api路由对象、编辑routes/web.php
获取dingo的路由对象:$api = app('Dingo\Api\Routing\Router');
版本
因为app接口路由有多个版本、通过路由前缀进行区分、所以dingo默认自带version来为路由创建版本
编辑routes/web.php
$api->version('v1', function() {
// 注册第一版路由
});
$api->version('v2', function() {
// 注册第二版路由
});
注册路由使用Laravel的路由语法
$api->version('v1', function ($api) {
$api->get('users', 'App\Api\V1\Controllers\UserController@index');
$api->get('users/{id}', 'App\Api\V1\Controllers\UserController@show');
});
$api->version('v2', function ($api) {
$api->get('users', 'App\Api\V2\Controllers\UserController@index');
});
注意:必须将控制器的名字连同名字空间写全。
查看已注册的api路由:php artisan api:routes
λ pphp artisan api:routes
+------+----------+-----------------+------+---------------------------------------------+-----------+------------+----------+------------+
| Host | Method | URI | Name | Action | Protected | Version(s) | Scope(s) | Rate Limit |
+------+----------+-----------------+------+---------------------------------------------+-----------+------------+----------+------------+
| | GET|HEAD | /api/users | | App\Api\V1\Controllers\UserController@index | No | v1 | | |
| | GET|HEAD | /api/users/{id} | | App\Api\V1\Controllers\UserController@show | No | v1 | | |
| | GET|HEAD | /api/users | | App\Api\V2\Controllers\UserController@index | No | v2 | | |
+------+----------+-----------------+------+---------------------------------------------+-----------+------------+----------+------------+
此时UserController内容
<?php
namespace App\Api\V1\Controllers;
use App\User;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Request;
class UserController extends Controller
{
public function index()
{
}
public function show(Request $request, $id)
{
}
}
通过浏览器访问:/api/users/1,既没有内容输出、也没有错误产生证明已经请求已经抵达控制器。
在控制器中返回数据给接口调用方
返回从模型中查询的所有数据
class UserController
{
public function index()
{
return User::all();
}
}
访问/api/users返回值:
{"users":[{"id":1,"name":"\u82cf\u5c0f\u6797","email":"dear.lin@live.com","created_at":"2017-02-18 23:44:00","updated_at":null},{"id":2,"name":"\u5c0f\u6797\u8001\u5e08","email":"dear.lin@live.com","created_at":"2017-02-18 23:44:00","updated_at":null}]}
返回从模型中查询的一行数据
访问/api/users/1返回值:
public function show(Request $request, $id)
{
return User::findOrFail($id);
}
还可以返回数组需要使用dingo的助手代码
在控制器内引入dingo的助手
<?php
namespace App\Api\V1\Controllers;
use App\User;
use Dingo\Api\Routing\Helpers;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Request;
class UserController extends Controller
{
use Helpers;
public function index()
{
return User::all();
}
public function show(Request $request, $id)
{
$user = User::findOrFail($id);
return $this->response->array($user->toArray());;
}
}
访问/api/users/1的返回值:
{"id":1,"name":"\u82cf\u5c0f\u6797","email":"dear.lin@live.com","created_at":"2017-02-18 23:44:00","updated_at":null}
使用以上的内容基本可以满足app接口开发的需要、剩余高级内容需要时补上~~~