摘要:最近用寫了一段時(shí)間的,總結(jié)一下自己的心得吧。開發(fā)我們可以看到,有些網(wǎng)站用驗(yàn)證身份,有些用,當(dāng)時(shí)我也糾結(jié),然后看到一個(gè)不錯(cuò)的說法。異常異常算是一大手筆了,處理好異常,可以讓你的代碼優(yōu)雅很多。
最近用 Laravel 寫了一段時(shí)間的 API,總結(jié)一下自己的心得吧。
StartAPI開發(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è)簡單的接口示例
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)證,更推薦使用 表單類,能分離都分離出去,控制器不要處理太多事情。
能分離的代碼都不要吝嗇~~~
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-editor的index.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
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è)...
摘要:什么是是一個(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)的(...
摘要:的機(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 ...
摘要:菜鳥教程框架中文手冊入門目標(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...
摘要:菜鳥教程框架中文手冊入門目標(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...
閱讀 1639·2021-11-02 14:42
閱讀 534·2021-10-18 13:24
閱讀 973·2021-10-12 10:12
閱讀 1827·2021-09-02 15:41
閱讀 3216·2019-08-30 15:56
閱讀 2886·2019-08-29 16:09
閱讀 2067·2019-08-29 11:13
閱讀 3632·2019-08-28 18:06