
我现在有
resources :books 现在我想要设计 API ,显示同一个作者写的所有书
假设, ID 为 1 的书,作者是 A ,这本书的 URI 是
/books/1 那么这个“ A 写的所有书”的 URI 应该怎么设计呢?
这个“作者”就是一个字符串,不是一个 model/p>
是不是这样:(用 similar 表示同一个作者)
/books/1/similar 但是这样的话,又没有体现出 A 的名字
我后来是这样做的:
/authors/A/all_books /authors/A/all_books?from=1 (这样就可以在页面上添加一个返回那本书的按钮) 1 lslqtz 2016-11-21 07:21:22 +08:00 /author/a/allbooks |
2 kitalphaj 2016-11-21 07:24:27 +08:00 楼上的就可以,不过还是建议把作者也作为一个 model 。 |
3 starvedcat OP |
4 csunny 2016-11-21 07:59:01 +08:00 我以为, author 是不是 model 只是内部实现的问题,对外仍然可以作为 uri 一部分。不知道对不对。 |
5 maemual 2016-11-21 08:22:39 +08:00 via iPhone author 是不是 model 是内部实现的问题,和接口设计没有关系。 |
6 hanks315 2016-11-21 08:47:44 +08:00 via iPhone /books?author=A ,这样可以么 |
7 xia0ta0 2016-11-21 09:06:45 +08:00 /authors/:author/books 或者 /books?author=:author 都可以的 |
8 tabris17 2016-11-21 09:11:56 +08:00 你就想象一下,如果这些书按照文件夹排列你会怎么放置 /books/sorted-by-author/{author_id} |
9 msg7086 2016-11-21 09:17:10 +08:00 虽然 author 只是内部实现,但是 Rails 会要求你按照建模要求去建模。 Author 老老实实开一个 model 出来搞,然后什么都简单了。 这就是 CoC 的世界。 |
10 lijinma 2016-11-21 09:34:31 +08:00 一般两种方式: 1. /authors/:author_id/books 2. /books?author_id=:author_id 参数都应该是 author_id 才对啊。另外, Model 肯定要建的,如果没有 model , author_name 只是 book 的一个属性,那么你应该这么做: /books?author_name=:author_name |
11 timestamp 2016-11-21 09:54:02 +08:00 book/{id} author/{id} author/{author}/books |
12 lxrmido 2016-11-21 10:28:59 +08:00 其实,要体现作者的名字的话,参考暴雪的做法就行了: author#233 |
14 hustlike 2016-11-21 12:17:55 +08:00 books/author/{author_id} |
15 wizardoz 2016-11-21 12:49:37 +08:00 /books/?author=A restful 并不是完全抛弃查询参数.从所有书的列表中过滤作者为 A 的所有书.用查询参数过滤我觉得没毛病. 毕竟层次结构的 URL 只是一个一维的东西,要用来表示现实世界错综复杂的关系还是有困难. |
16 bravecarrot 2016-11-21 14:43:26 +08:00 via iPhone 觉得 11 楼的比较好,把 book 和 author 建成不同的 model ,更容易理解。 /books/1/similar 这样很不合情理 另外,一直觉得 url 中带问号太丑了 |