如何解决为什么我们需要在REST完整Web服务中放置和删除?
| 我可以这样叫网络服务吗 而不使用放置和删除方法? 这真的是REST Web服务吗?....
$url = \'webservice.PHP\';
$data = array(
\'username\' => \'a\',\'password\' => \'a\',\'param1\'=> \'param1\',\'operation\'=> \'delete\',\'output\'=>\'xml\'
);
$client = curl_init($url);
curl_setopt($client,CURLOPT_POST,1);
....
...................
//webservice.PHP
$operation=$_POST[\'operation\'];
$param1=$_POST[\'param1\'];
if ($operation==\'delete\')
{
$r=MysqL(\"delete from list where id=\'$param1\'\");
}
if ($operation==\'insert\')
{
$r=MysqL(\"insert into list values (\'$param1\')\");
}
.....
解决方法
这种技术有时被称为“隧道”,因为它将真正的操作隐藏在通用POST操作的主体中。在我看来,这是一种破解,无法达到REST的目的,但有时,如果您的Web主机不允许使用必需的HTTP动词,则有必要这样做。
使用标准动词并理解它们对服务的影响是REST不可忽视的重要方面。例如,您应该能够对同一资源重复执行DELETE操作,并且这只会导致第一个DELETE起作用(幂等)。使用GET时,应该假定服务器上没有任何更改(安全)。但是,将操作隐藏在POST中会掩盖这一点。
, REST背后的主要思想之一是不将操作方法作为参数的一部分(在本例中为'operation \'参数)。
而是,每个资源都有其唯一的URL,并且在这些资源上使用HTTP动词(GET,POST,PUT或DELETE)。
您的方法不是RESTful的。
例:
使用flickr API删除评论:
GET /services/rest/?method=flickr.photos.comments.deleteComment&comment_id=28
请注意,他们如何使用\'method \'参数来确定要执行的操作(例如您的示例)。
RESTful实现将接受以下内容:
DELETE /comment/28
在这种情况下,最佳实践是使用POST创建新资源,使用DELETE删除资源,使用GET检索现有资源以及使用PUT更新现有资源。
, 这不是真正的RESTful服务。您不需要实现所有HTTP动词就可以实现RESTful,但是您不应该使用POST来删除数据。
我个人将实现DELETE来删除项目,而仅使用POST来插入数据。
, 我将在这里与时俱进,说在没有PUT和DELETE的情况下创建RESTful服务是完全可以的。您需要了解的唯一关键是您在这样做时所放弃的。
1)中间组件(例如代理,缓存,负载平衡器)将不知道您是在创建/更新还是删除资源,它们只会知道操作是安全(GET)还是不安全(POST)。我的问题是,您是否知道利用这一知识的任何中间组件?
2)将要访问您的服务的程序员将无法猜测如何删除资源,您将必须包含带有链接关系的链接,该链接具有一些文档,这些文档向程序员解释了他们将需要的文档POST到链接的URI进行删除。对于客户端开发人员来说,这还需要做更多的工作,但是至少您会清楚如何做。
在我被遗忘之前,这里有罗伊·菲尔丁(Roy Fielding)的话说那也可以!
无论如何,有很多
RESTful服务,除了什么都不做
GET和POST。关键是那些
使用方法,而不是什么方法
用过的。举一个具体的例子
使Wiki或多或少是RESTful的
几乎总是由它如何决定
(ab)使用GET和会话-是否
它使用PUT或POST编辑页面
相比之下,糖是顶级的。
http://code.google.com/p/implementing-rest/wiki/常见问题解答
综上所述,从REST的角度来看,创建一个名为webservice.php的单一资源并传递一个“ operation”参数是一种讨厌的设计气味。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。