成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 開發(fā) RESTful API 的一些心得

tinyq / 931人閱讀

摘要:最近用寫了一段時(shí)間的,總結(jié)一下自己的心得吧。開發(fā)我們可以看到,有些網(wǎng)站用驗(yàn)證身份,有些用,當(dāng)時(shí)我也糾結(jié),然后看到一個(gè)不錯(cuò)的說法。異常異常算是一大手筆了,處理好異常,可以讓你的代碼優(yōu)雅很多。

最近用 Laravel 寫了一段時(shí)間的 API,總結(jié)一下自己的心得吧。

Start

API開發(fā)我們可以看到,有些網(wǎng)站用token驗(yàn)證身份,有些用OAuth2.0,當(dāng)時(shí)我也糾結(jié),然后看到一個(gè)不錯(cuò)的說法。大方面,會(huì)涉及到給別人用的使用OAuth,自己使用的用token就足夠了

設(shè)計(jì)最初,最好在路由加個(gè)版本號,方便以后擴(kuò)展

Route::prefix("v1")->group(function () {
    // more
});

如果前端想跨域,請使用這個(gè)很方便的包barryvdh/laravel-cors


一個(gè)簡單的接口示例

驗(yàn)證

API 開發(fā)總會(huì)離不開驗(yàn)證,這里推薦使用jwt-auth,1.0 快要來了,新版本的文檔也很清晰

剛用jwt-auth時(shí)有疑問,Laravel自帶的token驗(yàn)證使用的是數(shù)據(jù)庫api_token字段驗(yàn)證,而不見jwt-auth需要這個(gè)

然后想自己看源碼,結(jié)果QAQ

最后去問了官方 >_<

原來用戶的信息已經(jīng)存儲(chǔ)在token中加密

一開始有疑問,這樣保存,不會(huì)被解密嗎(真為自己智商擔(dān)憂 !_!)

后來才想起,jwt一開始就運(yùn)行php artisan jwt:secret生成了秘鑰

你不泄露就保證安全了~~~

路由

當(dāng)然使用官方api的路由Route::apiResource(),一條更比五條強(qiáng)

路由的名字當(dāng)然是RESTful的方式

保持動(dòng)詞,復(fù)數(shù)形式,見名知義

有些長的路由,應(yīng)該用什么分隔呢?

laravel用的是中劃線(-),因?yàn)楣雀枋珍洉r(shí),按中劃線劃分關(guān)鍵字,國內(nèi)的是按下劃線(_)收錄,具體看自己了,我是喜歡下劃線 >_<

更多看這里: 路由命名規(guī)范

表單驗(yàn)證

可以使用控制器自帶的表單驗(yàn)證,更推薦使用 表單類,能分離都分離出去,控制器不要處理太多事情。

能分離的代碼都不要吝嗇~~~

數(shù)據(jù)轉(zhuǎn)換

Laravel自帶的API Resource

用起來真的很方便,不過發(fā)現(xiàn)一個(gè)問題,--collection的格式總是轉(zhuǎn)不過來,后來直接放棄了

單個(gè)的使用Resources

集合的使用Resources::collection()發(fā)現(xiàn),特別好用 >_<

不得不說,多對多關(guān)聯(lián)時(shí),Laravel處理得太好了條件關(guān)聯(lián)

在上面這個(gè)例子中,如果關(guān)聯(lián)沒有被加載,則 posts 鍵將會(huì)在資源響應(yīng)被發(fā)送給客戶端之前被刪除。

在有不確定是否輸出關(guān)聯(lián)數(shù)據(jù)時(shí),這是一個(gè)很有用的功能?。。?/p> 響應(yīng)輸出

當(dāng)時(shí)在 laravel-china 看到的這個(gè)帖子,然后覺得這個(gè)方式不錯(cuò),所以自己也這樣子,使用基類的方法統(tǒng)一響應(yīng)輸出。

異常

異常算是一大手筆了,處理好異常,可以讓你的代碼優(yōu)雅很多。
AppExceptionsHandler::render方法可以捕獲到很多有用的異常,例如,我的代碼是這樣寫的:

UnauthorizedHttpException這個(gè)是捕獲jwt異常
ValidationException這個(gè)是表單異常,捕獲之后,表單錯(cuò)誤消息可以很好的格式化,
ModelNotFoundException這個(gè)是模型找不到的異常,捕獲之后,可以直接在控制器直接這樣

