RESTful 设计的具体场景问题.
假设有这么一个后台管理页面:
id | name | age | status | action |
---|---|---|---|---|
1 | 张三 | 18 | P | edit/delete |
2 | 李四 | 17 | A | edit/delete |
3 | 王五 | 16 | S | edit/delete |
其中除 ID 栏外,每一个格子都可以直接点击编辑. 比如点击张三,切换为输入框,输入新 name, 鼠标失去焦点,保存改变后的值.
action 栏中的 edit,点击之后跳到 编辑页, 修改所有的信息.
采用 JWT 模式开发. 那么 edit 部分的 API 应该如何设计?
第一种
- PUT /v1/person/name
- PUT /v1/person/age
- PUT /v1/person/status
- PUT /v1/person
第二种
- PUT /v1/person 只提供一个 API,这个 API 处理所有情况,不管是单独的字段还是所有的字段更新
第三种
- PUT /v1/person/status
- PUT /v1/person
提供一个更新所有的字段的 API, 但是如果更新 status 逻辑过于复杂,则把 更新 status 单独抽离,其他的字段单独更新走第二个.
这里我们假设,更新 age/name 不会触发复杂的业务逻辑,但是status 如果变化会触发非常复杂的业务逻辑
应该如何设计 API.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
实际上,多数情况下,使用第二种形式,否则api接口会太多。
不要要特殊权限的就放一起,如果status要单独权限的话就新加一个接口, 其他就PUT /v1/person:id就行了
建议你只提供一个接口
PUT /v1/person/:id
,这个接口内部再根据不同的数据变化来进行分别的处理,如果内部逻辑太复杂,可以用 OO 思想和设计模式继续拆,但与外部的接口无关。另外,理论上来说,一般不会直接去更新
status
,而是由于更新了某些其他数据,或者由于其他业务,引起status
在业务内变化。当然这跟业务逻辑设计有关。你现在这种设计,感觉比较像是通过status
变化来触发业务过程。更新不同数据能和业务完全解耦吗?API 应该如何设计?
业务上有一个submission流程,可以create,update,resubmit,
表A:
表B:
API都用 PUT /v1/submission/{id} 这种吗?
初进入API设计,求大神们指点
@边城
第二种
不管你的/v1/person有什么字段,有多么复杂, 客户端只关心
这个结构
GET /zoos/ID/animals:列出某个指定动物园的所有动物
我有个疑问,对于这种 url , 为什么不采用 GET /animals?zoos={id} 方式呢? @边城