使用Laravel建立休息資源
>
鑰匙要點- >使用ember.js約定在用laravel構建REST API時確保兼容並簡化開發過程。
- >使用工匠命令行工具在Laravel中創建資源控制器,以有效地管理靜止資源,而無需手動定義CRUD操作。 >通過在Laravel中的特定名稱空間中分組,增強API結構和可訪問性,可以有效地組織路線。
- >在控制器中實現錯誤處理和響應格式以管理數據檢索並確保強大的API端點。
- >利用Laravel的雄辯和API資源類別將模型數據轉換為JSON響應,從而促進了與Ember.js等前端框架的輕鬆集成。
- 從哪裡開始?
- 這是一個很難的問題。 Ember擁有自己的工作流程和邏輯。如果我們開始牢記這種邏輯來寫下我們的休息,我們將節省一些時間,我們將擁有一個不錯的體系結構和可重複使用的東西。我認為Ember在其休息建築上做出了不錯的選擇。看看Ember如何期望數據。 >
如果我們想檢索用戶列表,Ember會期望這樣的JSON:
第一個需要“用戶”,但是第二個需要“用戶”。第二個是複數。 Ember也為此規定了一些規則。如果您沒有通過以下方式自己指定複數
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
在與Ember更深入的風險之前,警告:Ember是困難而強大的。花點時間學習它的工作原理。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
>
Ember.Inflector.inflector.irregular('formula', 'formulae');
>
>我從Ember開始,看看該框架如何想要數據。如果您知道如何構建結構,那就容易了。驗證和從數據庫中獲取數據很容易,但是建立一個可靠的REST接口和一個智能的界面,這是困難的部分。準備其餘的
當您開發某些東西時,模型可能會非常有幫助。即使您是一名大師程序員,並且討厭處理Photoshop或GIMP,也有很好的原型工具。我使用了balsamiq,而我的頭版原型是:
>
讓我們開始構建它。 Open/App/views/index.php。這是我們的單頁應用程序。我們在本系列的第一部分中創建了此文件。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
允許我解釋這一點。 NAV標籤負責導航。帶有類標題區域的UL標籤是文本,該文本用作徽標,該徽標鏈接到應用程序的第一個級別。我還添加了一個帶有類別列表的下拉菜單。如果您想了解更多信息,請前往基礎5個文檔。在大多數情況下,它只是複制/粘貼操作,所以不必擔心此部分。
>
您是否注意到我們所有的代碼都在腳本標籤中? Ember使用車把作為模板語言。文本/X Handlebars的類型是一種特殊的腳本類型。如果您使用了Ember和車把一段時間,則可能使用模板名稱。我沒有在此中指定它們,因為此模板將用作所有應用程序的容器。如果您沒有指定名稱,Ember將其用作應用程序模板。資源控制器
>我開發了這個非常簡單的應用程序時,我發現在開發REST API時,資源控制器會派上用場。這就是其餘體系結構的重點 - 一切都是資源。所有資源都可以應用HTTP動詞:獲取,發布,刪除,put(更新)。並非所有動詞都需要。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
>
>為類別創建另一個資源控制器。如您所見,僅在此控制器中提供顯示和索引方法。我認為顯示單個類別並檢索所有類別就足夠了。>
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
>另一個控制器是圖像控制器。為什麼如果我們已經有一個圖像控制器?因為我們需要一個終點來提供圖像。 Dropbox擁有我們的圖像,但我們無法從外部訪問它們。如果您想公開文件夾,則必須付款。那是第一個原因。第二個原因是我不希望每個圖像都公開。簡而言之,該控制器將從Dropbox中獲取圖像並將其提供給客戶端。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
,最後但並非最不重要的是usercontroller:
>Ember.Inflector.inflector.irregular('formula', 'formulae');
路線
>現在我們擁有控制器,我們需要將這些控制器與其相關路線聯繫起來。讓我們更新 /app/routes.php。 首先,使用Route :: group。
{ "user": { "id": 1, "name": "firstName", "lastname": "lastname, "photos": [1, 2, 3] }, "photos": [ { "id": 1, "title": "Lorem Ipsum" }, { "id": 2, "title": "Lorem Ipsum" } ] }
>
<script type="text/x-handlebars"> <!-- The navigation top-bar --> <nav data-topbar> <ul > <li > <h1><a href="#">Photo Upload</a></h1> </li> </ul> <section > <!-- Left Nav Section --> <ul > <li > <a href="#">Categories</a> <ul > <li><a href="#">Category1</a></li> <li><a href="#">Category2</a></li> <li><a href="#">Category3</a></li> <li><a href="#">Category4</a></li> </ul> </li> </ul> </section> <div ></div> </nav><!-- END Navigation --> <!-- Content --> <div style="margin-top: 50px;"> <!-- The content will be here --> </div><!-- END Content --> </script>
>
>在該組內添加三個控制器。 PhotoController,UserController和categoryController。
php artisan controller:make PhotoController --except=create,edit
php artisan controller:make CategoryController --only=show,index
>
php artisan controller:make ImagesController --only=show
填充這些控制器
>現在我們可以開始構建一些東西。我不會在這裡介紹所有的休息,因為很難解釋所有事情 - 要更深入地了解更多內容,請參閱本系列。讓我們從照相控制器開始。
index()方法應返回數據庫中的最新照片。在這裡,我們可以做一些分頁,但我不希望事情變得太複雜。如果對評論有足夠的興趣,我們將在以後的文章中更新此應用程序。
>讓我解釋一下。我將所有內容插入了嘗試,捕捉並最終阻止。如果出現問題,請返回帶有狀態代碼的其他JSON。
php artisan controller:make UserController --only=show,index
>從數據庫中獲取9張照片。然後,拍攝每張照片,並以格式化的數組顯示,該數組將在以後轉換為JSON格式。
<span>Route<span>::</span>group(array('prefix' => 'api/v1'), function() </span> <span>{ </span> <span>});</span>
>讓我們立即填寫show()方法。同樣,我們想用給定的ID檢索有關照片的所有信息。
構建自己的應用程序時,請不要忘記將驗證添加到用戶輸入中。
usercontroller的邏輯幾乎相同。這次,我們將要求用戶模型。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
>一切幾乎相同,只有模型和字段改變。輸出JSON。表演方法看起來像這樣:
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
此功能通過給定的ID檢索用戶。
我們要處理的最後一個控制器是ImagesController。邏輯就像從文件系統中獲取圖像並為其服務一樣簡單。當您保存文件並使用本地文件系統或服務器文件系統檢索時,這很簡單。不幸的是,您無法將文件保存到Heroku,因此您將使用Dropbox並從此端點提供這些文件。導入Dropbox客戶端和Flysystem適配器。如果我們的環境是本地的,那麼我們將與本地適配器一起使用Flysystem;如果環境正在生產,請使用Dropbox適配器。將Flysystem類分配給該控制器內部的私人變量。
Ember.Inflector.inflector.irregular('formula', 'formulae');
>
{ "user": { "id": 1, "name": "firstName", "lastname": "lastname, "photos": [1, 2, 3] }, "photos": [ { "id": 1, "title": "Lorem Ipsum" }, { "id": 2, "title": "Lorem Ipsum" } ] }
>
<script type="text/x-handlebars"> <!-- The navigation top-bar --> <nav data-topbar> <ul > <li > <h1><a href="#">Photo Upload</a></h1> </li> </ul> <section > <!-- Left Nav Section --> <ul > <li > <a href="#">Categories</a> <ul > <li><a href="#">Category1</a></li> <li><a href="#">Category2</a></li> <li><a href="#">Category3</a></li> <li><a href="#">Category4</a></li> </ul> </li> </ul> </section> <div ></div> </nav><!-- END Navigation --> <!-- Content --> <div style="margin-top: 50px;"> <!-- The content will be here --> </div><!-- END Content --> </script>
>
php artisan controller:make PhotoController --except=create,edit
繼續嘗試創建類別controller。我把它作為適合你的練習。
測試API
>我必須承認,我愛上了phpstorm,並且在測試REST API時,我使用了稱為REST客戶端的工具。這是一個圖形界面,簡化了測試。如果需要,也可以使用終端中的捲發。讓我們進行一些測試:
php artisan controller:make CategoryController --only=show,index
>
>,如果我想以更好的格式查看結果,我可以簡單地按JS圖標,而剩下的客戶端給我更好的表示。
>您還可以測試其他動詞,例如DELETE和POST。繼續進行測試。您還可以使用其他客戶進行測試:REST控制台和Postman是其中兩個。第一個僅在Chrome上可用,第二個Postman可在Chrome和Firefox上使用。郵遞員似乎更簡單,更友好。繼續嘗試。
結論
Laravel簡化了使用資源控制器構建REST API的工作。我們看到瞭如何通過使用Ember慣例構建界面。 Ember選擇了一個良好的界面,並堅持使用該邏輯,您可以輕鬆地在其他平台上重複使用代碼。在這一部分中,我更多地關注概念,並且沒有做太多的編碼。填寫所有方法並添加驗證將不必要地擴展此帖子,而該帖子已經足夠長,並且在一個長系列中。開發時,您應始終驗證輸入。不要忘記它,測試,測試,測試。測試應該是您最好的朋友。
在本系列的最後一期中,我們將將它們全部放在一個功能齊全的實時應用程序中。
常見問題有關用Laravel建立休息資源的問題
>如何在laravel中創建一個資源控制器?該命令是PHP Artisan Make:Controller Controllername -Resource。將“ ControlerName”替換為要給控制器的名稱。此命令將使用用於所有必要的CRUD操作的方法創建一個控制器。請記住,控制器的名稱應以單數形式,應該是有效的PHP類名稱。>我如何使用Laravel API資源?
使用Laravel API資源,您首先需要創建資源類。可以使用Artisan Command Php Artisan Make:Resource ResourceName來完成此操作。創建資源類後,您可以在資源的Toarray方法中定義轉換。要從路線返回資源,您只需返回資源類的新實例,傳遞要轉換的數據。
如何自定義Laravel資源返回的數據? 🎜>您可以通過修改資源類中的Toarlay方法來自定義Laravel資源返回的數據。 ToArray方法是將雄辯的模型屬性映射到API響應屬性的地方。您可以根據需要添加,刪除或更改屬性。
在Laravel中的資源和集合之間有什麼區別?
在Laravel中,資源類代表一個單個模型,需要將其轉換為JSON結構,而資源收集類代表集合資源。資源集合用於將模型或集合轉換為JSON。 Artisan Command Php Artisan Make:Resource ResourceCenameCollection-收集。這將創建一個資源集合類,您可以在其中定義集合的轉換。
>如何從Laravel的路由返回資源集合?在Laravel中,您只需返回資源收集類的新實例,傳遞了要轉換的模型集合。
我可以將元數據添加到Laravel中的資源響應中嗎?是的,你可以將元數據添加到Laravel中的資源響應中。這可以通過定義資源上的方法來完成。使用方法應返回要在響應中包含的元數據數組。
>
以上是使用Laravel建立休息資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...
