【发布时间】:2013-01-20 07:10:19
【问题描述】:
我最近阅读了一些教程来介绍自己以了解更多关于其余 API 的信息。但是,我在这里和那里有些疑问,希望有人可以帮助我解决这个问题。
阅读Beginner's Guide to HTML and REST,其中指出:
“最好将资源视为名词。例如,以下不是 RESTful:
1 /clients/add
这是因为它使用 URL 来描述操作。这是区分 RESTful 和非 RESTful 系统的一个相当基本的点。”
因此,我想知道在我拥有用户资源并访问它以执行通常的插入/更新/删除/检索的这种情况下
如下:
www.example.com/users [get] www.example.com/users/1 [get] www.example.com/users/1 [put] www.example.com/user/1 [delete] www.example.com/user [post]
这会用完 4 个常用动词来发出请求。
如果我需要诸如登录之类的功能,或者一般来说可能需要任何其他类型的操作命令,该怎么办? url应该如何形成,这种情况下路由器应该如何重定向?
编辑:
在查看了各种 cmets 和答案之后。我从他们那里得到的结论是,最终的解决方案将是“尽可能使用休息原则,并在不使用时使用带有函数的查询字符串方法”。
但是,我正在考虑实现的一个轻微变体(不再是一个安静的实现,而是遵循类似的概念)并且想知道它是否可以这样工作。希望大家给我建议。
使用我需要实现的相同身份验证/登录功能,是否可以改为:
www.example.com/users [get] www.example.com/users/1 [get] www.example.com/users/1 [put] www.example.com/user/1 [delete] www.example.com/user [post]
像往常一样,如果我需要执行某项操作,它将是这样的:
[controller]/[action] --- 用户/验证 [post] --- 登录
[controller]/[id]/[action] --- user/1/authenticate [put] --- 注销
这行得通吗?我会面临任何可预见的问题吗?是否已经有类似的实现?请多多指教!
【问题讨论】:
-
登录功能不适合 REST 范式。
-
@leftclickben 感谢您的回复。这样,我应该如何使用 REST Api 实现登录/身份验证功能?这是否也适用于所有一般方面?例如需要为特定资源创建一些操作/功能(而不是直接从资源中插入/更新/删除/检索信息?
-
好吧,请参阅 Neville K 的回答,但在我看来,使用 REST 进行登录是试图塞入一些不适合的东西。在需要时使用 REST,不要在任何情况下都强加于自己 :-)
-
@leftclickben 是否意味着解决方案最终会有各种形式的api请求?就像使用 REST 对资源进行检索/插入/更新/删除一样,而操作使用通常的方法,例如在 url 或 post 中传递参数以及执行操作的函数名称?
-
是的,你是对的,但我认为这是登录和 REST 所固有的。在 REST 中,您正在访问资源,并且您有 8 种不同的操作,具体取决于您使用的方法以及您是点击集合还是元素。所有这 8 种方法都没有映射到登录,事实上它们都没有特别干净地映射。登录和注销显然是动作,虽然这些动作的实现需要资源,但动作本身并不直接映射到任何资源。
标签: php web-services api http rest