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