簡體   English   中英

在Laravel中構建REST API

[英]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');
    }
}

為了不讓這個職位變得更大,我只會提供公司模式。 我希望你們都能得到我所擁有的公司用戶票證互動附件模型的概念,並且隨時可以使用。

編輯2

問題在於處理它的做法。 GET /customers/5/tickets/3是否應該返回票據記錄,所有交互 ,每次交互的用戶 ,每次交互的所有附件 對於單個端點,這不是責任嗎? 就像我上面提到的那樣,我想我可以從前端要求保留票據信息,從前端列出所有票據時,它取消了票據記錄的負擔,但它仍然是TicketController,但仍然存在要加載的數據很多。 我正在尋求處理這些信息的建議,因為我之前從未這樣做過,我想盡量減少我會后悔做的事情。

我認為您應該返回API消費者顯示一個票據條目所需的所有信息。 我曾經在那些有查詢參數的項目上工作,告訴服務器要包含哪些相關模型,以及需要后續AJAX調用來獲取相關數據的其他項目,但我認為除非交互數據很大或非常罕見,否則不必要地復雜需要。

我建議為每個模型創建視圖部分,以便在一個大視圖無效的情況下具有靈活性。

解決你提到的N + 1查詢問題雖然微不足道。 這是一個渴望加載的完美情況。

嘗試這樣的事情: $tickets = Tickets::with('interactions','user')->get()

這將在一個查詢中加載所有相關數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM