我刚刚设计了一个使用大量类的CMS。我的CMS是用PHP编写的。我想给它添加一个简单的SOAP API。每个对象都有getter和setter($obj->get_this()
和$obj->set_this($value)
)。当然,所有getter和setter都是公共方法。对象中的所有其他内容至少都是受保护的,但主要是私有的。每个对象都有一个get_all()
方法,该方法将所有私有对象变量设置为公共对象变量(例如:有一个私有$this->pName
、一个公共$this->name
和get_all()`函数填充所有公共变量)。
我梦想的Soap服务器将是代码最少、可扩展性最强的服务器,使用getter和setter来获取/设置变量,并且我不希望每次添加函数/方法/变量时都重写wsdl。我在谷歌上搜索过它,并在这里寻找一个简单的过程,但找不到简单且可扩展的代码/lib/process。我研究了nusoap,但使用PHP4兼容的lib似乎不是一个好的解决方案。我错过什么了吗?我遗漏了一些库/函数/方法/过程吗?
经过几天的思考:我找到了这个库:https://github.com/piotrooo/wsdl-creator
它不能满足我的需求,但不知何故。。。
我已经为我的对象的每个人创建了一个类,只是为了过滤我希望在API中可用或不可用的内容。
为了减少编写量,我制作了2个bash代码来预生成所有代码:对于吸气剂:
for j in $(for i in $(cat myclass.class.php | grep public | egrep 'get_') ;
do
echo $i | grep -v public | grep -v function
done )
do
method=$(echo $j | awk -F'(' '{ printf $1'} )
helper=$(echo $method | sed -e "s/get_//g" | sed -e "s/_/ /")
param=$(echo $method | sed -e "s/get_//g" )
echo '/**';
echo '* @desc Get '$helper;
echo '* @param int $id';
echo '* @return string $'$param;
echo '*/' ;
echo 'public function '$method'($id)';
echo '{';
echo ' $this->load($id);';
echo ' return $this->obj->'$j';' ;
echo '}' ;
done
对于设置者:
for j in $(for i in $(cat myclass.class.php | grep public | egrep 'set_') ;
do
echo $i | grep -v public | grep -v function
done )
do
method=$(echo $j | awk -F'(' '{ printf $1'} )
helper=$(echo $method | sed -e "s/set_//g" | sed -e "s/_/ /")
param=$(echo $j | awk -F'(' '{ printf $2'} | sed -e "s/)$//g")
echo '/**';
echo '* @desc Set '$helper;
echo '* @param int $id';
echo '* @param string '$param;
echo '* @return bool $res';
echo '*/' ;
echo 'public function '$method'($id,'$param')';
echo '{';
echo ' $this->load($id);';
echo ' return $this->obj->'$j';' ;
echo '}' ;
done
这些bash代码不是生产使用的,但它们可以帮助减少编写。
关于REST,这是我的下一个任务。。。