路由设计问题反思

来源:10-1 获取期刊点赞信息

qq_野火燎原_0

2020-03-15

请问在获取期刊点赞信息接口的设计时,课程里是这么设计的:GET: /:type/:id/favor, 需要传递两个参数,一个type,一个id

router.get('/:type/:id/favor', new Auth().m, async ctx => {
  const v = await new ClassicValidator().validate(ctx)
  const { type, id } = v.get('path')
  const art = await Art.getData(id, type)
  const { uid } = ctx.auth
  const likeStatus = await Favor.userLikeIt(id, type, uid)
  if (!art) {
    throw new global.errs.NotFound()
  }
  ctx.body = {
    favNums: art.favNums,
    likeStatus
  }
})

想问,如果只用期刊号(index),也能实现,从我的角度看,这种方式多调用了一次查询接口,但相对前端来说,我传递的参数都是index,对前端更友好,不是吗? 想请问下,这样设计有什么不合理的地方吗?

下面是通过index来设计的接口:

router.get('/:index/favor', new Auth().m, async ctx => {
   const v = await new ClassicValidator().validate(ctx, {
    id: 'index'
  })
  const { index } = v.get('path')
  const flow = await Flow.findOne({
    where: {
      index
    }
  })
  if (!flow) {
    throw new global.errs.NotFound()
  }
  const { artId, type } = flow
  const art = await Art.getData(artId, type)
  const { uid } = ctx.auth
  const likeStatus = await Favor.userLikeIt(artId, type, uid)
   if (!art) {
    throw new global.errs.NotFound()
  }
  ctx.body = {
    favNums: art.favNums,
    likeStatus
  }
})
写回答

2回答

或许是鱼跃

2022-04-08

你这么设计的接口只能用来查询喜欢的期刊,不能查询喜欢的书籍信息,局限比较大,后期书籍要使用还需要再来一个接口才能实现

0
0

7七月

2020-03-16

传递两个参数为什么得出结论是调用两次接口?

0
1
qq_野火燎原_0
老师,我说的是我的那种设计方式(/:index/favor),这种通过index去获取信息的方式会调用两次接口,但从前端的角度来说(因为我自己也是一个前端),这样就跟其他接口(如获取上一期,下一期)的接口形式保持一致,只是这样设计,就需要多查一个Flow表,找出对应的artId及type,再去获取期刊信息,需要多调用一次接口
2020-03-16
共1条回复

Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

理解异步编程本质/培养面向对象思维,独立完成Node.js服务端开发

2182 学习 · 872 问题

查看课程