一个好的 API 响应应该是什么样的?

使用 Dingo 开发接口,transformer 做数据转换,同事嫌弃每次返回的数据都太多不好对接:sweat_smile:

例如商品列表和商品详情两个接口,当然使用的是同一个 transformer,所以返回的数据量都是一样的,然后前端就开始嫌弃“列表页面不需要那么多数据,有封面标题ID就行……”

他们更愿意对接那种直接在控制器处理数据,然后 response()->json(),这样虽然可以按需返回,但是复用性真的太差了

所以我想知道,我的做法是不是真的不合规矩?或者说 Transformer 有没有什么方法可以动态响应参数?之前看到文章实现资源类动态响应参数,在这里好像不太适用

:computer: & :coffee:
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

列表的数据和详情数据当然不需要一样,可以用两个 Transformer: ProductSummaryTransformer ProductDetailTransformer

4年前 评论
W-W (楼主) 4年前
dongzhiyu 4年前
讨论数量: 10
leo

列表的数据和详情数据当然不需要一样,可以用两个 Transformer: ProductSummaryTransformer ProductDetailTransformer

4年前 评论
W-W (楼主) 4年前
dongzhiyu 4年前

laravel 自带的 resource 感觉很好用,可以根据条件返回资源

4年前 评论

我感觉这个很灵活吧,你可以在transform里面对路由判断来决定返回的数据吧

4年前 评论

是的,如果数据差太多,那就不好

GraphQL 不知道如何

4年前 评论

没有api文档?前端按照文档来,需要管返回了别的字段,只要返回了,需要的字段了不就行了?

4年前 评论

文章列表Article::all(['title','id']);

文章详情Article::find($id,['title','content','id'])

return [
  'title' => $data->title,
  'content' => $data->content,
  'id' => $data->id
];

用同一个 transformer,

如果不想多余的字段返回给前端,
可以判断数据是不是null

是就销毁key

4年前 评论
StringKe

可以试试 Graphql 前端决定要什么数据

4年前 评论
giao哥

根据自身业务去定义啊 难道一个响应格式能满足所有嘛?

4年前 评论

使用官方的resource 根据UI设计图 创建两个resource文件 我都是这么干的

4年前 评论
W-W (楼主) 4年前

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