繁体   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