详解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
一个odbc连mssql分页的类
Oct 09 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 PHP
Laravel 队列使用的实现
Jan 08 PHP
php实例化一个类的具体方法
Sep 19 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
我的论坛源代码(六)
2006/10/09 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
PHP设置进度条的方法
2015/07/08 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
python3.7.0的安装步骤
2018/08/27 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Python partial函数原理及用法解析
2019/12/11 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
信息部岗位职责
2013/11/12 职场文书
学校门卫管理制度
2014/01/30 职场文书
销售人员获奖感言
2014/02/05 职场文书
小学安全汇报材料
2014/08/14 职场文书
影视后期实训报告
2014/11/05 职场文书
九寨沟导游词
2015/02/02 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android