Laravel5.3开发API(Dingo+Passport+Swagger)
来源:互联网 发布:湖北广电网络官网 编辑:程序博客网 时间:2024/05/20 22:04
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=vndAPI_SUBTYPE=biubiujunAPI_PREFIX=apiAPI_VERSION=v1API_NAME=BiuBiuJunAPI_CONDITIONAL_REQUEST=falseAPI_STRICT=falseAPI_DEFAULT_FORMAT=jsonAPI_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
<?phpuse 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
<?phpnamespace 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
<?phpnamespace 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
<?phpnamespace 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
<?phpnamespace 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
请求用户列表
curl -H "Authorization: Bearer <token>" http://localhost/path/public/api/user
Swagger
安装
composer require zircote/swagger-php
测试
创建SwaggerController
php artisan make:controller SwaggerController
修改app/Http/Controller/SwaggerController
<?phpnamespace 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.3开发API(Dingo+Passport+Swagger)
- 在Laravel5.2中使用dingo+JWT+Swagger
- Laravel 5 开发API(Dingo Api + JWT)
- Laravel5.2+Dingo/API+JWTauth的想着问题
- 关于Dingo API 文档的翻译(1)
- swagger api 之(一)
- swagger api 之(二)
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Laravel-dingo/api获取路由
- 转--dingo/api扩展包
- Dingo(一)
- golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
- Laravel & Lumen RESTFul API 扩展包:Dingo API(三) —— Response(响应)
- Laravel & Lumen RESTFul API 扩展包:Dingo API(五) —— 转化器(Transformer)
- Laravel & Lumen RESTFul API 扩展包:Dingo API(一) —— 安装配置篇
- Laravel & Lumen RESTFul API 扩展包:Dingo API(四) —— 错误和异常响应
- 如何编写EmacsScript
- C语言字符串处理
- map用迭代器进行遍历的方法总结
- 十大滤波算法
- gradle依赖
- Laravel5.3开发API(Dingo+Passport+Swagger)
- 使用tput创建屏幕输出
- 使用 Smartmontools 检测硬盘坏道
- Mybatis-基本配置文件
- 腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题
- C计算最大回文字串的长度
- 1225 余数之和
- LlintCode:完美平方
- Linux 安装 .NET Core 1.0 SDK