草庐IT

php - REST 风格的 PHP : how does it work from client side to server side?

coder 2024-04-25 原文

我对 RESTful PHP 上的教程/示例感到困惑。他们中的大多数都在使用框架(例如 Slim)并且最终成为 API,这让我更加困惑。在彻底理解如何创建一个简单的 RESTful PHP 之前,我想从一开始就避免所有框架和 API Material 。

我明白了,

REST, at it's core, is really just about using the right HTTP verb for the job. GET, POST, PUT, DELETE all have meanings, and if something is described as being RESTful, all it really means is that the site/app in question adheres to those meanings.

从 php 服务器端,我理解这是 how我可以检测 REST 请求类型,

$_SERVER['REQUEST_METHOD']

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

例如来自这个 tutorial ,

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

http://restfulphp.com/clients/robin

然后,

DELETE 应该执行与 PUT 相反的操作;当您想要删除由请求的 URL 标识的资源时,应该使用它。

http://restfulphp.com/clients/anne

http://restfulphp.com/clients/robinhttp://restfulphp.com/clients/anne相同的简洁 URL 模式。我怎么知道前者是用于 PUT 而后者是用于 DELETE?或者我应该在form/html中设置哪里来区分它们?

当 curl 出现时,事情就变得复杂了——它与 REST 网站有什么关系?

从上面的教程中,

Once you have cURL installed, type: 
curl -v google.com

我应该在哪里输入??

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

curl -v -X DELETE /clients/anne

curl -v -X PUT -d "some text"

我问的问题可能听起来很愚蠢,但如果有人能帮助我理解这些问题就太好了。

编辑:

阿格 PHP cURL - 另一件事让我越来越困惑!如果我要通过 XMLHttpRequest 发送 REST 请求类型,为什么我需要它目的?它似乎是为了与其他 API 提供者通信,我想在这个阶段避免

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

$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);

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

最佳答案

http://restfulphp.com/clients/robin and http://restfulphp.com/clients/anne are the same clean URL pattern. How can I know that the former is meant for PUT and the latter is meant for DELETE?

您无法从 URL 中分辨出来。客户端必须将 URL 与 HTTP 动词结合起来。 REST 的部分要点是,您可能想对同一资源做不同的事情(如果您将来永远不想获取某些东西,那么 PUT 就没有多大意义)。

Or where should I set in the form/ html to differentiate them?

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

And it gets complicated when curl comes in - what is it to do with a REST website?

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

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

作为一个库,您可以使用它为您的 REST 接口(interface)编写客户端。

Where should I type??

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

How curl is going to help me to DELETE or to PUT?

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

How $_SERVER['REQUEST_METHOD'] is going to detect REST type from curl?

它会告诉您使用了哪个动词来提出请求。

Why do I need PHP cURL if I am going to send REST request types via XMLHttpRequest object?

你不知道。如果你想从你的服务器发出请求,你可以使用 PHP。如果您想从浏览器发出请求,可以使用 XMLHttpRequest。

It seems that it is meant for communicating with other API providers which I want to avoid at this stage.

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

And if I can send REST request types with PHP cURL within my local website, how and where should I place these lines

在您的服务器端代码(或您的其他 PHP 客户端)中您想向 REST 服务发出请求的位置。

If I use PHP cURL then what happens to $_SERVER['REQUEST_METHOD'] at the server side?

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

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

关于php - REST 风格的 PHP : how does it work from client side to server side?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182844/

有关php - REST 风格的 PHP : how does it work from client side to server side?的更多相关文章

  1. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  2. c - Ruby - 源代码 - 编码风格 - 2

    查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity

  3. Ruby:如何将数组拼接成 Lisp 风格的列表? - 2

    这是我发现自己偶尔想做的事情。假设我有一个参数列表。在Lisp中,我可以像这样`(imaginary-function,@args)为了调用将数组从一个元素转换为正确数量的参数的函数。Ruby中是否有类似的功能?或者我只是在这里使用了一个完全错误的成语? 最佳答案 是的!它被称为splat运算符。a=[1,44]p(*a) 关于Ruby:如何将数组拼接成Lisp风格的列表?,我们在StackOverflow上找到一个类似的问题: https://stackov

  4. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  5. ruby - Sinatra REST API 应用程序的身份验证 - 2

    我正在使用Sinatra构建一个API(在客户端使用Angular并希望其他人能够访问API)并且它也是一个OAuth提供者。我想知道采取什么最佳途径(利用现有的gem或从Warden推出自己的解决方案等)。在使用Rails之前使用过devise和doorkeeper进行身份验证和oauth,想知道Sinatra的最佳解决方案是什么。理想情况下,我不想要View或能够扩展/修改现有解决方案的操作,因为我纯粹将其作为API与之交互。 最佳答案 我最近使用S/O的以下答案做了同样的事情Whatisaverysimpleauthentic

  6. ruby - 关于 Ruby/ChefSpec 编码风格的反馈 - 2

    我是Ruby的新手,但过去两周我一直在对Chef测试进行大量研究。该测试使用ChefSpec和Fauxhai,但它看起来不是很“像ruby”,我希望社区能给我一些编码风格的建议。有没有更好的方法来编写这样的嵌套循环?Recipe/foo/recipes/default.rbpackage"foo"doaction:installendRecipe/foo/spec/default_spec.rbrequire'chefspec'describe'foo::default'doplatforms={"debian"=>['6.0.5'],"ubuntu"=>['12.04','10.04

  7. ruby-on-rails - REST API 文档生成 - 2

    是否有库提供用于编写​​RESTAPI文档的标记?我见过几家公司使用类似的文档模式,例如:http://api.teamlab.com/2.0/http://www.fullcontact.com/docs/?category=person我想知道他们是否使用相同的库或服务。本质上,该库应该根据标记文本生成用于API导航、搜索和显示的页面(很像用于ruby​​文档的YARD)。这是我目前发现的:rapi_docgem.这是一个article讨论用法。 最佳答案 你绝对应该看看Swagger.它是开源的,被数百个API使用,也被3sc

  8. 好的代码风格,如同书法,让你的代码更加漂亮 - 2

    很多初学者的代码其实都不够“漂亮”,那是因为没有养成好的编码习惯。本篇博客以C语言为例,总结一些好习惯。其实,很多习惯都是肌肉记忆,举个例子:请你写一个程序,输入2个整数并输出它们的和。有些朋友可能写出来是这个样子。#includeintmain(){ inta=0; intb=0; intsum=0; scanf("%d%d",&a,&b); sum=a+b; printf("%d\n",sum); return0;}我写这段代码,是在模仿有些朋友在初学的时候容易写成的样子。更有甚者,写成这个样子:#includeintmain(){inta=0;intb=0;intsum=0;scanf(

  9. ruby - 为什么 REPL 风格的开发在 Ruby 中并不常见? - 2

    看起来Lisp和Clojure程序员经常直接在REPL中开发程序。比照。ClojureDevelopment:IDEorREPL?我的问题是,为什么这种方法在Ruby中不是更常见,通过irb?这仅仅是文化差异,还是有结构(特定于语言)的原因导致以REPL为中心的开发在Lisp中比在Ruby和Python等语言中更常见? 最佳答案 Lisp语法似乎非常适合组合REPL和源文件的方法。当每个表单的文本限制很明确时,以编程方式移动代码片段会容易得多。 关于ruby-为什么REPL风格的开发在R

  10. ruby-on-rails - 留下未使用的 REST 操作不好吗? - 2

    我真的很困惑如何做到这一点。我也感到疲倦和沮丧,我的大脑因看到这么多不同的东西而受伤。保留未使用的REST操作是一种不好的做法吗?例如,我有一个资源模型,用户可以提交它们,但我不需要“索引”操作来显示它们,因为这是由Home#indexController处理的。我想要做的就是使用link_to转到带有表单的页面以添加新资源。所以现在我尝试做的所有link_to都在我做resources_path时继续尝试去/resources。我阅读了如何使用“遗留”方法并直接链接到Controller中的操作,但这不是“rails方式”。现在,如果我不使用默认情况下执行的所有不同REST操作,我将

随机推荐