Dingo包的大多數配置都預先設置好了,這樣你就可以盡快的進入開發模式了,我們也可以參照config/api.php
中的env()
函數中的內容在.env
文件中去設置。
當然也可以使用AppServiceProvider
中的boot
進行設置
(這個怎么設置???)
提示: 如果你使用Laravel5,那么必須使用Dingo生成的配置文件config/api.php
或者是使用Service Provider
設置。
生成config/api.php的方法
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
Standards Tree
一共提供了3種tree,x, prs, vnd
x: unregistered tree
本地或是私有環境
prs: personal Tree
項目不是用于商業發布的
```vnd: vender tree`` 用于公開的商業項目
在.env
文件中這樣配置
API_STANDARDS_TREE=vnd
還是不理解x, prs, vnd
???
Subtype
subtype 是項目或工程的簡稱,全部小寫
API_SUBTYPE=zjpblog
前綴和子域名
通常對于api,我們會使用子域名或者是位于/api欄目下,兩者只要使用一個就可以了,注意不要添加版本號到子域名或者是/api下,版本號會有header的Accept
處理
// 設置欄目行
API_PREFIX=api
//或者是設置子域名,兩者選一個
API_DOMAIN=api.zhoujiping.com
版本 Version
兩個作用:1,它是默認的版本號或者是沒有提供版本號,使用這個,2是在生成api文檔的時候會使用該版本號
API_VERSION=v1
名字 Name
API_NAME 的唯一作用是在使用API Blueprint命令生成文檔的時候會使用,這樣可以省去手動書寫名字
API_NAME=Zhoujiping Blog
//如果上面的設置不成功,使用下面的
API_NAME="Zhoujiping Blog"
帶條件的請求
由于緩存API請求的時候會使用客戶端的緩存功能,所以默認是開啟了帶條件的請求,如果要關閉這項
API_CONDITIONAL_REQUEST=false
嚴格模式
嚴格模式要求客戶端發送Accept頭代替.env文件中的version,意味著不能通過瀏覽器訪問api。
如果Strict模式開啟并且使用了無效的Accept頭,API會拋出一個Symfony\Component\HttpKernel\Exception\BadRequestHttpException異常。
你可以在.env中配置這個選項:
API_STRICT=false
認證提供者
默認情況下,只有basic
認證是可以用的,后面的章節會用更多的介紹,如果需要復雜功能的認證,你需要注冊服務提供者
$app['Dingo\Api\Auth\Auth']->extend('oauth', function ($app) {
return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);
});
登錄次數限制
默認情況下,是限制登錄次數的,你可以通過rate limiter注冊自定義登錄次數限制,也可以使用系統自帶的認證和取消認證的throttle模塊。
要進行更為復雜的操作,也是需要注冊服務提供者的
$app['Dingo\Api\Http\RateLimit\Handler']->extend(function ($app) {
return new Dingo\Api\Http\RateLimit\Throttle\Authenticated;
});
數據返回Response Transformer
Fractal
是默認的數據返回處理Transformer.
我們可以在.env
文件中設置,
在config/api.php
中有
//怎么設置.env????
'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class),
也不可以不用上面的方法,也可以注冊成服務提供者,這樣可以用更多的功能:
$app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) {
$fractal = new League\Fractal\Manager;
$fractal->setSerializer(new League\Fractal\Serializer\JsonApiSerializer);
return new Dingo\Api\Transformer\Adapter\Fractal($fractal);
});
上面這個不知道怎么用,其實可以自己建立一個Transformer文件夾,如針對User Model,聲明UserTransformer 類,并繼承TransformerAbstract 類(laravist上這么用)
返回格式 Response Formats
默認的數據以json進行前后端的傳遞,你也可以自己定義
API_DEFAULT_FORMAT=json
更高級的數據格式,如使用可以跨域訪問的jsonp
,需要在config/api.php
中設置,或者是注冊成服務提供者
Dingo\Api\Http\Response::addFormatter('json', new Dingo\Api\Http\Response\Format\Jsonp);
錯誤返回格式
這個非常重要,以前經常是拋出異常,錯誤提示非常不友好,不規范,一定要在config/api.php
中定義好錯誤格式:下面是默認的,我們需要討論討論,搞個自己的錯誤格式
$app['Dingo\Api\Exception\Handler']->setErrorFormat([
'error' => [
'message' => ':message',
'errors' => ':errors',
'code' => ':code',
'status_code' => ':status_code',
'debug' => ':debug'
]
]);
開啟Debug模式
API_DEBUG=true