详解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函数
Oct 09 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
php数据库抽象层 PDO
May 07 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
php抓取页面的几种方法详解
Jun 17 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
实例讲解PHP表单验证功能
Feb 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制作静态网站的模板框架(二)
2006/10/09 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
php实现天干地支计算器示例
2014/03/14 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
对Python协程之异步同步的区别详解
2019/02/19 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Python pickle模块实现对象序列化
2019/11/22 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
创业资金计划书
2014/02/06 职场文书
集体婚礼策划方案
2014/02/22 职场文书
团日活动总结书格式
2014/05/08 职场文书
留学经费担保书
2014/05/12 职场文书
投资意向书
2014/07/30 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
机器人瓦力观后感
2015/06/12 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书