我正在查看Delicious API并看到以下是创建新书签的操作:
https://api.del.icio.us/v1/posts/add?&url={URL}&description={description}
看起来他们正在使用GET请求来创建服务器端数据库条目,我在其他地方读过的不应该使用GET请求,只能使用POST请求。
我现在正在编写自己的API,我认为让用户直接从URL与API进行交互是很棒的。但是,除非允许通过GET进行CRUD操作,否则不能这样做。
那么,Delicious真的在GET上做CRUD操作吗?有没有一个重要的原因我不应该在我的API中做同样的事情,或者只是为了防止意外调用而强制要求CRUD使用POST?
答案 0 :(得分:1)
这取决于您是否遵循REST原则GET是否禁止更改内容。因此大多数人都说REST使用POST进行更改。
然而,GET和POST之间存在差异。根据RFC GET请求总是有一个后续的RESPONSE。如果您使用POST,则需要遵循Redirect-After-Post模式。
另一个限制是URL的大小可能有限。因此,只要您的输入数据足够短,GET就会起作用。所以美味的API有一个bug。您将无法通过GET参数添加所有可能的URL。
答案 1 :(得分:1)
意外调用是其中的一部分;这就是HTTP规范在讨论“幂等”方法时的含义。但你可以说,只要不管你获取多少次,URL只会被添加一次,那么Delicious正在做的事实上是幂等的。但更重要的是,GET是safe:
The important distinction here is that the user
did not request the side-effects, so therefore
cannot be held accountable for them.
从界面设计的角度来看,希望用户代理使POST和PUT和DELETE比GET更难,或者至少明显不同,这样用户可以依靠这种差异来提示他们的操作可能会导致资源状态发生变化,因为 负责这些更改。使用GET进行更改,即使是幂等的,也会模糊这一责任范围,特别是在广泛部署prefetchers时。