亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Laravel Api 開發(fā)系列 - Dingo API 的使用

jlanglang / 3634人閱讀

摘要:源碼使用本文使用的數(shù)據(jù)庫與基礎(chǔ)篇相同,故不再重復(fù)說明。使用的用法與之前的自定義用法類似,甚至更加簡單。首先定義路由如果要查看路由,需要使用創(chuàng)建控制器需要使用這個(gè)。

源碼

使用 Dingo Api

本文使用的數(shù)據(jù)庫與基礎(chǔ)篇相同,故不再重復(fù)說明。

初始化

安裝

$ composer require dingo/api:1.0.x@dev

注冊

/config/app.php
"providers" => [
    DingoApiProviderLaravelServiceProvider::class,
],

為了能夠自定義配置,首先需要執(zhí)行

$ php artisan vendor:publish --provider="DingoApiProviderLaravelServiceProvider"
Copied File [/vendor/dingo/api/config/api.php] To [/config/api.php]
Publishing complete.

可以看到多了個(gè) api.php 的配置文件,我們就可以在 .env 中對(duì)其進(jìn)行配置,一些常用的配置項(xiàng):

/.env
API_STANDARDS_TREE=vnd  # 公開的及商業(yè)項(xiàng)目用 vnd
API_SUBTYPE=api-demo  # 項(xiàng)目簡稱
API_PREFIX=api  # 前綴
API_VERSION=v1  # 不提供版本時(shí)使用的版本號(hào)
API_NAME="Laravel Api Demo"  # 使用 API Blueprint 命令生成文檔的時(shí)候才用到
API_STRICT=false # Strict 模式要求客戶端發(fā)送 Accept 頭而不是默認(rèn)在配置文件中指定的版本,這意味著你不能通過Web瀏覽器瀏覽API
API_DEFAULT_FORMAT=json 
API_DEBUG=true # 開啟 debug 模式

創(chuàng)建一個(gè)基本的端點(diǎn)(路由在 api 中的叫法)測試下是否配置成功

/routes/api.php
$api = app("DingoApiRoutingRouter");
$api->version("v1", function ($api) {

    $api->get("test", function () {
        return "It is ok";
    });

});

訪問 /api/test,返回 It is ok。

使用

Dingo 的用法與之前的自定義 api 用法類似,甚至更加簡單。首先定義路由

/routes/api.php
$api = app("DingoApiRoutingRouter");
$api->version("v1", function ($api) {

    $api->group(["namespace" => "AppApiControllers"], function ($api) {
        $api->resource("lessons","LessonController");
    });

});

如果要查看路由,需要使用

$ php artisan api:routes

創(chuàng)建控制器 - 需要使用 Helpers 這個(gè) trait。

/app/Api/Controllers/LessonController.php
collection($lessons, new LessonTransformer());
    }

    public function show($id)
    {    
        // 盡管我們返回的不是 json,但是 dingo 會(huì)自動(dòng)進(jìn)行轉(zhuǎn)化
        return Lesson::findOrFail($id);
    }
}

創(chuàng)建對(duì)應(yīng)的 LessonTransformer

/app/Api/Transformers/LessonTransformer.php
 $lesson["title"],
            "content" => $lesson["body"],
            "is_free" => (bool) $lesson["free"]
        ];
    }
}

訪問 api/lessons/3,結(jié)果如下

可以看出,Dingo 自動(dòng)將響應(yīng)的數(shù)據(jù)轉(zhuǎn)化為了 json,不過我們還需要將其格式化

public function show($id)
{    
    $lesson = Lesson::findOrFail($id);
    return $this->response->item($lesson, new LessonTransformer());
}

現(xiàn)在,就可以得到格式化的數(shù)據(jù)了

跟 Laravel 類似,也可以使用分頁

public function index()
{    
    $lessons = Lesson::paginate(15);
    return $this->response->paginator($lessons, new LessonTransformer());
}

將會(huì)返回 15 條信息以及分頁信息

當(dāng)請(qǐng)求出錯(cuò)時(shí),Dingo 會(huì)自動(dòng)幫我們進(jìn)行處理

也可以自定義

public function show($id)
{    
    $lesson = Lesson::find($id);
    if(!$lesson){
        return $this->response->errorNotFound("錯(cuò)誤的 id");
    }
    return $this->response->item($lesson, new LessonTransformer());
}

