这个HTTP请求如何工作?

时间:2013-12-29 10:27:21

标签: php http rest backbone.js slim

首先,这个问题主要涉及HTTP请求,BackboneJS,某种RESTful API(如Slim API)以及这些内容如何相互协作。此外,这个问题来自于在服务器端没有太多经验的人,除了处理基本的PHP / MySQL之外。

我一直在关注Backbone,我看过一些关于在后端使用RESTful API的教程(包括this one from 9bit)。

我还阅读了this answer到StackOverflow问题(了解BackboneJS REST调用)。

如果我打开一个JS文件,并在某些代码中键入type来发送POST请求,如下所示:

(function() {
var http = new XMLHttpRequest();

var value = '{ "prop1": "value 1", "prop2": "value 2" }';

http.open('POST', 'dir', true);
http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
http.setRequestHeader('Content-Length', value.length);
http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
    }
}
http.send(value); 
})();

我在控制台中看到它发送的POST请求看起来像这样:

Method: POST
Body: { "prop1": "value 1", "prop2": "value 2" }
Location: http://localhost/~myusername/Todo/dir/

然后,由于它只是我的本地服务器,服务器会发回一个响应,其中包含显示该目录中文件的基本HTML页面等。

我尝试使用GET请求来检索类似的JSON对象,但显然我无法从该位置获取任何内容,大概是因为我试图从某个空文件夹请求的对象甚至不存在于任何地方。

我的问题是,当你使用BacksJS方法,例如.save()时,根据我的理解,在这种情况下,它可能会使用PUT方法向对象的主体发送请求,可能被解析为一个字符串,一个目录,例如'article / id','id'可能是'43'(可能是你发送的任何模型属性的相应id)。所以......

1)API(例如Slim)对该请求做了什么? 2)将这些对象属性保存到哪里(MySQL数据库)? 3)是否有一个文件,例如'index.php',位于目录'article'中,其中脚本抓取POST请求正文中的参数并使用它来与MySQL数据库通信? (我想知道为什么这个位置只是一个'文件夹',例如'/ article'。要把它放在另一个上下文中,每当你输入像'http://www.mywebsite.com'这样的网站时,服务器会自动寻找该目录中的“索引”页面,例如“index.html”,并自动将该文件作为该目录的默认文件打开。在使用位置'/ somefoldername'作为上下文时,会发生同类型的事情。 HTTP请求的位置)?

基本上,我只是觉得你会向某个文件夹发送一个HTTP请求,而不是一个特定的PHP文件(例如)来处理请求并与数据库通信。将BackboneJS与RESTful API一起使用,我们的理论文件夹'/ article'是否存在,或者由于某种原因只是附加到URL?

非常感谢。

1 个答案:

答案 0 :(得分:2)

由于您在Slim的上下文中提出了问题,我将以这种方式回答它们,尽管许多信息通常适用于其他Web应用程序/框架。

  

什么API,例如Slim对该请求做了什么?

不要厚颜无耻,但无论你(或API开发人员)想要它做什么(不久就会更多)。

  

将这些对象属性保存到哪个(MySQL数据库)?

通常,这些对象属性用于创建资源(POST)或更新资源(PUT),并且很可能资源被保留在某种存储中,无论是RDMS还是NoSQL解决方案

  

是否有一个文件,例如'index.php',位于目录'article'中,其中脚本抓取POST请求正文中的参数并使用它来与MySQL数据库通信?

这是事情变得有趣的地方,恕我直言。考虑路由article/id,这是Slim应用程序中发生的事情:

  1. 请求来自example.com/article/22
  2. 请求被路由到前端控制器脚本,该脚本根据请求URI和HTTP方法决定如何处理请求。
  3. 如果存在物品的PUT路线,则应用程序代码可能会接受请求正文并更新由提供的ID标识的资源。
  4. 考虑到这一点,在Slim应用程序中,可能唯一的Web可访问文件是index.php。似乎是目录的只是在应用程序的index.php中定义的路由,Slim用它来决定如何处理请求。考虑到这一点 。 。

      

    将BackboneJS与RESTful API一起使用,我们的理论文件夹'/ article'是否存在,或者由于某种原因只是附加到URL?

    在Slim应用程序的上下文中,不,/article不会作为目录存在,而是作为路径存在。

    也许这不会有多大帮助,但这就是那个index.php路由文件的一部分在Slim方面可能会是这样的:

    $app->post('/article', function () {
        // Get data from post
        // Create resource
    });
    
    $app->get('/article/:id', function ($id) {
        // Return an article resource identified by $id
    });
    
    $app->put('/article/:id', function ($id) {
        // Use $id to retrieve resource from storage
        // Update resource with request data
    });