我需要设计REST API来为一组参数返回资源。让我们说我需要返回一个数字序列,它由三个参数决定:生成方法,初始种子和比例。我提出的初稿是
(GET/POST) http://url/sequence?method=A&seed=100&scale=5.
序列是动态生成的,但在给定参数集(A,100,5)
时是确定的,因此可以缓存。但这感觉非常不稳定。我可以把它改成
(GET) http://url/sequence/A/100/5.
哪一个更好?或者两者都不好?
此外,scale
可能是可选的,默认值为1
。这很容易作为查询处理,但在URL路径中不那么明显。我应该怎么处理?
我应该添加一些参数集的信息。只有少数"方法" s,但主要有无限的"种子" s" scale" s。
答案 0 :(得分:2)
RESTful URI是矛盾的。只要URI引用一个且只有一个资源,它就是RESTful。期。对REST来说重要的不是URI语义,而是客户端如何获取它们。如果他们从文档中复制URI模板而不是将它们作为链接,那么它不是REST。询问任何一个选项的RESTfulness都没有意义,尽管你会在无休止的讨论中找到关于是什么使URI更多或更少RESTful的人。
然而,尽管URI语义与REST无关,但它们对开发人员的可读性很重要,因此从这个角度来看,您的问题更有意义。考虑到这一点,我说第一个选项更好,因为虽然URI是原子标识符,但对于任何开发人员而言,这三个值都是可变参数,而不是路径的一部分,这一点非常清楚。你有一个可选参数的事实使它更好。
答案 1 :(得分:1)
这两个网址都是RESTful。但是,如果您想要POST
资源,请不要使用GET
。
两个网址都可以轻松处理选项scale
。
GET http://url/sequence?method=A&seed=100
GET http://url/sequence/A/100