服务器端 多层嵌套RESTful API 应该如何设计?
发布于 9 年前 作者 Kaijun 8315 次预览 最后一次回复是 9 年前 来自 问答
最近使用Express服务器搭建一个RESTful API服务器,
之前看过一些 RESTful API的例子以及最佳实践, 但是在实现多层嵌套的API的时候, 发现很违背易用性: 就拿 post - comment 为例: 我想得到通过comment的id来得到它的详情
/api/posts/:postID/comments/:commentsID
但是在现实世界中, 知道commentID来获得comment并不需要依赖postID… 有时候前台请求comment的时候 只知道commentID,并不知道它对应的postID. 所以这样设计API是否不合理?
后来我改成了
/api/posts/:postID/comments/ - 用于POST comment, GET comments
/api/comments/:commentsID/ - 用于单个comment的CRUD
但是这样设计的话 Comments这项业务要分成两个Router 业务也不是很顺
所以应该怎么样设计 才比较合理?
4 回复
刚看了下StackOverflow上各种帖子 比如这个
有的人认为应该是我后来设计的这样
有的人认为 comments 脱离posts存在
有点启发 感觉第二种更加, 不知道各位怎么想?
@Kaijun 必须第二种!postId并不总是有用,而且若是comment下面还有资源继续加长url?岂不蛋疼
来自酷炫的 CNodeMD
GET /zoos:列出所有动物园 POST /zoos:新建一个动物园 GET /zoos/ID:获取某个指定动物园的信息 PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息) PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息) DELETE /zoos/ID:删除某个动物园 GET /zoos/ID/animals:列出某个指定动物园的所有动物 DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
@Kaijun p 这个思路是不错,在处理的路由时,会有冲突 GET /api/comments?postID=XXXX - 获取某个Post下所有comments GET /api/comments - 获取Post列表