本文目录
一、安装dingo/api项目包
1.1 安装dingo/api
安装命令:composer require dingo/api
出现下图,安装成功:
1.2 配置dingo/api
使用以下命令可以发布 API 的配置文件到 config 文件下:
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
发布完成后,在config
文件夹下就会出现api.php
配置文件:
这个是dingo/api
配置文件。
1.3 Stand Tree标准树
可以查看dingo/api
配置文档:
https://learnku.com/docs/dingo-api/2.0.0/Configuration/1444
我们这里配置如下:
API_STANDARDS_TREE=x
API_SUBTYPE=shop
API_PREFIX=api
API_VERSION=v1
API_NAME=shop
API_CONDITIONAL_REQUEST=false
API_STRICT=false
API_DEFAULT_FORMAT=json
API_DEBUG=true
二、端点
一个端点是一个路由的另一种说法。当讨论 API 的时候,很多人把访问的路由称作为一个端点。
2.1 创建端点:
$api = app('Dingo\Api\Routing\Router');
定义一个版本分组。这种定义方式有利于后续为相同端点新增多版本支持:
$api->version('v1', function ($api) {
$api->get('index', [\App\Http\Controllers\TestController::class, 'index']);
});
2.2 新建一个Testcontroller:
php artisan make:controller TestController
2.3 命名路由和生成 URLs
// 命名路由
$api->get('nickname', ['as' => 'test.nickname', 'uses' => '\App\Http\Controllers\TestController@nickname']);
控制器方法:
public static function nickname() {
$url = app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('test.nickname');
dd($url);
}
浏览器输入:http://homestead.test/api/nickname
可以看到效果:
(tips:这边仅做了解,一般我们写纯api的话,很少会有像之前写模版那样使用到命名路由。)
2.4 查看所有路由
php artisan api:routes
:
三、响应
3.1 更改数据库配置
https://learnku.com/docs/dingo-api/2.0.0/Responses/1446
改下.env
数据库配置:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
3.2 执行迁移文件
php artisan migrate
手动先添加2个用户为下面的例子做好铺垫:
修改TestController
里的index
方法:
public static function index() {
return User::all();
}
测试:
3.3 响应生成器
继承:
我们直接写到Controller.php
控制器中:
1、响应一个数组
public function index() {
// return User::all();
// 响应一个数组
return $this->response->array(['name' => 'lili', 'age' => 18]);
}
2、 响应一个元素
在app
文件夹下创建一个Transformers
文件夹,写入UserTransformer.php
:
<?php
namespace App\Transformers;
use App\Models\User;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract {
public function transform(User $user) {
return [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
];
}
}
在TestController.php
写入:
public function index() {
// return User::all();
// 响应一个数组
// return $this->response->array(['name' => 'lili', 'age' => 18]);
/** 使用transformer */
// 响应一个元素
$user = User::find(1);
return $this->response->item($user, new UserTransformer);
}
效果:
更多可以查看dingo/api文档
在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。