dingo 配置

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容