REST API-为什么使用PUT DELETE POST GET?
因此,我在浏览有关创建REST API的一些文章。其中一些建议使用所有类型的HTTP请求:like 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服务尚不甚了解。但是,仅通过常规或(包含方法名称和所有参数)接受 JSON
对象,然后也以JSON进行响应会不会更容易。我们可以通过PHP轻松地进行序列化/反序列化,并且无需处理不同的HTTP请求方法就可以对数据进行任何处理。POST``GET``json_encode()``json_decode()
我想念什么吗?
好的-在研究了各种API并学习了很多有关 XML-RPC , JSON-RPC , SOAP 和 REST的知识之后,
我得出了这样的API合理的结论。实际上,堆栈交换实际上是在他们的网站上使用这种方法的,我确实认为这些人知道他们在做什么堆栈交换API。
回答:
的想法 表象 泰特 转让(BOT)是不是在可能的最简单的方法访问数据。
您建议使用发布请求来访问JSON,这是访问/处理数据的一种完全有效的方法。
REST是一种 的数据访问方法。当您在REST中看到请求时,应该立即了解数据的情况。
例如:
GET: /cars/make/chevrolet
可能会返回雪佛兰汽车的清单。 好的REST
api甚至可以在querystring中包含一些输出选项,例如?output=json
或?output=html
,这将允许访问者决定信息应以哪种格式编码。
关于如何合理地一体化的数据类型为REST
API比特思考后,我已经得出结论,最好的办法明确指定的数据类型是通过已存在的文件扩展名,例如.js
,.json
,.html
,或.xml
。缺少的文件扩展名将默认为默认格式(例如JSON);不支持的文件扩展名可能返回501NotImplemented
状态码。
另一个例子:
POST: /cars/{ make:chevrolet, model:malibu, colors:[red, green, blue, grey] }
可能会在db中创建具有关联颜色的新雪佛兰马里布。我说这 是因为REST
api不需要与数据库结构直接相关。它只是一个屏蔽接口,因此可以保护真实的数据(例如,它像数据库结构的访问器和更改器一样被保护)。
现在我们需要讨论幂等问题。通常,REST 通过HTTP
实现CRUD。HTTP使用GET
,PUT
,POST
和DELETE
为请求。
REST的一个非常简单的实现 可以 使用以下CRUD映射:
Create -> PostRead -> 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]
这种方法的问题是,是否/cars
在/oldest
请求时间和delete
发布时间之间添加了另一个项目。
以上是 REST API-为什么使用PUT DELETE POST GET? 的全部内容, 来源链接: utcz.com/qa/427984.html