// 未捕獲之前的寫法
public function show($id)
{
    $user = User::find($id);
    if (! $user) {
        
    }
    
    // do something
}

// 現(xiàn)在
public function show($id)
{
    $user = User::findOrFail($id);
}
// 甚至這樣
public function show(User $user)
{
    // do something
}

下面這兩個(gè)異??梢圆徊东@,只是方便開發(fā)中查看錯(cuò)誤消息

NotFoundHttpException404路由找不到的異常,沒什么好說的了
MethodNotAllowedHttpException這個(gè)是方法不對應(yīng),比如你是get路由,卻post請求

文檔

差點(diǎn)忘了這個(gè),文檔非常非常重要

我是不怎么喜歡在注釋寫文檔的

使用swagger-ui+swagger-edit

下載swagger-ui

只需要dist目錄的東西(其他可以刪除了)

下載swagger-editor

只要dist目錄的東西和根目錄的index.html

我還把swagger-editorindex.html改成了edit.html,然后把這兩個(gè)東西整合到同一個(gè)目錄(記得修改css,js的位置)

新建兩個(gè)文件api.json,api.yaml 大概就和圖中差不多

要修改圖中箭頭所示成為api.json的位置

訪問edit.html可以書寫文檔

編寫語法

訪問index.html可以查看文檔

edit.html寫好之后,導(dǎo)出json,然后粘貼到api.json文件

記得也把寫好的格式保存到api.yaml,因?yàn)榍宄彺嬷?,下次訪問時(shí)會(huì)消失

自己寫了一個(gè)packages

就方便創(chuàng)建控制器,驗(yàn)證

所有控制器繼承重寫過的基類,響應(yīng)輸出方便。

例如完整驗(yàn)證只需要三秒鐘

第一秒: php artisan api:auth

第二秒: 出現(xiàn)圖代表成功;

* 第三秒: 拿出手臂的勞力士,確定只過了三秒

更多的使用:laravel-api-helper


工作和API開發(fā)有關(guān),用到其他有經(jīng)驗(yàn)了再回來補(bǔ)補(bǔ)。

更多參考

RESTful API 設(shè)計(jì)指南

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28325.html

相關(guān)文章

  • PHP / Laravel API 開發(fā)推薦閱讀清單

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開發(fā) API 實(shí)戰(zhàn),讓 API 開發(fā)更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項(xiàng)目中使用 - API 文檔撰寫方案 推薦 Laravel API 項(xiàng)目必須使用的 8 個(gè)...

    shmily 評論0 收藏0
  • 關(guān)于JWT(Json Web Token)思考及使用心得

    摘要:什么是是一個(gè)開放的數(shù)據(jù)交換驗(yàn)證標(biāo)準(zhǔn),一般用來做輕量級的鑒權(quán)。由于許多接口設(shè)計(jì)是遵循無狀態(tài)的比如,所以是這一套機(jī)制的替代方案。組成由三部分組成頭部載荷簽名。 什么是JWT? JWT(Json Web Token)是一個(gè)開放的數(shù)據(jù)交換驗(yàn)證標(biāo)準(zhǔn)rfc7519(https://tools.ietf.org/html/r...,一般用來做輕量級的API鑒權(quán)。由于許多API接口設(shè)計(jì)是遵循無狀態(tài)的(...

    taohonghui 評論0 收藏0
  • PHP相關(guān)

    摘要:的機(jī)器學(xué)習(xí)庫的機(jī)器學(xué)習(xí)庫,包括算法交叉驗(yàn)證神經(jīng)網(wǎng)絡(luò)等內(nèi)容。在即將到來的大會(huì)上,她將和大家分享在機(jī)器學(xué)習(xí)領(lǐng)域的全新可能。入門總結(jié)入門相關(guān),如安裝配置基本使用等。 基于 Swoole 開發(fā) PHP 擴(kuò)展 Swoole-1.9.7 增加了一個(gè)新特性,可以基于 Swoole 使用 C++ 語言開發(fā)擴(kuò)展模塊,在擴(kuò)展模塊中可以注冊 PHP 內(nèi)置函數(shù)和類。現(xiàn)在可以基于 Swoole 來編寫 PHP ...

    lewinlee 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標(biāo)使用搭建通過對數(shù)據(jù)增刪查改沒了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...

    Jeffrrey 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標(biāo)使用搭建通過對數(shù)據(jù)增刪查改沒了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...

    sf190404 評論0 收藏0

發(fā)表評論

0條評論

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