JSON Patch
使用HTTP的PATCH方法可以通过一个结构化的数据来编辑服务器上的资源。如果要编辑数据是JSON的话,在规范中又有另一套标准来定义这个PATCH方法对JSON的编辑语法[RFC6902]。虽然服务器程序一般没有原生支持,不过照着这个规范实现一个也不难。
其实我不喜欢这套规范,也懒得自己去实现,所以直接网络上找了个现成的库 JsonPatch.inc,这里使用Apache+PHP实现。首先,要配置.htaccess,把json文件交给程序处理。
RewriteCond %{REQUEST_METHOD} ^PATCH$
RewriteRule ^(.*\.json)$ /json-patch.php?path=$1
然后是 json-patch.php 的内容
require 'JsonPatch.inc';
$path=$_GET['path'];
file_exists($path) or header('HTTP/1.1 404 Not Found') or die;
$doc=json_decode(file_get_contents($path),true);
if(is_null($doc))header('HTTP/1.1 403 Forbidden') or die;
$patches=json_decode(file_get_contents('php://input'),true);
if(is_null($patches))
header('HTTP/1.1 415 Unsupported Media Type') or die;
$result=JsonPatch::patch($doc,$patches);
file_put_contents($path,json_encode($result));
再创建一个初始的JSON文件 test.json
[]
然后开始测试,在控制台中执行一个PATCH请求,给这个JSON数组添加一个元素
刷新后可以看到JSON文件的相应位置已经被写入数据了
当然,这只是个最简单的演示,安全性问题还有一大堆需要处理。而且我不喜欢这套规范,所以不想深究。不过PATCH确实是好东西,也许和NoSQL一起用会更合适。