dingo 配置

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容