摘要:最近用寫了一段時間的,總結一下自己的心得吧。開發我們可以看到,有些網站用驗證身份,有些用,當時我也糾結,然后看到一個不錯的說法。異常異常算是一大手筆了,處理好異常,可以讓你的代碼優雅很多。
最近用 Laravel 寫了一段時間的 API,總結一下自己的心得吧。
StartAPI開發我們可以看到,有些網站用token驗證身份,有些用OAuth2.0,當時我也糾結,然后看到一個不錯的說法。大方面,會涉及到給別人用的使用OAuth,自己使用的用token就足夠了
設計最初,最好在路由加個版本號,方便以后擴展
Route::prefix("v1")->group(function () { // more });
如果前端想跨域,請使用這個很方便的包barryvdh/laravel-cors
一個簡單的接口示例
API 開發總會離不開驗證,這里推薦使用jwt-auth,1.0 快要來了,新版本的文檔也很清晰
剛用jwt-auth時有疑問,Laravel自帶的token驗證使用的是數據庫api_token字段驗證,而不見jwt-auth需要這個
然后想自己看源碼,結果QAQ
最后去問了官方 >_<
原來用戶的信息已經存儲在token中加密
一開始有疑問,這樣保存,不會被解密嗎(真為自己智商擔憂 !_!)
后來才想起,jwt一開始就運行php artisan jwt:secret生成了秘鑰
你不泄露就保證安全了~~~
路由當然使用官方api的路由Route::apiResource(),一條更比五條強
路由的名字當然是RESTful的方式
保持動詞,復數形式,見名知義
有些長的路由,應該用什么分隔呢?
laravel用的是中劃線(-),因為谷歌收錄時,按中劃線劃分關鍵字,國內的是按下劃線(_)收錄,具體看自己了,我是喜歡下劃線 >_<
更多看這里: 路由命名規范
表單驗證可以使用控制器自帶的表單驗證,更推薦使用 表單類,能分離都分離出去,控制器不要處理太多事情。
能分離的代碼都不要吝嗇~~~
Laravel自帶的API Resource
用起來真的很方便,不過發現一個問題,--collection的格式總是轉不過來,后來直接放棄了
單個的使用Resources
集合的使用Resources::collection()發現,特別好用 >_<
不得不說,多對多關聯時,Laravel處理得太好了條件關聯
在上面這個例子中,如果關聯沒有被加載,則 posts 鍵將會在資源響應被發送給客戶端之前被刪除。
在有不確定是否輸出關聯數據時,這是一個很有用的功能!!!
響應輸出當時在 laravel-china 看到的這個帖子,然后覺得這個方式不錯,所以自己也這樣子,使用基類的方法統一響應輸出。
異常異常算是一大手筆了,處理好異常,可以讓你的代碼優雅很多。
AppExceptionsHandler::render方法可以捕獲到很多有用的異常,例如,我的代碼是這樣寫的:
UnauthorizedHttpException這個是捕獲jwt異常
ValidationException這個是表單異常,捕獲之后,表單錯誤消息可以很好的格式化,
ModelNotFoundException這個是模型找不到的異常,捕獲之后,可以直接在控制器直接這樣
// 未捕獲之前的寫法 public function show($id) { $user = User::find($id); if (! $user) { } // do something } // 現在 public function show($id) { $user = User::findOrFail($id); } // 甚至這樣 public function show(User $user) { // do something }
下面這兩個異常可以不捕獲,只是方便開發中查看錯誤消息
NotFoundHttpException404路由找不到的異常,沒什么好說的了
MethodNotAllowedHttpException這個是方法不對應,比如你是get路由,卻post請求
差點忘了這個,文檔非常非常重要
我是不怎么喜歡在注釋寫文檔的
使用swagger-ui+swagger-edit
下載swagger-ui
只需要dist目錄的東西(其他可以刪除了)
下載swagger-editor
只要dist目錄的東西和根目錄的index.html
我還把swagger-editor的index.html改成了edit.html,然后把這兩個東西整合到同一個目錄(記得修改css,js的位置)
新建兩個文件api.json,api.yaml 大概就和圖中差不多
要修改圖中箭頭所示成為api.json的位置
訪問edit.html可以書寫文檔
編寫語法
訪問index.html可以查看文檔
在edit.html寫好之后,導出json,然后粘貼到api.json文件
記得也把寫好的格式保存到api.yaml,因為清楚緩存之后,下次訪問時會消失
自己寫了一個packages就方便創建控制器,驗證
所有控制器繼承重寫過的基類,響應輸出方便。
例如完整驗證只需要三秒鐘
第一秒: php artisan api:auth
第二秒: 出現圖代表成功;
* 第三秒: 拿出手臂的勞力士,確定只過了三秒
更多的使用:laravel-api-helper
工作和API開發有關,用到其他有經驗了再回來補補。
更多參考RESTful API 設計指南
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28325.html
showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區優秀文章 Laravel 5.5+passport 放棄 dingo 開發 API 實戰,讓 API 開發更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項目中使用 - API 文檔撰寫方案 推薦 Laravel API 項目必須使用的 8 個...
摘要:什么是是一個開放的數據交換驗證標準,一般用來做輕量級的鑒權。由于許多接口設計是遵循無狀態的比如,所以是這一套機制的替代方案。組成由三部分組成頭部載荷簽名。 什么是JWT? JWT(Json Web Token)是一個開放的數據交換驗證標準rfc7519(https://tools.ietf.org/html/r...,一般用來做輕量級的API鑒權。由于許多API接口設計是遵循無狀態的(...
摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...
摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...
閱讀 1634·2021-11-02 14:42
閱讀 528·2021-10-18 13:24
閱讀 960·2021-10-12 10:12
閱讀 1821·2021-09-02 15:41
閱讀 3209·2019-08-30 15:56
閱讀 2880·2019-08-29 16:09
閱讀 2064·2019-08-29 11:13
閱讀 3623·2019-08-28 18:06