为什么使用PUT DELETE POST GET?

所以,我正在浏览一些关于创建REST API的文章。 其中一些建议使用所有类型的HTTP请求:如PUT DELETE POST GET 。 我们将创建例如index.php并以这种方式编写API:

$method = $_SERVER['REQUEST_METHOD'];
$request = split("/", substr(@$_SERVER['PATH_INFO'], 1));

switch ($method) {
  case 'PUT':
    ....some put action.... 
    break;
  case 'POST':
    ....some post action.... 
    break;
  case 'GET':
    ....some get action.... 
    break;
  case 'DELETE':
    ....some delete action.... 
    break;
}

好吧,已被授予 - 我对web服务(还没有太多了解)。 但是,通过普通的POSTGET接受JSON对象(这将包含方法名称和所有参数),然后以JSON响应并不是那么容易。 我们可以通过PHP的json_encode()json_decode()轻松地序列化/反序列化,并且无需处理不同的HTTP请求方法就可以做任何我们想要的数据。

我错过了什么吗?

更新1:

好的 - 在深入了解各种API并学习了很多关于XML-RPC,JSON-RPC,SOAP,REST的文章后,我得出这样一种结论:这种类型的API是合理的。 实际上,堆栈交换在他们的站点上使用这种方法非常多,我认为这些人知道他们在做Stack Exchange API。


REpresentational State Transfer的概念不是以最简单的方式访问数据。

您建议使用发布请求访问JSON,这是访问/操作数据的完美有效方式。

REST是有意义访问数据的方法。 当您在REST中看到一个请求时,它应该立即显示数据正在发生的情况。

例如:

GET: /cars/make/chevrolet

很可能会返回一列chevy汽车。 一个好的REST api甚至可以在查询字符串中包含一些输出选项,如?output=json?output=html ,这将允许访问者决定信息应该编码的格式。

在思考如何合理地将数据输入到REST API中之后,我总结道,明确指定数据类型的最佳方式是通过已有的文件扩展名,例如.js.json.html.xml 。 缺少文件扩展名将默认为默认格式(如JSON); 不支持的文件扩展名可能会返回501 Not Implemented状态码。

另一个例子:

POST: /cars/
{ make:chevrolet, model:malibu, colors:[red, green, blue, grey] }

很可能会在相关颜色的db中创建一个新的chevy malibu。 我说可能是因为REST api不需要直接与数据库结构相关。 它只是一个屏蔽接口,以便真正的数据受到保护(将它想象为数据库结构的访问器和增变器)。

现在我们需要进入幂等性问题。 通常REST通过HTTP实现CRUD。 HTTP使用GETPUTPOSTDELETE来处理请求。

一个非常简单的REST实现可以使用下面的CRUD映射:

Create -> Post
Read   -> Get
Update -> Put
Delete -> Delete

这个实现有一个问题:Post被定义为非幂等方法。 这意味着后续调用相同的Post方法将导致不同的服务器状态。 Get,Put和Delete是幂等的; 这意味着多次调用它们应该导致相同的服务器状态。

这意味着一个请求,例如:

Delete: /cars/oldest

实际上可以实现为:

Post: /cars/oldest?action=delete

Delete: /cars/id/123456

如果您只调用一次服务器,或者如果您将其调用1000次,则会导致相同的服务器状态。

处理删除oldest物品的更好方法是请求:

Get: /cars/oldest

并使用结果数据中的ID作出delete请求:

Delete: /cars/id/[oldest id]

这种方法的一个问题是,如果在请求时间/oldest时间和delete时间之间添加了另一个/cars项目。


这是一个安全性和可维护性问题。

安全的方法

只要有可能,您应该使用“安全”(单向)方法,例如GET和HEAD以限制潜在的漏洞。

幂等方法

只要有可能,你应该使用'幂等'方法,例如GET,HEAD,PUT和DELETE,它们不会有副作用,因此不易出错/更容易控制。

资源


总之,REST强调名词而不是动词。 随着你的API变得越来越复杂,你需要添加更多的东西,而不是更多的命令。

链接地址: http://www.djcxy.com/p/8581.html

上一篇: why use PUT DELETE POST GET?

下一篇: from andriod i am trying to upload image and i am using web services in java