coredump 发表于 20-7-2010 12:50:02

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:17

你是想找一个能够自动把php的网站的接口包装成REST的东西? 原来的PHP网站的接口是什么样的呢?

kaile 发表于 21-7-2010 03:44:47

REST是什么意思?为什么要给网站创建API?

coredump 发表于 21-7-2010 10:12:14

原帖由 aroma 于 20-7-2010 20:11 发表 http://www.freeoz.org/ibbs/images/common/back.gif
你是想找一个能够自动把php的网站的接口包装成REST的东西? 原来的PHP网站的接口是什么样的呢?
比如FreeOZ论坛用的Discuz! , 希望达到以下效果:

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


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

[ 本帖最后由 coredump 于 21-7-2010 09:13 编辑 ]

coredump 发表于 21-7-2010 10:12:54

原帖由 kaile 于 21-7-2010 02:44 发表 http://www.freeoz.org/ibbs/images/common/back.gif
REST是什么意思?为什么要给网站创建API?
http://zh.wikipedia.org/zh/REST

周星星1832 发表于 21-7-2010 10:17:12

不懂你啥意思。
你要的API干什么用的。
简单直接用CURL 不就完了,还搞什么API。
你要的功能很复杂吗?

coredump 发表于 21-7-2010 10:23:02

原帖由 lufumin1832 于 21-7-2010 09:17 发表 http://www.freeoz.org/ibbs/images/common/back.gif
不懂你啥意思。
你要的API干什么用的。
简单直接用CURL 不就完了,还搞什么API。
你要的功能很复杂吗?
目的是方便开发各种访问论坛的客户端软件
就像twitter, facebook之类的有API一样,现在discuz组织页面的方式不适合直接在手机之类的设备上浏览,编写手机客户端,没有比较好用的API的话需要很费劲地解析HTML。

周星星1832 发表于 21-7-2010 10:31:32

那就soap,wsdl。这比你引用的那个要标准多了
简单的还有xmlrpc。
再说php built-in soap,很简单的。

coredump 发表于 21-7-2010 10:37:07

原帖由 lufumin1832 于 21-7-2010 09:31 发表 http://www.freeoz.org/ibbs/images/common/back.gif
那就soap,wsdl。这比你引用的那个要标准多了
简单的还有xmlrpc。
再说php built-in soap,很简单的。
xmlrpc还好,本质上和REST差别不大,Zend Framework实现REST的方式好像就是基于xmlrpc的伪REST。
SOAP/WSDL太笨重了:http://sberyozkin.blogspot.com/2007/07/wsdl-is-evil-and-blame-game.html

周星星1832 发表于 21-7-2010 10:48:09

那是2007年的文章,而且是一家之谈.
再说php的SOAP有NON-WSDL MODE,和谈笨重?

coredump 发表于 21-7-2010 10:56:53

原帖由 lufumin1832 于 21-7-2010 09:48 发表 http://www.freeoz.org/ibbs/images/common/back.gif
那是2007年的文章,而且是一家之谈.
再说php的SOAP有NON-WSDL MODE,和谈笨重?
看看现在Web 2.0 网站哪些用SOAP了?我设想的是客户端不需要任何额外的library支持,只需要简单的http访问就得到需要的JSON数据即可。类似于Google GData那样的风格。这样无论是桌面的客户端,还是手机等都可以方便地使用网站数据。

SOAP和REST适用不同的场合,具体的选择指导可以参考InfoQ的这篇文章(还比较新,2010年4月的):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:07

没做过SOCIAL NETWORK。
接触的大项目都是SOAP API的。

按你说的用CURL就行.返回JSON.

coredump 发表于 21-7-2010 11:24:14

原帖由 lufumin1832 于 21-7-2010 10:08 发表 http://www.freeoz.org/ibbs/images/common/back.gif
没做过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编写各种客户端:victory:

woodheadz 发表于 21-7-2010 13:18:47

支持REST!!
我对PHP不是很熟,但我想可不可以这样:
弄个RESET请求Url到具体PHP函数的映射配置,然后重写URL到处理REST请求的模块,该模块按配置规则把REST请求分析成针对PHP接口函数的调用,再加载对应的PHP函数进行动态调用。
我想这个程序应该不会很复杂吧? 或者现在是不是已经有了类似的东西?

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

周星星1832 发表于 21-7-2010 13:37:20

原帖由 woodheadz 于 21-7-2010 12:18 发表 http://www.freeoz.org/ibbs/images/common/back.gif
支持REST!!
我对PHP不是很熟,但我想可不可以这样:
弄个RESET请求Url到具体PHP函数的映射配置,然后重写URL到处理REST请求的模块,该模块按配置规则把REST请求分析成针对PHP接口函数的调用,再加载对应的PHP函数 ...
我觉得不复杂。可以用MODE_REWRITE 映射URL

woodheadz 发表于 21-7-2010 15:46:33

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

[ 本帖最后由 woodheadz 于 21-7-2010 14:50 编辑 ]
页: [1]
查看完整版本: How to Create a REST API with php