当我需要为REST API创建资源URL时,我总是怀疑你能看到以下内容。我想知道是否有人可以帮助我。
我们假设我有两个模型。
用户可以提交自己的帖子,并可以评论自己和其他帖子。
用户的主要资源网址为:
GET /users # Retrieve all users.
POST /users # Create a new user.
GET/DELETE/PUT /users/{user_id} # Get, remove and update an user.
Post的主要资源网址为:
GET /posts # Retrieve all posts.
POST /posts # Create a new post.
GET/DELETE/PUT /posts/{post_id} # Get, remove and update a post.
我的问题出现在例如我想要的时候:
前10名提交者(过滤参数(外部链接,讨论,全部))。网址应为:
GET /users/top?type=ext
GET /users/top?type=disc
GET /users/top # for all
或许应该是:
GET /users?top=ext
GET /users?top=disc
GET /users?top=all
同样但有帖子:
评论10篇评论(过滤参数(外部链接,讨论,全部))。网址应为:
GET /posts/comments?type=ext
GET /posts/comments?type=disc
GET /posts/comments # for all
或许应该是:
GET /posts?top=ext
GET /posts?top=disc
GET /posts?top=all
上述任何选项对您有好处,或者应该是另一种方式?
此致
答案 0 :(得分:1)
我喜欢将REST URI视为模型表示。
所以/users/top
没有多大意义,但/posts/comments
似乎很好(因为评论也可能是一个不同的模型)。但对于您的情况,我推荐其他一组查询参数,因为它们被广泛用于过滤和放大。排序请求。所以在你的情况下,我建议像:
GET /users?sort=ext&order=desc&limit=10
这有助于我理解我要求user
按ext
顺序排序descending
的10 type=ext
个资源。 (如果需要,您甚至可以将其更改为npm ERR! code EAI_AGAIN
npm ERR! errno EAI_AGAIN
npm ERR! request to http://registry.npmjs.org/-/user/org.couchdb.user:belzee10 failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org:80
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\belzee\AppData\Roaming\npm-cache\_logs\2018-01-08T16_03_35_050Z-debug.log
答案 1 :(得分:1)
你可能寻找灵感的地方是......堆栈溢出本身。这些URI看起来很熟悉吗?
/questions?sort=newest
/questions?sort=featured
/questions?sort=votes
API有pretty decent documentation,它还会提供适当的拼写提示来处理分页和搜索范围。
也就是说,IMDB采用了不同的方法 - The Shawshank Redemption使用了直接的"我是一个集合的元素"拼写
http://www.imdb.com/title/tt0111161/
但有史以来top rated titles?它们显示为图表
http://www.imdb.com/chart/top
但我想知道根据@Hawkes答案是否有标准,或者根本没有标准。
完全没有标准;只是本地拼写惯例。在某种程度上,这是REST的一部分:服务器可以使用任何拼写的URI有意义,而客户端只是跟随它的鼻子"基于对媒体类型的处理规则和服务器提供的数据的理解。