找回密码
 FreeOZ用户注册
查看: 2652|回复: 15
打印 上一主题 下一主题

[论坛技术] How to Create a REST API with php

[复制链接]
跳转到指定楼层
1#
发表于 20-7-2010 12:50:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
网上找到这么个例子:http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

有没有有经验的同学分享下其它更好的方式?目的就是,用最方便的方法给现有的PHP编写的网站提供REST API, 比如一个DISCUZ论坛之类的
回复  

使用道具 举报

2#
发表于 20-7-2010 21:11:17 | 只看该作者
你是想找一个能够自动把php的网站的接口包装成REST的东西? 原来的PHP网站的接口是什么样的呢?
回复  

使用道具 举报

3#
发表于 21-7-2010 03:44:47 | 只看该作者
REST是什么意思?为什么要给网站创建API?
回复  

使用道具 举报

4#
 楼主| 发表于 21-7-2010 10:12:14 | 只看该作者

比如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 编辑 ]
回复  

使用道具 举报

5#
 楼主| 发表于 21-7-2010 10:12:54 | 只看该作者
原帖由 kaile 于 21-7-2010 02:44 发表
REST是什么意思?为什么要给网站创建API?

http://zh.wikipedia.org/zh/REST
回复  

使用道具 举报

6#
发表于 21-7-2010 10:17:12 | 只看该作者
不懂你啥意思。
你要的API干什么用的。
简单直接用CURL 不就完了,还搞什么API。
你要的功能很复杂吗?
回复  

使用道具 举报

7#
 楼主| 发表于 21-7-2010 10:23:02 | 只看该作者
原帖由 lufumin1832 于 21-7-2010 09:17 发表
不懂你啥意思。
你要的API干什么用的。
简单直接用CURL 不就完了,还搞什么API。
你要的功能很复杂吗?
目的是方便开发各种访问论坛的客户端软件

就像twitter, facebook之类的有API一样,现在discuz组织页面的方式不适合直接在手机之类的设备上浏览,编写手机客户端,没有比较好用的API的话需要很费劲地解析HTML。
回复  

使用道具 举报

8#
发表于 21-7-2010 10:31:32 | 只看该作者
那就soap,wsdl。这比你引用的那个要标准多了
简单的还有xmlrpc。
再说php built-in soap,很简单的。
回复  

使用道具 举报

9#
 楼主| 发表于 21-7-2010 10:37:07 | 只看该作者
原帖由 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
回复  

使用道具 举报

10#
发表于 21-7-2010 10:48:09 | 只看该作者
那是2007年的文章,而且是一家之谈.
再说php的SOAP有NON-WSDL MODE,和谈笨重?
回复  

使用道具 举报

11#
 楼主| 发表于 21-7-2010 10:56:53 | 只看该作者
原帖由 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 编辑 ]
回复  

使用道具 举报

12#
发表于 21-7-2010 11:08:07 | 只看该作者
没做过SOCIAL NETWORK。
接触的大项目都是SOAP API的。

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

使用道具 举报

13#
 楼主| 发表于 21-7-2010 11:24:14 | 只看该作者
原帖由 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]
回复  

使用道具 举报

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

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

评分

参与人数 1威望 +30 收起 理由
coredump + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

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

我觉得不复杂。可以用MODE_REWRITE 映射URL

评分

参与人数 1威望 +30 收起 理由
coredump + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

16#
发表于 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威望 +30 收起 理由
coredump + 30 你太有才了!

查看全部评分

回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 2-11-2024 00:37 , Processed in 0.059657 second(s), 32 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表