API 开发中的小问题

是这样。
以前写 Api 的时候一般都是前端需要什么样的数据, 就写什么样的接口。 打个比方,前端需要文章列表的接口,其中每个文章要附带作者的一些信息。 我会 Post with user 用模型关联一块查出来, 然后 Resource 里面对查出来的数据进行格式化, 然后路由哪里增加一个 getPostWithUser 接口。

现在前端离职了, 我自己一个人又写前端又写后端就懒得搞,直接创建两个 RestFull 接口, 然后前端进行两次请求, 分别将文章列表和用户信息请求下来然后存在 store 然后前端自己处理数据逻辑。这种的话前后端代码可以写的很简单,很好维护。 但是缺点也很明显, 那就是请求数会比以前多很多。大家遇到过这样的问题嘛? 是怎么样的取舍。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

GraphQL :flushed:

5个月前 评论
徵羽宫 (楼主) 5个月前
随波逐流 5个月前
sanders 5个月前
小李世界 (作者) 5个月前
讨论数量: 26

怎么简单怎么来?不纠结就对了 :smile:

5个月前 评论

GraphQL :flushed:

5个月前 评论
徵羽宫 (楼主) 5个月前
随波逐流 5个月前
sanders 5个月前
小李世界 (作者) 5个月前

卡了再说 :+1:

5个月前 评论

我个人会选中请求比较多的方法,HTTP连接其实是重用的,后端只要做好索引和缓存,性能方面应该问题不大

5个月前 评论

项目不赶进度想怎么来就怎么来,主打一个爱折腾。

5个月前 评论

单独的获取用户数据,用户数据可能会被抓取,用户数据就意味着不安全

5个月前 评论
徵羽宫 (楼主) 5个月前
徵羽宫 (楼主) 5个月前

一次接口全部返回

5个月前 评论

用restful,前端自己组装

5个月前 评论
随波逐流

我也有一样的问题

5个月前 评论

“很简单,给前端开放一个 exec接口,自己写SQL查 :joy:”

5个月前 评论
徵羽宫 (楼主) 5个月前
xiusin (作者) 5个月前

影响不大的,你可以了解一下 HTTP2 的多路复用

5个月前 评论
徵羽宫 (楼主) 5个月前
sanders

Resource 里面可以通过 relationLoaded() 方法判断当前资源是否有加载指定关系模型。所以我们的写法一般如下:

    public function toArray($request)
    {
        return  $this->when($this->resource instanceof Post, fn() =>
            [
                ... parent::toArray($request),
                'author'      => $this->whenLoaded(
                    'author',
                    fn() => AuthorResource::make(data_get($this->resource, 'author'))
                ),
            ]
        );
    }

你在新的接口中查询 with('author') 就可以通过相同的资源响应你所需的结果。当然也可以在原有接口增加查询参数with_user=1,来判断是否加载用户信息,但这样做会提升一点控制器方法的复杂度。

5个月前 评论
徵羽宫 (楼主) 5个月前
sunny123456 5个月前
sanders (作者) 5个月前

我的情况和你一样,也是一个人写前后端,但是我嫌resource太麻烦了。大部分的resource封装的类型都只用一次,所以我是结果查出来自动手动直接转一次,直观,易修改。

$result = Post::query()
   ->with([
     'user:id,name'
   ])
   ->paginate($request->page_size);
$result->through(function($item) {
  return [
    'id' => $item->id,
    'title' => $item->title,
    'content' => $item->content,
    'user_id' => $item->user_id,
    'user_name' => $item->user ? $item->user->name : '已注销',
  ];
});
return ResponseUtil::ret(0, 'ok', $result);
5个月前 评论

后端还是:创建两个 RestFull 接口

不过后端额外增加一个接口,一次请求拿2个或以上接口数据

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!