为什么我们需要在REST完整Web服务中放置和删除?

如何解决为什么我们需要在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?