Laravel5.3开发API(Dingo+Passport+Swagger)
2016-12-01 21:33
453 查看
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
phpAPI_STANDARDS_TREE=vnd API_SUBTYPE=biubiujun API_PREFIX=api API_VERSION=v1 API_NAME=BiuBiuJun API_CONDITIONAL_REQUEST=false API_STRICT=false API_DEFAULT_FORMAT=json API_DEBUG=true
API_STANDARDS_TREE - API规格
x本地或私有环境
prs非商业销售的项目
vnd公开的以及商业销售的项目
API_SUBTYPE - API简称
API_PREFIX - API前缀(或使用API_DOMAIN - API子域名)
API_VERSION - API默认版本
API_NAME - API名称
API_CONDITIONAL_REQUEST - 带条件的请求,由于缓存API请求的时候会使用客户端缓存功能,所以默认开启了带条件的请求
API_STRICT - 严格模式,要求客户端发送Accept头而不是默认在配置文件中指定的版本
API_DEFAULT_FORMAT - 响应格式,默认的响应格式是JSON
API_DEBUG - 调试模式
测试
迁移User数据表
php artisan migrate
创建
UserTableSeeder
php artisan make:seeder UserTableSeeder
修改
database/seeds/UserTableSeeder.php
<?php use Illuminate\Database\Seeder; class UsesTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $user = new User(); $user->name = 'BiuBiuJun'; $user->email = 'biubiujun@163.com'; $user->password = Hash::make('123456'); $user->save(); } }
执行
seeder
php artisan db:seed
创建
UserController
php artisan make:controller Api/V1/UserController
修改
app/Http/Controller/Api/V1/UserController
<?php namespace App\Http\Controllers\Api\V1; use App\User; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class UserController extends Controller { public function index() { return User::all(); } public function show($id) { return User::findOrFail($id); } }
在
routes/api.php注册路由
... $api = app('Dingo\Api\Routing\Router'); $api->version('v1', ['namespace' => 'App\Http\Controllers\Api\V1'], function ($api) { $api->get('user/{id}', 'UserController@show'); $api->get('user', 'UserController@index'); });
查看路由列表
php artisan api:routes
访问即可
http://localhost/path/public/api/user
http://localhost/path/public/api/user/1
Passport
安装
composer require laravel/passport
配置
在config/app.php注册服务提供者
... 'providers' => [ ... Laravel\Passport\PassportServiceProvider::class, ... ], ...
迁移
Passport相关的数据表
php artisan migrate
修改
app/User.php
<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiTokens, Notifiable; }
创建
AuthServiceProvider
php artisan make:provider AuthServiceProvider
修改
app/Providers/AuthServiceProvider[/code]
<?php
namespace App\Providers;
use Carbon\Carbon;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(15));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
Passport::pruneRevokedTokens();
}
}
修改config/auth.php
...
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
...
创建一个密码发放客户端
php artisan passport:client --password
配置Dingo使用Passport密码发放令牌
创建PassportDingoProvider
php artisan make:provider PassportDingoProvider
修改app/Providers/PassportDingoProvider.php
<?php
namespace App\Providers;
use Dingo\Api\Routing\Route;
use Illuminate\Http\Request;
use Dingo\Api\Auth\Provider\Authorization;
class PassportDingoProvider extends Authorization
{
public function authenticate(Request $request, Route $route)
{
return $request->user();
}
public function getAuthorizationMethod()
{
return 'bearer';
}
}
修改config/api.php
...
'auth' => [
'custom' => \App\Providers\PassportDingoProvider::class
],
...
修改App/Http/Kernel.php
...
protected $middlewareGroups = [
...
'api:auth' => [
'auth:api',
'api.auth'
]
...
];
...
在routes/api.php
修改之前注册路由
...
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['middleware' => 'api:auth', 'namespace' => 'App\Http\Controllers\Api\V1'], function ($api) {
$api->get('user/{id}', 'UserController@show');
$api->get('user', 'UserController@index');
});
测试
请求令牌
curl -d "username=biubiujun@163.com@password=123456@grant_type=password&client_id=<client_id>&client_secret=<client_secret>" http://localhost/path/public/api/oauth/token[/code]
请求用户列表
curl -H "Authorization: Bearer <token>" http://localhost/path/public/api/user[/code]
Swagger
安装
composer require zircote/swagger-php
测试
创建SwaggerController
php artisan make:controller SwaggerController
修改app/Http/Controller/SwaggerController
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
/**
* @SWG\Info(title="My First API", version="0.1")
*/
/**
* @SWG\Get(
* path="/api/resource.json",
* @SWG\Response(response="200", description="An example resource")
* )
*/
class SwaggerController extends Controller
{
public function doc()
{
$swagger = \Swagger\scan(__DIR__ . '/../');
return response()->json($swagger);
}
}
下载swagger-ui
swagger-ui
将swagger-ui/dist
目录放入public/doc
修改public/doc/index.html
...
<script src='lang/translator.js' type='text/javascript'></script>
<script src='lang/zh-cn.js' type='text/javascript'></script>
<script type="text/javascript">
$(function () {
var url = window.location.search.match(/url=([^&]+)/);
if (url && url.length > 1) {
url = decodeURIComponent(url[1]);
} else {
// url = "http://petstore.swagger.io/v2/swagger.json"
url = "/api/doc";
}
...
访问http://localhost/path/public/doc/
相关文章推荐
- Laravel5.5+passport 放弃 dingo 开发 API 实战,让 API 开发更省心
- laravel 5.5 使用 dingo 开发 API
- laravel 5.4 + dingo api + jwt 代替Passport
- laravel 开发RestFul接口【一、集成三方扩展 - dingo/api】
- laravel 使用 Dingo开发api
- Laravel 5 开发API(Dingo Api + JWT)
- golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Laravel实现dingo+JWT api接口之配置篇
- Laravel5.2+Dingo/API+JWTauth的想着问题
- 【Laravel5.3】安装与配置开发环境(Windows)
- SpringBoot和Swagger结合提高API开发效率
- Laravel & Lumen RESTFul API 扩展包:Dingo API(五) —— 转化器(Transformer)
- Laravel实现dingo+JWT api接口之实战篇
- SpringBoot和Swagger结合提高API开发效率
- Laravel Dingo API
- Laravel & Lumen RESTFul API 扩展包:Dingo API(一) —— 安装配置篇
- laravel之dingoapi的使用
- Laravel实现dingo+JWT api接口之配置篇
- laravel dingo/api 安装与配置