RESTful API 设计问题(很基础)

2016 年 11 月 21 日
 starvedcat

我现在有

resources :books

现在我想要设计 API ,显示同一个作者写的所有书

假设, ID 为 1 的书,作者是 A ,这本书的 URI 是

/books/1

那么这个“ A 写的所有书”的 URI 应该怎么设计呢?

这个“作者”就是一个字符串,不是一个 model

是不是这样:(用 similar 表示同一个作者)

/books/1/similar

但是这样的话,又没有体现出 A 的名字

8763 次点击
所在节点    Ruby on Rails
16 条回复
lslqtz
2016 年 11 月 21 日
/author/a/allbooks
kitalphaj
2016 年 11 月 21 日
楼上的就可以,不过还是建议把作者也作为一个 model 。
starvedcat
2016 年 11 月 21 日
@lslqtz
@kitalphaj
多谢两位,其实我的疑问就是,在 author 不是 model 的情况下,把 author 作为 URI 的一部分合不合适?(现在看来是合适的?)
csunny
2016 年 11 月 21 日
我以为, author 是不是 model 只是内部实现的问题,对外仍然可以作为 uri 一部分。不知道对不对。
maemual
2016 年 11 月 21 日
author 是不是 model 是内部实现的问题,和接口设计没有关系。
hanks315
2016 年 11 月 21 日
/books?author=A ,这样可以么
xia0ta0
2016 年 11 月 21 日
/authors/:author/books 或者 /books?author=:author 都可以的
tabris17
2016 年 11 月 21 日
你就想象一下,如果这些书按照文件夹排列你会怎么放置

/books/sorted-by-author/{author_id}
msg7086
2016 年 11 月 21 日
虽然 author 只是内部实现,但是 Rails 会要求你按照建模要求去建模。 Author 老老实实开一个 model 出来搞,然后什么都简单了。

这就是 CoC 的世界。
lijinma
2016 年 11 月 21 日
一般两种方式:

1. /authors/:author_id/books
2. /books?author_id=:author_id

参数都应该是 author_id 才对啊。另外, Model 肯定要建的,如果没有 model , author_name 只是 book 的一个属性,那么你应该这么做:

/books?author_name=:author_name
timestamp
2016 年 11 月 21 日
book/{id}
author/{id}
author/{author}/books
lxrmido
2016 年 11 月 21 日
其实,要体现作者的名字的话,参考暴雪的做法就行了:

author#233
lxrmido
2016 年 11 月 21 日
@lxrmido

当然在 URI 里#要换成其他
hustlike
2016 年 11 月 21 日
books/author/{author_id}
wizardoz
2016 年 11 月 21 日
/books/?author=A

restful 并不是完全抛弃查询参数.从所有书的列表中过滤作者为 A 的所有书.用查询参数过滤我觉得没毛病.
毕竟层次结构的 URL 只是一个一维的东西,要用来表示现实世界错综复杂的关系还是有困难.
bravecarrot
2016 年 11 月 21 日
觉得 11 楼的比较好,把 book 和 author 建成不同的 model ,更容易理解。
/books/1/similar 这样很不合情理
另外,一直觉得 url 中带问号太丑了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/321968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX