RESTful PHP:它如何从客户端到服务器端工作?

lau*_*kok 3 php rest curl

我对RESTful PHP上的教程/示例感到困惑.他们中的大多数都在使用框架(例如Slim)并最终成为API,这使我更加困惑.在完全理解如何创建简单的RESTful PHP之前,我想首先避免所有框架和API材料.

我明白那个,

REST,它的核心,就是为工作使用正确的HTTP动词.GET,POST,PUT,DELETE都有意义,如果某些内容被描述为RESTful,那么它真正意味着所涉及的网站/应用程序都遵循这些含义.

而从PHP服务器端,我明白这是怎么我能察觉的REST请求类型,

$_SERVER['REQUEST_METHOD']
Run Code Online (Sandbox Code Playgroud)

但我的主要问题是如何通过URL将这些REST类型(GET,POST,PUT,DELETE)发送到服务器?

例如,从本教程中,

当您希望创建或更新URL标识的资源时,将使用PUT请求.例如,

http://restfulphp.com/clients/robin

然后,

DELETE应该与PUT相反; 当您要删除请求的URL标识的资源时,应该使用它.

http://restfulphp.com/clients/anne

http://restfulphp.com/clients/robin并且http://restfulphp.com/clients/anne相同的干净URL模式.我怎么知道前者是用于PUT而后者是用于DELETE?或者,在那里我应该在表格/ HTML设置来区分它们?

当curl进来时它会变得复杂 - 它与REST网站有什么关系?

从上面的教程,

Once you have cURL installed, type: 
curl -v google.com
Run Code Online (Sandbox Code Playgroud)

我应该在哪里打字?

curl如何帮助我删除或PUT?如何$_SERVER['REQUEST_METHOD']从curl中检测REST类型?

curl -v -X DELETE /clients/anne
Run Code Online (Sandbox Code Playgroud)

curl -v -X PUT -d "some text"
Run Code Online (Sandbox Code Playgroud)

我问的问题可能听起来很愚蠢,但如果有人能帮助我理解这些问题会很棒.

编辑:

Argg PHP cURL- 另一件让我更加困惑的事情!如果我要通过XMLHttpRequest对象发送REST请求类型,为什么还需要它?它似乎是为了与其他API提供程序进行通信,我希望在此阶段避免使用它们.

如果我可以PHP cURL在我的本地网站内发送REST请求类型,我应该如何以及在何处放置这些问答,

$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch,   CURLOPT_SSL_VERIFYPEER,   FALSE);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
Run Code Online (Sandbox Code Playgroud)

如果我使用PHP cURL那么$_SERVER['REQUEST_METHOD']服务器端会发生什么?

Que*_*tin 5

http://restfulphp.com/clients/robin并且http://restfulphp.com/clients/anne是相同的干净URL模式.我怎么知道前者是用于PUT而后者是用于DELETE?

你无法从URL中得知.客户端必须将URL与HTTP动词耦合.REST的一部分原因是您可能希望对同一资源执行不同的操作(如果您将来永远不想获取某些内容,则没有太多意义).

或者我应该在/ html格式中设置它以区分它们?

HTML表单只能触发POST和GET请求.如果要在网页中使用不同的HTTP谓词,则需要使用JavaScript和XMLHttpRequest对象.

当curl进来时它会变得复杂 - 它与REST网站有什么关系?

curl 是一个库(以及使用该库的命令行客户端)用于发出HTTP请求.

在开发REST界面时,可以使用命令行客户端来测试服务器.您也可以将它用作实际的客户端,但是您可能最好不要编写专用工具,这样您就拥有了一个很好的命令行界面,而不是强制您在使用它时处理HTTP方面的界面.

作为库,您可以使用它为REST接口编写客户端.

我应该在哪里打字?

在终端仿真器(例如XTerm或Windows Power Shell)中的命令行shell(例如bash或Windows Power Shell)中.

curl如何帮助我删除或PUT?

它允许您指定发送的HTTP动词.您可以在问题后面的示例中看到.

$ _SERVER ['REQUEST_METHOD']如何从curl中检测REST类型?

它告诉您使用哪个动词来发出请求.

如果我要通过XMLHttpRequest对象发送REST请求类型,为什么还需要PHP cURL?

你没有.如果要从服务器发出请求,可以使用PHP.如果要从浏览器发出请求,可以使用XMLHttpRequest.

它似乎是为了与其他API提供程序进行通信,我希望在此阶段避免使用它们.

您可以使用它在您控制的面向客户的Web服务器与后端系统之间进行通信,该后端系统具有您也控制的(非面向客户的)HTTP接口.

如果我可以在我的本地网站中使用PHP cURL发送REST请求类型,我应该如何以及在何处放置这些行

在您希望向REST服务发出请求的服务器端代码(或您的其他PHP客户端)中.

如果我使用PHP cURL那么服务器端的$ _​​SERVER ['REQUEST_METHOD']会发生什么?

然后,假设您正在使用服务器端PHP(而不是,例如,命令行PHP):

  1. 浏览器将向您的服务器发出请求
  2. $_SERVER['REQUEST_METHOD'] 将是浏览器发出请求的方法
  3. 在服务器上运行的PHP将向其他服务器(或可能是同一服务器的另一部分)发出请求
  4. $_SERVER['REQUEST_METHOD'] 将是PHP发出请求的方法
  5. 第二个请求的服务器将响应PHP客户端脚本
  6. 第一个请求的服务器将响应浏览器