前言
对dedecms进行二次开发对定制了相应webservice接口提供iPhone终端使用,数据结构采用了更加灵活简洁的JSON!
准备
像往常一样,当项目开始之前总喜欢把需求进行分解,并针对各个需求提出各种疑问!这样有针对性的把问题解决自己心里也就明朗了,很清楚要怎么去做了!
这次针对dedecms二次开发webservice接口,需求已经很明确:
dedecms二次开发webservice
数据格式采用JSON
那么针对这二点,我们自然会想到如何几个问题:(因篇幅过长,故问题分开讲解)
如何利用dedecms现在的API操作数据库?
如何知道我们数据存放在哪些表及表中各字段是做什么?
PHP中如何把数据以JSON的方式返回给iPhone使用呢(用的是PHP版的dedecms)?
当用 json_encode() 返回中文却被编码成 null时,我们应该如何解决呢?
实例讲解
在找到了上面4个问题的答案以后,我们接下来的事情已变成的很简单!
下面我以根据文章编号获取文章信息的API为例,讲解如何运算这样的知识:
1
2
3
4
5
6
7
8
|
<?php
require_once(dirname(__FILE__) ."/../../include/common.inc.php");
require_once(dirname(__FILE__) ."/jsonUtils.php");
$sql= "select a.id,a.title,a.pubdate,a.description,b.body
FROM #@__archives a,#@__addonarticle b where a.id = b.aidanda.id=$id";
$row=$dsql->GetOne($sql);
echoJSON($row);
?>
|
3行:用于引入json处理的函数,已解决中文为null的问题
4行: 用于获取数据的sql语句,其他的数据结构可以在《Dedecms 数据库结构分析》中查找
6行: 执行查询语句并返回一条数据
7行: 把结果以json的格式输出
jsonUtils.php代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?php
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
functionarrayRecursive(&$array,$function,$apply_to_keys_also= false)
{
static$recursive_counter= 0;
if(++$recursive_counter> 1000) {
die('possible deep recursion attack');
}
foreach($arrayas$key=>$value) {
if(is_array($value)) {
arrayRecursive($array[$key],$function,$apply_to_keys_also);
}else{
$array[$key] =$function($value);
}
if($apply_to_keys_also&&is_string($key)) {
$new_key=$function($key);
if($new_key!=$key) {
$array[$new_key] =$array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 将数组转换为JSON字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
functionJSON($array) {
arrayRecursive($array,'urlencode', true);
$json= json_encode($array);
returnurldecode($json);
}
?>
|
总结
在现在为止,针对dedecms二次开发webservice的知识与问题已全部介绍完毕!
原文出自:老冯网