基于laravel制作API接口
基于laravel制作API接口
关于API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
需要注意的是: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里添加
1 2 3 4 | App\Providers\OAuthServiceProvider:: class , Dingo\Api\Provider\LaravelServiceProvider:: class , LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider:: class , LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider:: class , |
在aliases里添加
1 | 'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer:: class , |
修改app/Http/Kernel.php文件里的内容
1 2 3 4 5 6 7 8 9 | 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 , ]; |
然后执行
1 2 3 | php artisan vendor:publish php artisan migrate |
在.env文件里添加这些配置
1 2 3 4 5 6 7 8 9 | 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文件
1 2 3 4 5 6 7 | 'grant_types' => [ 'password' => [ 'class' => 'League\OAuth2\Server\Grant\PasswordGrant' , 'access_token_ttl' => 604800, 'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify' , ], ], |
新建一个服务提供者,在app/Providers下新建OAuthServiceProvider.php文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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添加相关路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //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内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | //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内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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数据
1 | 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
更多PHP内容请访问:
腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架