Laravel 中使用 DingoAPI
- 2019 年 12 月 17 日
- 筆記
Laravel 中使用 DingoAPI
安裝laravel 這裡以5.5版本為例
composer create-project laravel/laravel laravel-api --prefer-dist "5.5.*"
1. 安裝 DingoAPI
composer require dingo/api:2.0.0-alpha2
發現報錯
Problem 1 - Conclusion: remove laravel/framework v5.5.40 - Conclusion: don't install laravel/framework v5.5.40 - dingo/blueprint 0.2.2 requires illuminate/filesystem 5.1.* || 5.2.* || 5.3.* || 5.4.* -> satisfiable by illuminate/filesystem[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4, v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.36, v5.4.9]. - dingo/blueprint v0.2.0 requires illuminate/filesystem 5.1.* || 5.2.* || 5.3.* -> satisfiable by illuminate/filesystem[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4]. - dingo/blueprint v0.2.1 requires illuminate/filesystem 5.1.* || 5.2.* || 5.3.* -> satisfiable by illuminate/filesystem[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4]. - don't install illuminate/filesystem v5.1.1|don't install laravel/framework v5.5.40 ...
因為這個包尚處在開發階段,暫時沒有穩定版,因此 我們需要手動添加。
打開 composer.json
手動添加 手動添加 "dingo/api": "2.0.0-alpha2"
"require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0", "dingo/api": "2.0.0-alpha2" },
執行composer update
composer update
稍等片刻,哇哦,順利安裝……
2. 配置
將 dingo
的配置文件發佈出來
php artisan vendor:publish
Which provider or tag's files would you like to publish?: [0] Publish files from all providers and tags listed below [1] Provider: DingoApiProviderLaravelServiceProvider [2] Provider: FideloperProxyTrustedProxyServiceProvider [3] Provider: IlluminateMailMailServiceProvider [4] Provider: IlluminateNotificationsNotificationServiceProvider [5] Provider: IlluminatePaginationPaginationServiceProvider [6] Provider: LaravelTinkerTinkerServiceProvider [7] Tag: laravel-mail [8] Tag: laravel-notifications [9] Tag: laravel-pagination
按照命令行交互,我們輸入 1 即可。接着就會在 config
目錄下生成 api.php
,可以打開大體瀏覽下各項配置,裏面的每一項都可以用 env
文件來配置。
我們暫時只關心如下配置:
- API_STANDARDS_TREE
- API_SUBTYPE
- API_VERSION
- API_PREFIX
- API_DOMAIN
- API_NAME
- API_STRICT
- API_DEBUG
接下來 針對以上配置一一作出解釋:
-
API_STANDARDS_TREE
: 有三個可選值:x
: 本地開發的或私有環境的prs
: 主要用於非商業銷售的項目,未對外發佈vnd
:對外公開,所有用戶可以訪問
-
API_SUBTYPE
:項目的簡稱,或者項目名稱 -
API_VERSION
: 版本號 -
API_PREFIX
和API_DOMAIN
: 前綴和子域名, 前綴或子域名是必須的,並且同時只有一個 -
API_NAME
: API的名字只有在使用API Blueprint命令生成文檔的時候才用到,這個名字作為默認名字以免生成文檔時需要手動指定名字。 -
API_STRICT
: 嚴格解析,值為 true 或 false,默認為 false ,開啟嚴格解析,意味着你不可以使用瀏覽器來進行訪問。 -
API_DEBUG
deuug 模式,方便查看錯誤信息
其他還有一些,分別為響應格式、錯誤格式、認證等等,就不一一介紹了。
我們打開 .env
文件,配置剛才所說的參數
API_STANDARDS_TREE=x API_SUBTYPE=laravel-api API_PREFIX=api API_VERSION=v1 API_DEBUG=true
3. 編寫測試接口
我們知道 laravel 路由文件 有專門的api 路由文件。打開該文件
<?php use IlluminateHttpRequest; /* |-------------------------------------------------------------------------- | API Routes |-------------------------------------------------------------------------- | | Here is where you can register API routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | is assigned the "api" middleware group. Enjoy building your API! | */ Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
由於我們使用 DingoApi ,因此我們同樣使用 DingoApi 的路由。將內容全部替換 如下內容:
<?php use IlluminateHttpRequest; $api = app('DingoApiRoutingRouter'); $api->version('v1', function($api) { $api->get('test', function() { return response('hello word'); }); });
使用接口調試工具 來進行測試 推薦使用 POSTMAN 調試工具,
- 網址中輸入地址
http://laravel-api.test/api/test
,不出意外 應該會輸出 hello world 字樣 - 另外一種很常見的訪問方式是通過 Accept 添加頭信息 Headers
Accept: application/x.laravel-api.v1+json
似乎很難看出效果,我們新增一條路由試試。
. . . $api->version('v2', function($api) { $api->get('test', function() { return response('hello laravel'); }); });
接着改變 Accept
Accept: application/x.laravel-api.v2+json
ok,以上我們僅僅是測試我們的接口是不是可以正常用心,實際項目中,我們不可能所有的代碼都放在路由文件中。接下來,我們新建控制器來替換路由的示例代碼。
首先,我們新建一個基類控制器,讓我們的所有其他控制器,默認繼承我們新建的控制器。
php artisan make:controller Api/v1/Controller php artisan make:controller Api/v2/Controller
我們引入 DingoApi的 Helpers 來處理有關接口的響應
可以看出,我們在 appHttpControllers
新建了一個文件夾 Api
,同時在此目錄下又新建了 v1
和 v2
目錄
新建
Api
目錄,我們是為了和其他web
控制器區分,我們將所有有關接口的控制器都放到Api
目錄下.增加v1
和v2
我們是為了後續的版本管理
打開這兩個控制器, 替換如下代碼:
<?php namespace AppHttpControllersApiv1; use DingoApiRoutingHelpers; use IlluminateHttpRequest; use AppHttpControllersController as BaseController; class Controller extends BaseController { use Helpers; }
同理:v2 下也是這樣修改 (注意命名空間,不要全部複製,記得修改哦)。
新增控制器,比如我們添加一個 Users
控制器
php artisan make:controller Api/v1/UsersController php artisan make:controller Api/v2/UsersController
打開新建的 UsersController
,替換成如下代碼:
<?php namespace AppHttpControllersApiv1; use IlluminateHttpRequest; class UsersController extends Controller { public function store() { return $this->response->array(['errmsg' => 'this is v1']); } }
v2
下我們稍微改變下返回數據,以便直觀看出
<?php namespace AppHttpControllersApiv2; use IlluminateHttpRequest; class UsersController extends Controller { public function store() { return $this->response->array(['errmsg' => 'this is v2']); } }
控制器就算完成了,我們添加兩條路由。
. . . $api->version('v1', [ 'namespace' => 'AppHttpControllersApiv1' ], function($api) { $api->post('users', 'UsersController@store') ->name('api.v1.users.store'); }); $api->version('v2', [ 'namespace' => 'AppHttpControllersApiv2' ], function($api) { $api->post('users', 'UsersController@store') ->name('api.v2.users.store'); });
增加了一個
namespace
參數,目的是所有路由都會指向 該namespace
。
訪問方法和上面一樣。
ok,以上就是 laravel 中初步安裝 DingoApi ,並且配置的基礎教程,更多使用請閱讀 官方文檔