RESTful 设计的具体场景问题.

发布于 2022-09-11 23:51:25 字数 1037 浏览 38 评论 0

假设有这么一个后台管理页面:

idnameagestatusaction
1张三18Pedit/delete
2李四17Aedit/delete
3王五16Sedit/delete

其中除 ID 栏外,每一个格子都可以直接点击编辑. 比如点击张三,切换为输入框,输入新 name, 鼠标失去焦点,保存改变后的值.

action 栏中的 edit,点击之后跳到 编辑页, 修改所有的信息.

采用 JWT 模式开发. 那么 edit 部分的 API 应该如何设计?

第一种

  1. PUT /v1/person/name
  2. PUT /v1/person/age
  3. PUT /v1/person/status
  4. PUT /v1/person

第二种

  1. PUT /v1/person 只提供一个 API,这个 API 处理所有情况,不管是单独的字段还是所有的字段更新

第三种

  1. PUT /v1/person/status
  2. PUT /v1/person

提供一个更新所有的字段的 API, 但是如果更新 status 逻辑过于复杂,则把 更新 status 单独抽离,其他的字段单独更新走第二个.

这里我们假设,更新 age/name 不会触发复杂的业务逻辑,但是status 如果变化会触发非常复杂的业务逻辑

应该如何设计 API.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

绝不服输 2022-09-18 23:51:26

实际上,多数情况下,使用第二种形式,否则api接口会太多。

咿呀咿呀哟 2022-09-18 23:51:26

不要要特殊权限的就放一起,如果status要单独权限的话就新加一个接口, 其他就PUT /v1/person:id就行了

╭ゆ眷念 2022-09-18 23:51:26

建议你只提供一个接口 PUT /v1/person/:id,这个接口内部再根据不同的数据变化来进行分别的处理,如果内部逻辑太复杂,可以用 OO 思想和设计模式继续拆,但与外部的接口无关。

另外,理论上来说,一般不会直接去更新 status,而是由于更新了某些其他数据,或者由于其他业务,引起 status 在业务内变化。当然这跟业务逻辑设计有关。你现在这种设计,感觉比较像是通过 status 变化来触发业务过程。

灼痛 2022-09-18 23:51:26

更新不同数据能和业务完全解耦吗?API 应该如何设计?
业务上有一个submission流程,可以create,update,resubmit,
表A:

idimage_uuidsalbum_idstatus_id
1js232318P
2d23zsd17A
3se34sf16S

表B:

idsubmission_idpublication_namepublication_user_id
123123blue23
24134pink44
353422yellow444
  1. update业务流程:对数据来说,只是更新 表A image_uuids
  2. resubmit流程:只是更新 表B publication status_id 字段,并且发邮件
  3. 更新status字段(不在submission这个业务流程里面),额外的template

API都用 PUT /v1/submission/{id} 这种吗?
初进入API设计,求大神们指点

@边城

她如夕阳 2022-09-18 23:51:26

第二种
不管你的/v1/person有什么字段,有多么复杂, 客户端只关心

{
    "name":"xxx",
    "age": 18,
    "status":0
}

这个结构

一生独一 2022-09-18 23:51:26

GET /zoos/ID/animals:列出某个指定动物园的所有动物

我有个疑问,对于这种 url , 为什么不采用 GET /animals?zoos={id} 方式呢? @边城

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文