在Laravel5.2中使用dingo+JWT+Swagger
来源:互联网 发布:淘宝雅漾小样是真的吗 编辑:程序博客网 时间:2024/06/06 19:23
项目github地址laravel-dingo
结合dingo api、JWT、swagger等众多目前流行的restful api工具,致力于将laravel5.2打造成更加适合API开发者开发API的工作环境,
并将路由分割到各个控制器中,避免众多路由混杂到一个routes.php文件中,便于日常维护!
使用
Note:在使用该框架之前,先要搭建好web服务器环境,本框架在nginx+php+mysql环境下能测试通过!
下载
git clone https://github.com/turtleliangzi/laravel-dingo.git
修改目录权限
chmod -R 777 storage
chmod -R bootstrap/cache
测试数据准备
本框架使用的数据库、用户名、密码分别为ucenter、root、ucenter,用户可以在.env文件中修改为自己的数据库、用户名和密码。
DB_DATABASE=ucenterDB_USERNAME=rootDB_PASSWORD=ucenter
生成测试表
php artisan migrate
生成users表测试数据
php artisan tinker
进入交互界面
>>> namespace App=> null>>> factory(User::class, 60)->create()
lessons表测试数据可以按照同样方法生成。
Dingo Api
Dingo Api是一个强大的laravel API编写工具, 使用它,可以更加规范和方便地编写API,节约大量开发时间。Dingo Api
配置
本框架已经安装并配置好了Dingo Api,在使用过程中,你可以修改.env文件中的以下配置
API_STANDARDS_TREE=vnd
API_PREFIX=api
API_VERSION=v1
API_DEBUG=true
具体配置详情,请参考dingo api configuration
使用
在app/Http/routes.php文件中注册以下路由
/* * Include Routes */$root_dir = '/var/www/dingo/app/Api/';$api = app('Dingo\Api\Routing\Router');// V1require_once $root_dir.'V1/routes.php';
在app目录下新建Api/V1文件夹,在V1文件夹下新建routes.php文件,写入以下内容
$api->version('v1', function ($api) { $api->group(['namespace' => 'App\Api\V1\Controllers'], function($api) { /* * include controller routes */ $dir = '/var/www/dingo/app/Api/V1/Controllers/'; // User Controller Routes require_once $dir.'User/routes.php'; }); });
在V1文件夹下新建Controllers文件夹,在Controllers文件夹下新建BaseController.php文件
<?phpnamespace App\Api\V1\Controllers;use App\Http\Controllers\Controller;use Dingo\Api\Routing\Helpers;class BaseController extends Controller { use Helpers;}
在Controllers文件夹下新建User文件夹,在User文件夹下新建routes.php文件
/* * User Controller Routes * */$api->get('/users/all', 'User\UserController@show');
至此,路由注册完毕,过程中,将路由分割到了各个控制器中,目地是为了更方便维护。
在User文件夹下新建UserController.php文件,继承BaseController
<?phpnamespace App\Api\V1\Controllers\User;use App\Api\V1\Controllers\BaseController;use App\User;class UserController extends BaseController { public function show() { $users = User::all(); return $users; }}
在浏览器打开www.example.com/api/users/all,如果能够得到想要的,则路由注册成功。
JWT
JWT(JSON WEB TOKEN)一种API验证方式,详情请见JWT
Note:在本框架中已经安装并配置好了JWT,可以直接使用。
使用
在app/Api/V1/Controllers下新建Auth文件夹,在Auth文件夹下面新建AuthController.php文件
<?phpnamespace App\Api\V1\Controllers\Auth;use App\Api\V1\Controllers\BaseController;use Illuminate\Http\Request;use JWTAuth;use Tymon\JWTAuth\Exceptions\JWTException;use App\User;class AuthController extends BaseController { public function authenticate(Request $request) { // grab credentials from the request $credentials = $request->only('email', 'password'); try { // attempt to verify the credentials and create a token for the user if (! $token = JWTAuth::attempt($credentials)) { return response()->json(['error' => 'invalid_credentials'], 401); } } catch (JWTException $e) { // something went wrong whilst attempting to encode the token return response()->json(['error' => 'could_not_create_token'], 500); } // all good so return the token return response()->json(compact('token')); }}
注册路由,在Auth文件夹下新建routes.php文件
/* * Auth Controller Routes * */$api->post('/auth/login', 'Auth\AuthController@authenticate');
修改app/Api/V1/routes.php文件,引入Auth/routes.php文件
$api->version('v1', function ($api) { $api->group(['namespace' => 'App\Api\V1\Controllers'], function($api) { /* * include controller routes */ $dir = '/var/www/dingo/app/Api/V1/Controllers/'; // Auth Controller Rotues require_once $dir.'Auth/routes.php'; // User Controller Routes require_once $dir.'User/routes.php'; }); });
访问链接www.example.com/api/auth/login,登陆成功可以返回一串token值。可以结合register方法,先注册一个测试用户。
在AuthController.php中加入
public function register(Request $request) { $newUser = [ 'name' => $request->get('name'), 'email' => $request->get('email'), 'password' => bcrypt($request->get('password')), ]; $user = User::create($newUser); $token = JWTAuth::fromUser($user); return response()->json(compact('token')); }
修改该目录下的routes.php,注册/auth/register路由
$api->post('/auth/login', 'Auth\AuthController@authenticate');$api->post('/auth/register', 'Auth\AuthController@register');
可以在一个路由或路由组中使用jwt.auth中间件,通过token来验证获取资源的权限。
$api->group(['middleware' => 'jwt.auth'], function($api) { $dir = '/var/www/dingo/app/Api/V1/Controllers/'; // User Controller Routes require_once $dir.'User/routes.php';});
当访问www.example.com/api/user/all时,需要在加上Header Authorization: Bearer {yourtokenhere}。
Swagger
Swagger是一个非常强大的API文档工具, 在Laravel中使用Swagger可以自动生成Api文档,详情请见swaggervel
Note:本框架中已经安装并配置好了swagger,可以直接使用。
例如:
use Swagger\Annotations as SWG;/** * @SWG\Swagger( * @SWG\Info( * title="Dingo Api", * version="1.0.0" * ), * @SWG\Tag(name="Auth", description="验证模块"), * @SWG\Tag(name="Users", description="用户模块"), * @SWG\Tag(name="Lessons", description="教程模块"), * schemes={"http"}, * host="ucenter.turtletl.com:81", * basePath="/api" * ) */class UserController extends BaseController { /** * @SWG\Get( * path="/users/all", * summary="显示所有用户", * tags={"Users"}, * @SWG\Parameter(name="Authorization", in="header", required=true, description="用户凭证", type="string"), * @SWG\Response( * response=200, * description="all users" * ), * @SWG\Response( * response="default", * description="an ""unexpected"" error" * ) * ) */ public function show() { $users = User::all(); $users = User::paginate(25); return $this->response->paginator($users, new UserTransformer)->setStatusCode(200); //return $this->response->collection($users, new UserTransformer); } /** * @SWG\Get( * path="/users/one", * summary="获取当前用户", * tags={"Users"}, * @SWG\Parameter(name="Authorization", in="header", required=true, description="用户凭证", type="string"), * @SWG\Response( * response=200, * description="one user" * ), * @SWG\Response( * response="default", * description="an ""unexpected"" error" * ) * ) */ public function getAuthenticatedUser() { try { if (! $user = JWTAuth::parseToken()->authenticate()) { return response()->json(['user_not_found'], 404); } } catch (TokenExpiredException $e) { return response()->json(['token_expired'], $e->getStatusCode()); } catch (TokenInvalidException $e) { return response()->json(['token_invalid'], $e->getStatusCode()); } catch (JWTException $e) { return response()->json(['token_absent'], $e->getStatusCode()); } // the token is valid and we have found the user via the sub claim return response()->json(compact('user')); //return $this->response->item(compact('user'), new UserTransformer); }
Swagger-php 2.0 较Swagger-php 1.0版本有一定的改动,详情请见swagger-php2.0
访问www.example.com/api-docs查看API文档
访问www.example.com/docs查看JSON文档
详情请参考本框架测试环境下的API文档laravel-dingo
- 在Laravel5.2中使用dingo+JWT+Swagger
- Laravel5.3开发API(Dingo+Passport+Swagger)
- 在项目中使用swagger
- Laravel5.2+Dingo/API+JWTauth的想着问题
- 8. Laravel5学习笔记:在laravel5中使用OAuth授权
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- lumen5.4整合dingo/api、jwt-auth
- laravel 5.4 JWT + Dingo 构建API 攻略
- 使用JWT验证在我们的React&Redux应用中
- laravel5.2中session的使用
- laravel5 中使用excel
- 在laravel5.4中使用Auth系统,配置邮箱
- 在laravel5.5中使用自己创建的类
- asp.net core Swagger JWT
- SpringMVC+JWT+Swagger UI+RestFul
- laravel5.2 使用redis
- JSON — JSON入门与实战详解 —— JavaScript、Java与JSON互转
- Java反射机制:获取成员变量和构造函数的信息
- Android中保存图片到本地功能实现
- UVA 1312(p256)----Cricket Field
- <Perl语言入门>读书笔记 | 四. 子程序
- 在Laravel5.2中使用dingo+JWT+Swagger
- 36. Valid Sudoku
- Unity3D Quaternion各属性和函数测试
- 219. Contains Duplicate II
- 223. Rectangle Area
- Android 语音识别+语音搜索源码 Voice Search
- 分享一种身份证OCR识别技术
- tomcat启动报警告错误:Setting property 'maxTheads' to '125' did not find a matching property.
- 关于DS18B20温度传感器的时序详解及代码分析