为什么使用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服务(还没有太多了解)。 但是,通过普通的POST
或GET
接受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使用GET
, PUT
, POST
和DELETE
来处理请求。
一个非常简单的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