FreeOZ论坛

标题: How to Create a REST API with php [打印本页]

作者: coredump    时间: 20-7-2010 12:50
标题: How to Create a REST API with php
网上找到这么个例子:http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

有没有有经验的同学分享下其它更好的方式?目的就是,用最方便的方法给现有的PHP编写的网站提供REST API, 比如一个DISCUZ论坛之类的
作者: aroma    时间: 20-7-2010 21:11
你是想找一个能够自动把php的网站的接口包装成REST的东西? 原来的PHP网站的接口是什么样的呢?
作者: kaile    时间: 21-7-2010 03:44
REST是什么意思?为什么要给网站创建API?
作者: coredump    时间: 21-7-2010 10:12
原帖由 aroma 于 20-7-2010 20:11 发表
你是想找一个能够自动把php的网站的接口包装成REST的东西? 原来的PHP网站的接口是什么样的呢?

比如FreeOZ论坛用的Discuz! , 希望达到以下效果:

GET http://www.freeoz.org/api/user/userid  得到用户id为userid的用户信息
[size=14.1667px]GET http://www.freeoz.org/api/thread/threadid 得到帖子id为threadid的内容等等


[size=14.1667px]内容以JSON方式返回,目的是方便开发各种访问论坛的客户端软件,比如FreeOZ手机版之类。

[ 本帖最后由 coredump 于 21-7-2010 09:13 编辑 ]
作者: coredump    时间: 21-7-2010 10:12
原帖由 kaile 于 21-7-2010 02:44 发表
REST是什么意思?为什么要给网站创建API?

http://zh.wikipedia.org/zh/REST
作者: 周星星1832    时间: 21-7-2010 10:17
不懂你啥意思。
你要的API干什么用的。
简单直接用CURL 不就完了,还搞什么API。
你要的功能很复杂吗?
作者: coredump    时间: 21-7-2010 10:23
原帖由 lufumin1832 于 21-7-2010 09:17 发表
不懂你啥意思。
你要的API干什么用的。
简单直接用CURL 不就完了,还搞什么API。
你要的功能很复杂吗?
目的是方便开发各种访问论坛的客户端软件

就像twitter, facebook之类的有API一样,现在discuz组织页面的方式不适合直接在手机之类的设备上浏览,编写手机客户端,没有比较好用的API的话需要很费劲地解析HTML。
作者: 周星星1832    时间: 21-7-2010 10:31
那就soap,wsdl。这比你引用的那个要标准多了
简单的还有xmlrpc。
再说php built-in soap,很简单的。
作者: coredump    时间: 21-7-2010 10:37
原帖由 lufumin1832 于 21-7-2010 09:31 发表
那就soap,wsdl。这比你引用的那个要标准多了
简单的还有xmlrpc。
再说php built-in soap,很简单的。

xmlrpc还好,本质上和REST差别不大,Zend Framework实现REST的方式好像就是基于xmlrpc的伪REST。
SOAP/WSDL太笨重了:[size=14.1667px]http://sberyozkin.blogspot.com/2007/07/wsdl-is-evil-and-blame-game.html
作者: 周星星1832    时间: 21-7-2010 10:48
那是2007年的文章,而且是一家之谈.
再说php的SOAP有NON-WSDL MODE,和谈笨重?
作者: coredump    时间: 21-7-2010 10:56
原帖由 lufumin1832 于 21-7-2010 09:48 发表
那是2007年的文章,而且是一家之谈.
再说php的SOAP有NON-WSDL MODE,和谈笨重?

看看现在Web 2.0 网站哪些用SOAP了?  我设想的是客户端不需要任何额外的library支持,只需要简单的http访问就得到需要的JSON数据即可。类似于Google GData那样的风格。这样无论是桌面的客户端,还是手机等都可以方便地使用网站数据。

SOAP和REST适用不同的场合,具体的选择指导可以参考InfoQ的这篇文章(还比较新,2010年4月的):[size=14.1667px]http://www.infoq.com/articles/rest-soap-when-to-use-each , 这篇说的也比较详细:http://www.taranfx.com/rest-vs-soap-using-http-choosing-the-right-webservice-protocol
简单地说就是:REST适合做无状态的网站信息发布服务,SOAP适合做有状态的企业间大型信息系统间的整合,所以,极少看到google, facebook, twitter之类网站提供SOAP API,  但是SOAP在银行,证券等企业间使用地非常广泛。

[ 本帖最后由 coredump 于 21-7-2010 10:02 编辑 ]
作者: 周星星1832    时间: 21-7-2010 11:08
没做过SOCIAL NETWORK。
接触的大项目都是SOAP API的。

按你说的用CURL就行.返回JSON.
作者: coredump    时间: 21-7-2010 11:24
原帖由 lufumin1832 于 21-7-2010 10:08 发表
没做过SOCIAL NETWORK。
接触的大项目都是SOAP API的。

按你说的用CURL就行.返回JSON.
就是这样想的。
CURL什么的都是client side, 每种client方式不一样,可能是AJAX,可能是curl,或者用qt, objective-c, java之类的直接写。

REST就是这个如何表达好返回JSON或者XML的Server端的方案,我看到Zend Framework里有这个实现,不过是用的xmlrpc的方式,不太喜欢。

为一个网站设计REST API本身也是个很好的练习,等设计好,请大家各显神通,来为FreeOZ编写各种客户端[size=14.1667px]
作者: woodheadz    时间: 21-7-2010 13:18
支持REST!!
我对PHP不是很熟,但我想可不可以这样:
弄个RESET请求Url到具体PHP函数的映射配置,然后重写URL到处理REST请求的模块,该模块按配置规则把REST请求分析成针对PHP接口函数的调用,再加载对应的PHP函数进行动态调用。
我想这个程序应该不会很复杂吧? 或者现在是不是已经有了类似的东西?

[ 本帖最后由 woodheadz 于 21-7-2010 12:20 编辑 ]
作者: 周星星1832    时间: 21-7-2010 13:37
原帖由 woodheadz 于 21-7-2010 12:18 发表
支持REST!!
我对PHP不是很熟,但我想可不可以这样:
弄个RESET请求Url到具体PHP函数的映射配置,然后重写URL到处理REST请求的模块,该模块按配置规则把REST请求分析成针对PHP接口函数的调用,再加载对应的PHP函数 ...

我觉得不复杂。可以用MODE_REWRITE 映射URL
作者: woodheadz    时间: 21-7-2010 15:46
确实Soap/WebService那一套东西过于复杂了。
因为实在考虑的过于周全,导致很多时候因为要支持这些标准而带来的麻烦,会超过这些标准带来的好处。
我现在正在做的一个SNS应用前端是flash,后端是PHP,本来打算也是走WebService的,无奈弄了老半天,就没找到个我手上的Flash WebService客户端访问起来完全没问题的PHP WebService 服务端。
尝试了下修改Flash客户端的代码以支持服务端,很快就放弃了。因为我觉得按我的需求,自己另起炉灶用JSON序列化做一个HTTP远程调用协议也没什么麻烦的。
果然后来很快就搞定了,包含Flash客户端和PHP服务端,开发到现在觉得用起来还很不错,相信无论是开发效率还是接口的调用效率肯定都要超过WebService
感觉在对外提供的服务接口本身不是很复杂,或是向我这样服务就没打算要公开的场合,WebService不见得是个好选择。

[ 本帖最后由 woodheadz 于 21-7-2010 14:50 编辑 ]




欢迎光临 FreeOZ论坛 (https://www.freeoz.org/ibbs/) Powered by Discuz! X3.2