結(jié)果如下

結(jié)合簡單的認(rèn)證

我們可以在 Api 中加入自帶的驗(yàn)證功能,比如 HTTP 基礎(chǔ)認(rèn)證。首先,創(chuàng)建一個(gè)測試用戶

$ php artisan tinker
>>> $user = new AppUser();
>>> $user->name = "zen"
>>> $user->email = "ihuangmx@qq.com"
>>> $user->password = bcrypt("123456")
>>> $user->save()
=> true

在控制器中加入 Laravel 自帶的中間件即可

public function __construct()
{
    $this->middleware("auth.basic");
}

現(xiàn)在訪問時(shí)會(huì)提示輸入用戶名和密碼,這里的用戶名指的是郵箱

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/23055.html

相關(guān)文章

  • laravel5.5+dingo+JWT開發(fā)后臺(tái)API

    摘要:我的博客中文文檔中使用輔助文章參考這篇文章基本就能搭建出環(huán)境,我使用的版本跟他一樣,不知道別的版本有啥大的區(qū)別,但是網(wǎng)上找的其他一些文章使用的是舊的版本,封裝的東西路徑可能不一樣,可能會(huì)保錯(cuò),有些文檔還說要手動(dòng)添加和,其實(shí)新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文檔: https://www.bookstack....

    printempw 評(píng)論0 收藏0
  • Laravel+Dingo/Api 自定義響應(yīng)

    摘要:在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了這個(gè)第三方庫。是個(gè)很強(qiáng)大的庫,但在開發(fā)的過程中,需要自定義響應(yīng)字段。剛開始使用時(shí),返回如下手機(jī)號(hào)格式不正確這是輸入字段驗(yàn)證錯(cuò)誤時(shí),返回的結(jié)果。尤其是,需要對(duì)每一個(gè)對(duì)象進(jìn)行新建,然后序列化。 在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了Dingo/Api這個(gè)第三方Api庫。Dingo是個(gè)很強(qiáng)大的Api庫, 但在開發(fā)的過程中,需要自定義響應(yīng)字段。 剛開始使用Ding/A...

    xcold 評(píng)論0 收藏0
  • 20151103addinfo-laravel小練習(xí)-小結(jié)

    摘要:學(xué)習(xí)了一段時(shí)間的小結(jié)一下最近做的小任務(wù)寫下來才知道好亂糟糟,還是以記錄學(xué)習(xí)的資料為主,寫的很糟糕,還需要再揣度多屢屢思路。 學(xué)習(xí)了一段時(shí)間的laravel,小結(jié)一下最近做的laravel小任務(wù),寫下來才知道好亂糟糟,還是以記錄學(xué)習(xí)的資料為主,寫的很糟糕,還需要再揣度多屢屢思路。20151103-16 源碼地址:https://github.com/dingyiming/xc-add...

    jackzou 評(píng)論0 收藏0
  • laravelDingo api如何Custom ExceptionHandler

    摘要:背景在近期使用處理接口時(shí),發(fā)現(xiàn)本身中無法捕獲異常。后來查閱資料發(fā)現(xiàn),接管了請(qǐng)求的異常處理。導(dǎo)致無法自定義錯(cuò)誤返回,很是頭疼。最后在的找到了處理方法。 背景 在近期使用Dingo api處理接口時(shí),發(fā)現(xiàn)laravel本身appExceptionsHandler中無法捕獲異常。 后來查閱資料發(fā)現(xiàn),Dingo api接管了api請(qǐng)求的異常處理。導(dǎo)致無法自定義錯(cuò)誤返回,很是頭疼。 最后在di...

    Ku_Andrew 評(píng)論0 收藏0
  • laravel 5.4 + dingo api + jwt 代替Passport

    摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活來的,每個(gè)都試了一堆問題,到底你們做完有沒有總結(jié)過一次然后有幾個(gè)使用,完全不行啊,太監(jiān)版不是我想要的。后來,終于找到例子并實(shí)測成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活來的,每個(gè)都試了一堆問題,到底你們做完有沒有總結(jié)過一次?然后有幾個(gè)使用lunmen+dingo api+jwt,完全不行啊,太監(jiān)版不是我想要的。...

    _Zhao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<