基于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里添加

AppProvidersOAuthServiceProvider::class, DingoApiProviderLaravelServiceProvider::class, LucaDegasperiOAuth2ServerStorageFluentStorageServiceProvider::class, LucaDegasperiOAuth2ServerOAuth2ServerServiceProvider::class,

在aliases里添加

'Authorizer'?=>?LucaDegasperiOAuth2ServerFacadesAuthorizer::class,

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

protected?$middleware?=?[LucaDegasperiOAuth2ServerMiddlewareOAuthExceptionHandlerMiddleware::class, ]; protected?$routeMiddleware?=?[ ??'oauth'?=>?LucaDegasperiOAuth2ServerMiddlewareOAuthMiddleware::class, ??'oauth-user'?=>?LucaDegasperiOAuth2ServerMiddlewareOAuthUserOwnerMiddleware::class, ??'oauth-client'?=>?LucaDegasperiOAuth2ServerMiddlewareOAuthClientOwnerMiddleware::class, ??'check-authorization-params'?=>?LucaDegasperiOAuth2ServerMiddlewareCheckAuthCodeRequestMiddleware::class, ??'csrf'?=>?AppHttpMiddlewareVerifyCsrfToken::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

修改appconfigoauth2.php文件

'grant_types'?=>?[ ??'password'?=>?[ ????'class'?=>?'LeagueOAuth2ServerGrantPasswordGrant', ????'access_token_ttl'?=>?604800, ????'callback'?=>?'AppHttpControllersAuthPasswordGrantVerifier@verify', ??], ],

新建一個服務提供者,在app/Providers下新建OAuthServiceProvider.php文件內容如下

namespace?AppProviders; ? use?DingoApiAuthAuth; use?DingoApiAuthProviderOAuth2; use?IlluminateSupportServiceProvider; ? 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?AppUser(); ???$user->name="tester"; ???$user->email="test@test.com"; ???$user->password?=?IlluminateSupportFacadesHash::make("password"); ???$user->save(); }); $api?=?app('DingoApiRoutingRouter'); ? //Show?user?info?via?restful?service. $api->version('v1',?['namespace'?=>?'AppHttpControllers'],?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?AppHttpControllers; ? use?DingoApiRoutingHelpers; use?IlluminateRoutingController; ? class?BaseController?extends?Controller { ??use?Helpers; } ? //UsersController namespace?AppHttpControllers; ? use?AppUser; use?AppHttpControllersController; ? 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?AppHttpControllersAuth; use?IlluminateSupportFacadesAuth; ? 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接口

基于laravel制作API接口

基于laravel制作API接口


更多laravel框架技術文章,請訪問教程!

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享