详解Laravel制作API接口


Posted in PHP onMay 31, 2021

需要注意的是:API有它的具体用途,我们应该清楚它是干啥的。访问API的时候应该输入什么。访问过API过后应该得到什么。

在开始设计API时,我们应该注意这8点。后续的开发计划就围绕着这个进行了。

1.Restful设计原则

2.API的命名

3.API的安全性

4.API返回数据

5.图片的处理

6.返回的提示信息

7.在线API测试文档

8.在app启动时,调用一个初始化API获取必要的信息

用laravel开发API

就在我上愁着要不要从零开始学习的时候,找到了这个插件dingo/api那么现在就来安装吧!

首先一定是下载的没错

在新安装好的laravel的composer.json加入如下内容

然后打开cmd执行

composer update

在config/app.php中的providers里添加

App\Providers\OAuthServiceProvider::class,

Dingo\Api\Provider\LaravelServiceProvider::class,

LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider::class,

LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider::class,

在aliases里添加

'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,

修改app/Http/Kernel.php文件里的内容

protected $middleware = [\LucaDegasperi\OAuth2Server\Middleware\OAuthExceptionHandlerMiddleware::class,
];
protected $routeMiddleware = [
 'oauth' => \LucaDegasperi\OAuth2Server\Middleware\OAuthMiddleware::class,
 'oauth-user' => \LucaDegasperi\OAuth2Server\Middleware\OAuthUserOwnerMiddleware::class,
 'oauth-client' => \LucaDegasperi\OAuth2Server\Middleware\OAuthClientOwnerMiddleware::class,
 'check-authorization-params' => \LucaDegasperi\OAuth2Server\Middleware\CheckAuthCodeRequestMiddleware::class,
 'csrf' => \App\Http\Middleware\VerifyCsrfToken::class,
];

然后执行

php artisan vendor:publish

php artisan migrate

在.env文件里添加这些配置

API_STANDARDS_TREE=x

API_SUBTYPE=rest

API_NAME=REST

API_PREFIX=api

API_VERSION=v1

API_CONDITIONAL_REQUEST=true

API_STRICT=false

API_DEBUG=true

API_DEFAULT_FORMAT=json

修改app\config\oauth2.php文件

'grant_types' => [
 'password' => [
 'class' => 'League\OAuth2\Server\Grant\PasswordGrant',
 'access_token_ttl' => 604800,
 'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify',
 ],
],

新建一个服务提供者,在app/Providers下新建OAuthServiceProvider.php文件内容如下

namespace App\Providers;
   
use Dingo\Api\Auth\Auth;
use Dingo\Api\Auth\Provider\OAuth2;
use Illuminate\Support\ServiceProvider;
   
class OAuthServiceProvider extends ServiceProvider
{
 public function boot()
 {
 $this->app[Auth::class]->extend('oauth', function ($app) {
 $provider = new OAuth2($app['oauth2-server.authorizer']->getChecker());
   
 $provider->setUserResolver(function ($id) {
 // Logic to return a user by their ID.
 });
   
 $provider->setClientResolver(function ($id) {
 // Logic to return a client by their ID.
 });
   
 return $provider;
 });
 }
   
 public function register()
 {
 //
 }
}

然后打开routes.php添加相关路由

//Get access_token
Route::post('oauth/access_token', function() {
 return Response::json(Authorizer::issueAccessToken());
});
   
//Create a test user, you don't need this if you already have.
Route::get('/register',function(){
 $user = new App\User();
 $user->name="tester";
 $user->email="test@test.com";
 $user->password = \Illuminate\Support\Facades\Hash::make("password");
 $user->save();
});
$api = app('Dingo\Api\Routing\Router');
   
//Show user info via restful service.
$api->version('v1', ['namespace' => 'App\Http\Controllers'], function ($api) {
 $api->get('users', 'UsersController@index');
 $api->get('users/{id}', 'UsersController@show');
});
   
//Just a test with auth check.
$api->version('v1', ['middleware' => 'api.auth'] , function ($api) {
 $api->get('time', function () {
 return ['now' => microtime(), 'date' => date('Y-M-D',time())];
 });
});

分别创建BaseController.php和UsersController.php内容如下

//BaseController
namespace App\Http\Controllers;
   
use Dingo\Api\Routing\Helpers;
use Illuminate\Routing\Controller;
   
class BaseController extends Controller
{
 use Helpers;
}
   
//UsersController
namespace App\Http\Controllers;
   
use App\User;
use App\Http\Controllers\Controller;
   
class UsersController extends BaseController
{
   
 public function index()
 {
 return User::all();
 }
   
 public function show($id)
 {
 $user = User::findOrFail($id);
 // 数组形式
 return $this->response->array($user->toArray());
 }
}

随后在app/Http/Controllers/Auth/下创建PasswordGrantVerifier.php内容如下

namespace App\Http\Controllers\Auth;
use Illuminate\Support\Facades\Auth;
   
class PasswordGrantVerifier
{
 public function verify($username, $password)
 {
 $credentials = [
 'email' => $username,
 'password' => $password,
 ];
   
 if (Auth::once($credentials)) {
 return Auth::user()->id;
 }
   
 return false;
 }
}

打开数据库的oauth_client表新增一条client数据

INSERT INTO 'oauth_clients' ('id', 'secret', 'name', 'created_at', 'updated_at') VALUES ('1', '2', 'Main website', '2016?03?13 23:00:00', '0000?00?00 00:00:00');

随后的就是去愉快的测试了,这里要测试的API有

新增一个用户

http://localhost/register

读取所有用户信息

http://localhost/api/users

只返回用户id为4的信息

http://localhost/api/users/4

获取access_token

http://localhost/oauth/access_token

利用token值获得时间,token值正确才能返回正确值

http://localhost/api/time

打开PostMan

以上就是详解Laravel制作API接口的详细内容,更多关于Laravel制作API接口的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
phpwind中的数据库操作类
Jan 02 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
PHP中的Streams详细介绍
Nov 12 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
为你总结一些php信息函数
Oct 21 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 PHP
浅谈PHP7中的一些小技巧
May 29 #PHP
详解Laravel服务容器的优势
May 29 #PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
浅谈Laravel中使用Slack进行异常通知
May 29 #PHP
详解Go与PHP的语法对比
May 29 #PHP
详解php中流行的rpc框架
如何在Mac上通过docker配置PHP开发环境
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python的继承知识点总结
2018/12/10 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python创建数字列表的示例
2019/11/28 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Python requests获取网页常用方法解析
2020/02/20 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
学校经典推荐信
2013/10/30 职场文书
护理专业自我鉴定
2014/01/30 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书