如何在遵循HATEOAS设计的RESTful服务端中使用react-admin?
可行的落地方案及优化建议
- 你调研的
target参数重定义方案已经有成熟的生产落地经验,调整逻辑如下:
- 自定义
dataProvider的getManyReference方法,内部提前维护一份资源关联映射表,用来校验传入的target是否为关联资源名称 - 匹配到关联资源后先调用
getOne拉取父资源的完整记录,拿到包含子资源链接的HATEOAS字段集 - 用传入的
resource参数匹配对应子资源的链接,将getManyReference接收的pagination、sort、filter参数转换为服务端要求的查询参数追加到链接后发起请求 - 增加父资源请求缓存,相同父ID无需重复拉取,可大幅降低重复请求开销
- 无侵入式替代方案(无需修改
target默认语义):
- 在调用
ReferenceManyField等触发getManyReference的组件时,通过useRecordContext钩子拿到当前完整的父资源记录,将子资源链接写入组件的filter自定义字段,比如filter.__links - 自定义
dataProvider的getManyReference方法优先读取filter.__links中的对应资源链接,直接发起请求,无需额外查询父资源,性能更优,也完全符合HATEOAS不硬编码资源路径的设计理念
关于现有开源实现的问题
目前社区开源的HAL、GraphQL类dataProvider确实普遍采用从self链接提取ID的逻辑,本质是为了适配传统以ID为核心的接口设计,你完全可以在自定义dataProvider中覆盖这部分处理逻辑,不需要沿用这类不符合HATEOAS理念的实现。
内容的提问来源于stack exchange,提问作者Blafasel42
相关产品推荐
相关产品推荐

