更正PHP RESTful应用程序的标头?

Jas*_*vis 5 php rest restful-authentication

目标:一个RESTful API
问题:我在下面的方法是真正的RESTful API,还是缺少像我被告知的那样?
这是一个3部分的问题..

假设我有一个PHP项目,它有一个以XML或JSON格式返回数据的API,你可以像下面这样访问API ...

server.com/article/123 | Returns ID 123 using GET
server.com/article/new | Creates a new article using POST
server.com/article/123/edit | Edits an article with the ID 123 using POST
server.com/article/123/delete | Deletes article with ID 123 using POST
Run Code Online (Sandbox Code Playgroud)

1)
我总是读也PUT应该用于编辑对象,下面我把这个单词POST当用户发送POST到删除操作的URI时,我应该PUT在php中使用这样的东西吗?

$_PUT  = array();  
if($_SERVER['REQUEST_METHOD'] == 'PUT') {  
    parse_str(file_get_contents('php://input'), $_PUT);  
}
Run Code Online (Sandbox Code Playgroud)

2)
我在一段时间内写过的一个问题告诉我,这类似于RESTful API,但事实并非如此,我得到的答案是......

In short, your service is not RESTful, but it is close. Rather than specify actions (edit, delete, ...) in URL segments, you will want to make use of HTTP verbs (GET, PUT, POST, DELETE).

无论是那个人都不知道他在说什么,或者我只是不知道,在阅读了关于这个主题的无数篇文章,并且与我能找到的每个API进行比较后,我上面的例子如何不是RESTful?

我想制作一个RESTful API,如果需要,请帮我纠正上面的例子吗?

3)
还假设我计划用这样的东西向用户返回JSON响应......

<?php
header('HTTP/1.1 200 OK');  
header('Content-type: application/json');

$data = // my code that returns the appropriate data;

echo json_encode($data);
?>
Run Code Online (Sandbox Code Playgroud)

这是将结果返回给用户的正确方法还是我错过了什么?许多文章和问题都谈到了这个概念,但没有像我的例子那样深入到实际的代码中.

Fat*_*man 5

要解决问题的第2部分,更多RESTful URL和方法结构如下:

  • server.com/articles/123- GET:退回文章
  • server.com/articles/123- PUT:将文章替换为请求正文中的文章
  • server.com/articles/123- DELETE:删除文章
  • server.com/articles/- POST:创建一篇新文章

这里的想法是URL表示资源本身(在本例中为文章),动词在可行的情况下表示您要对其执行的操作.我真正想到的一个真正的 RESTful API 的最好的例子是GitHub API的最新版本:据我所见,它们适当地使用HTTP方法,响应代码和自定义MIME类型.

在回答你问题的第3部分时,这当然是一种有效的方法,但是如果你要使用自定义MIME类型application/vnd.myawesomesite.article+json,这样可以更容易在客户端解释,因为客户端可以使用用于确定如何解析结果的MIME类型:例如,客户端可以根据显示的MIME类型调度到不同的反序列化器和类.同样,GitHub上的人们在他们的API文档中给出了一些例子.