一个RESTful的持久性解决方案,可与backbone.js一起使用…在PHP中


A RESTful persistence solution usable with backbone.js... in PHP?

我首先要说我是一个蹩脚的程序员,我确信我想做的事情可以在10行node或Rails或其他东西中完成,但PHP是我可用的。

所以,我希望找到一个简单的PHP库,它将数据库调用包装在一个API中,看起来类似于RESTful模型。

我几乎没有成功地找到这样的东西——搜索PHP CRUDPHP REST会出现无数的页面,我不知道如何过滤它们。

我真的想让事情保持简单,我不想要一个像Zend之类的大框架。我在Backbone中处理的模型非常简单。我只是想发送GET s到,说,/notes/3POST s到/notes等,并让PHP做正确的事情到数据库。

也许我要求太多了,但在我看来,这是其他框架,如Rails提供的。有什么建议吗?TIA…

EDIT Nov 2018:虽然我不会敲CodeIgniter,现在Laravel(目前5.5)是我使用的框架。

这是一篇很好的文章,总结了我使用Laravel的原因。

要快速入门,我推荐laracast。这是一个订阅视频教程服务,深入了解如何使用Laravel(以及其他与web开发相关的东西)。

原始答:

对我来说,Codeigniter是rails类框架中最简单的一个。它很简单,你可以从零开始轻松地构建一个CRUD应用程序。

推出自己的应用程序的最大问题是安全性。Codeigniter可以帮助您构建一个不易被黑客攻击的站点,因为它可以保护您免受许多常见的安全风险,例如直接使用$_POST数组,以及没有正确过滤数据。更不用说它提供的许多辅助类,如表单验证。

你可以在他们的网站上查看文档。它很容易使用,只要你记得导航是隐藏在每个页面的顶部。: D

您了解CRUD的内部工作原理吗?从PHP的角度来看,它可以像在每个REST调用可能性上使用switch语句一样简单。

请看这个页面:http://www.codethinked.com/building-epic-win-with-backbone-js

跳到标题为"连接到服务器"的部分。

你的PHP脚本只需要满足这些要求。

一个简单的原型代码:
switch($_SERVER['REQUEST_METHOD']){
    case 'POST':
        // create new item
        break;
    case 'GET':
        // get item(s)
        break;
    case 'PUT':
        // update item
        break;
    case 'DELETE':
        // delete item
        break;
}

您还需要设置一个.htaccess文件,如下所示(处理访问不存在的url):

# Turn on rewrite engine and redirect broken requests to index
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* index.php [L,QSA]
</IfModule>

http://mysite.com/1这样的URL是不存在的,这就是为什么你需要路由。

Edit:如果您计划在HTML表单中使用PUT或DELETE,请忘记它。在写这篇文章的时候,它还没有被HTML5所接受,而且几乎所有的浏览器都不支持它。我对此的"修复"是将GET用于GET请求,并将POST用于所有其他请求(POST本身,PUTDELETE)。例子:

<form action="POST" action="/users/5">
    <input type="hidden" name="method" value="DELETE"/>
    <button>Delete User #5</button>
</form>

但是,这不是AJAX的问题,因为显然您可以将XMLHttpRequest方法设置为您想要的任何内容而不会出现问题。

有很多PHP的rest框架,看看这里和这里。

我个人喜欢无脂肪框架,但你需要PHP 5.3。还有很多对Tonic和Recess的支持,看起来很有趣。

而且所有的标准框架都有一些rest支持(zend, code ignition, symfony等)

你应该找到适合你的…

同样,如果你已经准备好了mysql查询,你可以将mysql结果直接转换成json,像这样:

function recordSetToJson($mysql_result) {
 $rs = array();
 while($rs[] = mysql_fetch_assoc($mysql_result)) {
    // you don´t really need to do anything here.
  }
 return json_encode($rs);
}

之后很容易与url关联…

From:将MySQL记录集转换为PHP中的JSON字符串

您可以使用silex https://github.com/fabpot/Silex一个基于symphony 2的简单框架。使用Silex,您可以轻松地路由和映射操作。

您可以访问基本的CRUD元素,并且可以使用URL组件调用函数。

文档中有一些例子:http://silex-project.org/doc/usage.html

新的REST api解决方案

的例子http://www.apifysnippets.com/

代码https://github.com/apify

教程http://blog.fedecarg.com/2011/09/11/building-a-restful-web-api-with-php-and-apify/

更新:

PHP的另一个rest解决方案:http://luracast.com/products/restler/

:)

你可能想看看Slim:

http://www.slimframework.com/

它绝对是轻量级的,可以给你你正在寻找的东西,一个使用php轻松部署的RESTful后端。