Javascript 用于ExtJS的简单RESTAPI

Javascript 用于ExtJS的简单RESTAPI,javascript,php,mysql,rest,extjs,Javascript,Php,Mysql,Rest,Extjs,我想开始学习Ext JS。似乎是一个有趣而强大的框架 正如我可以想象的那样,要替换一些非常旧的PHP/MySQL web应用程序,我想从一个使用MySQL连接的extjs示例开始。我想过休息,但那只是我的想法,不是必须的。很高兴听到其他解决方案 所以我的下一个想法是,在PHP中找到一个简单的RESTAPI。看起来不需要太复杂。只需读取数据库记录、更新、创建数据,有时还可以删除数据。很少有用户。Intranet环境,因此限制了不同的浏览器。有限的安全要求。在我看来,类似的事情应该已经存在,并且运行

我想开始学习Ext JS。似乎是一个有趣而强大的框架

正如我可以想象的那样,要替换一些非常旧的PHP/MySQL web应用程序,我想从一个使用MySQL连接的extjs示例开始。我想过休息,但那只是我的想法,不是必须的。很高兴听到其他解决方案

所以我的下一个想法是,在PHP中找到一个简单的RESTAPI。看起来不需要太复杂。只需读取数据库记录、更新、创建数据,有时还可以删除数据。很少有用户。Intranet环境,因此限制了不同的浏览器。有限的安全要求。在我看来,类似的事情应该已经存在,并且运行相当稳定

这就是我被卡住的地方

我的Ext JS示例如下:

我发现的两个最好的简单REST API是:

(一)

(二)

但是1)仅用于从数据库读取,2)工作不正常,我可以写入,但读取不工作。输出与1)不同

我真的想把重点放在Javascript和UI上,而不是完全理解REST/SOAP/CRUD等等。我只需要将数据写入数据库,然后从那里读取数据。一定要这么复杂吗?有人能给我一个简单轻量级解决方案的提示吗

此外,我想知道为什么

  • 很多地方有人谈论休息,但协议似乎没有明确定义
  • 像ExtJS这样令人兴奋且复杂的框架是存在的。但是几乎没有关于如何做后端的任何信息。(如果没有后端,它根本无法工作)

我发现第一个链接中提到的RESTAPI对于ExtJS示例来说已经足够了。它只需要几处小改动,一切正常。 有关更多详细信息,请参阅。
error_reporting(E_ERROR | E_PARSE);

// get the HTTP method, path and body of the request
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
$input = json_decode(file_get_contents('php://input'),true);

// connect to the mysql database
$link = mysqli_connect('localhost', 'user', 'password', 'table');
mysqli_set_charset($link,'utf8');

// retrieve the table and key from the path
$table = preg_replace('/[^a-z0-9_]+/i','',array_shift($request));
$key = array_shift($request)+0;

// escape the columns and values from the input object
$columns = preg_replace('/[^a-z0-9_]+/i','',array_keys($input));
$values = array_map(function ($value) use ($link) {
  if ($value===null) return null;
  return mysqli_real_escape_string($link,(string)$value);
},array_values($input));

// build the SET part of the SQL command
$set = '';
for ($i=0;$i<count($columns);$i++) {
  $set.=($i>0?',':'').'`'.$columns[$i].'`=';
  $set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
}

// create SQL based on HTTP method
switch ($method) {
  case 'GET':
    $sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
  case 'PUT':
    $sql = "update `$table` set $set where id=$key"; break;
  case 'POST':
    $sql = "insert into `$table` set $set"; break;
  case 'DELETE':
    $sql = "delete from `$table` where id=$key"; break;
}

// excecute SQL statement
$result = mysqli_query($link,$sql);

// die if SQL statement failed
if (!$result) {
  http_response_code(404);
  die(mysqli_error());
}

// print results, insert id or affected row count
if ($method == 'GET') {
  if (!$key) echo '[';
  for ($i=0;$i<mysqli_num_rows($result);$i++) {
    echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
  }
  if (!$key) echo ']';
} elseif ($method == 'POST') {
  echo '{ "success":true, "data":[ { "id":'.mysqli_insert_id($link).' }]}';
} else {
  echo mysqli_affected_rows($link);
}

// close mysql connection
mysqli_close($link);
错误报告(E|u错误| E|u解析);
//获取请求的HTTP方法、路径和正文
$method=$\u服务器['REQUEST\u method'];
$request=explode('/',trim($_SERVER['PATH\u INFO'],'/');
$input=json\u解码(文件\u获取\u内容('php://input",对),;
//连接到mysql数据库
$link=mysqli_connect('localhost','user','password','table');
mysqli_set_字符集($link,'utf8');
//从路径中检索表和键
$table=preg_replace('/[^a-z0-9'+/i','',数组移位($request));
$key=array\u shift($request)+0;
//从输入对象中转义列和值
$columns=preg_replace('/[^a-z0-9.]+/i','',数组键($input));
$values=数组映射(函数($value)使用($link){
如果($value==null),则返回null;
返回mysqli_real_escape_字符串($link,(string)$value);
},数组_值($input));
//生成SQL命令的集合部分
$set='';
对于($i=0;$i0?),“:”。“$columns[$i]”,“=”;
$set.=($values[$i]==null?'null':'。$values[$i].');
}
//基于HTTP方法创建SQL
开关($方法){
案例“GET”:
$sql=“从“$table`.”($key?”中选择*,其中id=$key:”);中断;
案件‘付诸表决’:
$sql=“update`$table`set$set,其中id=$key”中断;
案例“POST”:
$sql=“插入到“$table`set$set”中断;
案例“删除”:
$sql=“从`$table`中删除,其中id=$key”中断;
}
//异常SQL语句
$result=mysqli\u查询($link,$sql);
//如果SQL语句失败,则执行die
如果(!$result){
http_响应_代码(404);
die(mysqli_error());
}
//打印结果、插入id或受影响的行数
如果($method=='GET'){
如果(!$key)回显“[”;
对于($i=0;$i0?’,“:”).json_编码(mysqli_fetch_对象($result));
}
如果(!$key)回显']';
}elseif($method=='POST'){
回显“{“success”:true,“data”:[{“id”:”.mysqli_insert_id($link)。'}]}”;
}否则{
echo mysqli_受影响的_行($link);
}
//关闭mysql连接
mysqli_close($link);

Nils。。我想知道你过得怎么样。
我们大约在同一天开始了这个过程。我们最终使用slimphp框架构建了一个漂亮的restapi。我推荐它

很多地方都有人谈论REST,但协议似乎没有明确定义。
这是什么意思?此外,这个问题似乎过于宽泛。它可能需要分为几个部分。对我来说,如果我发现这两个API提供不同的输出格式,它似乎没有明确的定义。我不认为它太宽泛了。主要问题可以这样回答:从xyz获取RESTAPI,并用abc配置它,它就可以工作了。。。。另外两个问题在我脑海中游荡。RESTAPI是一个非常广泛的主题。每个RESTAPI都是不同的,这就是为什么有人在评论中说你的问题太广泛了。似乎您对RESTAPI缺乏理解,这会让您认为您的问题很狭隘,而事实并非如此。我是这两个脚本的作者。脚本1不仅从数据库中读取数据。脚本2对许多人来说都运行良好(测试也运行良好)。您还将此问题作为问题发布到我的存储库上的Github,但您没有回应。我还是很乐意帮你。