[英]Building a REST API in Laravel
我將從無框架開發轉到我與Laravel的第一次接觸(使用版本5.1),我有點不知所措,需要處理的東西(遷移,種子,hateoas,變換器,單元測試,錯誤處理等) )。
我想在返回show method
部分時獲得一些幫助(遵循REST概念)。 我有以下數據庫結構:
公司 - >用戶 - >門票 - >互動 - >附件
現在,當列出特定故障單(如GET /customers/5/tickets/3
)時,屏幕需要顯示該故障單的所有交互,以及故障單表中的所有信息(有點像頁眉)和名稱創建特定交互的每個用戶。
考慮到關系,我應該從單個調用中返回所有數據,還是應該將票證表中的信息保留在前端(來自index method
調用)? 即使我應該保留票證信息(頁面標題),我仍然會為每次互動留下interaction join users
+ N個附件。 有什么方法可以解決這個問題?
我決定打開這個線程因為我試圖對這個調用進行單元測試,我無法決定是否應該為數據庫設置種子以獲得所需的所有信息。
為了更好地澄清我的請求,我對如何處理數據庫通信毫無疑問,我已經將模型設置為擴展Eloquent類,並且我定義了hasMany,belongsTo等數據。
namespace App\Models;
class Company extends Model {
/**
* Get the users from the company.
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function users() {
return $this->hasMany('App\Models\User');
}
}
為了不讓這個職位變得更大,我只會提供公司模式。 我希望你們都能得到我所擁有的公司 , 用戶 , 票證 , 互動和附件模型的概念,並且隨時可以使用。
問題在於處理它的做法。 GET /customers/5/tickets/3
是否應該返回票據記錄,所有交互 ,每次交互的用戶 ,每次交互的所有附件 ? 對於單個端點,這不是責任嗎? 就像我上面提到的那樣,我想我可以從前端要求保留票據信息,從前端列出所有票據時,它取消了票據記錄的負擔,但它仍然是TicketController,但仍然存在要加載的數據很多。 我正在尋求處理這些信息的建議,因為我之前從未這樣做過,我想盡量減少我會后悔做的事情。
我認為您應該返回API消費者顯示一個票據條目所需的所有信息。 我曾經在那些有查詢參數的項目上工作,告訴服務器要包含哪些相關模型,以及需要后續AJAX調用來獲取相關數據的其他項目,但我認為除非交互數據很大或非常罕見,否則不必要地復雜需要。
我建議為每個模型創建視圖部分,以便在一個大視圖無效的情況下具有靈活性。
解決你提到的N + 1查詢問題雖然微不足道。 這是一個渴望加載的完美情況。
嘗試這樣的事情: $tickets = Tickets::with('interactions','user')->get()
這將在一個查詢中加載所有相關數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.