详解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 相关文章推荐
PHP读取MySQL数据代码
Jun 05 PHP
php 显示指定路径下的图片
Oct 29 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php include和require的区别深入解析
Jun 17 PHP
PHP SOCKET编程详解
May 22 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
PHP设计模式之抽象工厂模式实例分析
Mar 25 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
TP5多入口设置实例讲解
Dec 15 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
献给php初学者(入门学习经验谈)
2010/10/12 PHP
php过滤敏感词的示例
2014/03/31 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
python类的实例化问题解决
2019/08/31 Python
python列表返回重复数据的下标
2020/02/10 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
全球最大的服务市场:Fiverr
2017/01/03 全球购物
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
新教师工作感言
2014/02/16 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
销售督导岗位职责
2015/04/10 职场文书
校运会加油稿大全
2015/07/22 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
导游词之清晏园
2019/11/22 职场文书
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android