关于这个 Transformer 不同接口复用问题?
1

比如咱的这个话题列表接口用的是TopicTransformer,那我话题详情也用这个TopicTransformer,但是详情接口却要多出来几个字段,这个该怎么来处理。虽然我这个接口也返回的是topic模型,但是想这个接口额外再返回其他字段

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
Summer
最佳答案

有两个接口,普通商品列表和团购列表,接口返回都经过ProductTransformer,但是团购接口返回数据肯定跟普通接口返回的不一样。

有两种方案:

  1. 都写在 ProductTransformer 里;
  2. 多写一个 GrouponProductTransformer;

个人喜好占的因素多一点,选择哪一种都可以,自己和你的团队商量后解决后即可,不用太纠结。

8个月前
讨论数量: 7
liyu001989

我们应该站在资源的角度去想问题,一个资源的字段是固定的

客户端不同界面需要的字段不同,但是需要客户端调用接口的时候告诉服务器该返回什么字段

例如提供 fields (需要的字段) 参数 /api/topics?fields=id,title,user_id,created_at

或者 except_fields (不需要的字段) /api/topics?except_fields=body,updated_at

达到资源字段过滤,减小流量消耗的目的

8个月前

@liyu001989 你好,不太理解你说的这个资源指什么,指模型还是接口,如果指接口的话,那是不是每个接口都要定义一个Transformer。

因为我现在开发时候确实遇到这种纠结的问题,如果按照你说的,需要什么字段就提供什么字段,会不会有点麻烦。
有这么一个例子:

一个商品,可以是普通商品,也可以是团购商品,团购商品继承商品模型,

有两个接口,普通商品列表和团购列表,接口返回都经过ProductTransformer,但是团购接口返回数据肯定跟普通接口返回的不一样,但是我又不想普通商品返回出多余字段。

如果又增加了几个接口,都跟商品相关,返回都需要经过ProductTransformer却都有着各自不同的字段需求,如何才能更方便的操作呢。

8个月前
Summer

有两个接口,普通商品列表和团购列表,接口返回都经过ProductTransformer,但是团购接口返回数据肯定跟普通接口返回的不一样。

有两种方案:

  1. 都写在 ProductTransformer 里;
  2. 多写一个 GrouponProductTransformer;

个人喜好占的因素多一点,选择哪一种都可以,自己和你的团队商量后解决后即可,不用太纠结。

8个月前
JimChen

@wallboy rest 的定义就是每一个URL就是一个资源,我觉得@liyu001989 他说的意思是把返回字段的选择交给客户端,让客户端告诉服务端我需要什么字段然后给我返回,服务端就根据客户端的需求过滤字段,这种方案就非常类似于GraphQL

7个月前

如果想写在一个transformer 里面的话, transformer构造方法中可以定义类型参数, 实例化时根据参数 在transform()中switch来 返回不同的数据格式。 如果,需要返回的数据格式变化非常多和灵活的话,这个就不怎么适用了。

2个月前

@liyu001989 这样放在API链接上感觉不太方便,Transformer里面有没有什么函数方法动态只取资源部分字段或者隐藏部分字段比如select(‘xxx1’,'xxx2',...)或者hiden('xxx1','xxx2')这种?

1个月前
liyu001989

@Sher 如果你的接口想要通用,就应该让客户端提供相关的参数。transformer 就是个类,你有想法可以自己实现。

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!