我阅读了很多关于PHP的Restful教程.
(我不想深入探讨为什么我不使用RoR.这是由于团队更熟悉PHP)
因为我们计划将来扩展到API,所以我认为实现Restful Web服务很重要.
我看了很多教程
http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
显然宁静是为web服务.
网页怎么样?它们也可以是RESTFUL吗?
如果答案是否定的,请不要超出这条线并告诉我.谢谢.
我知道让网址看起来像RESTFUL网址就是简单地使用mod_rewrite.但是,我很确定,宁静的架构不仅仅是让网址看起来不错.
例如,我在名为list.php的网页上有一个项目列表.每个项目旁边都有一个删除链接.例如,list.php?id = 1&deleteitem
当有人点击list.php?id = 1&deleteitem链接时,我会回到同一个list.php文件并检查$ _GET中的param deleteitem.
如果检测到,我将根据$ _GET中的参数id从数据库中删除.
之后我将重定向回list.php没有任何参数.
我想知道,我如何使整个流程RESTFUL?
我问,因为在REST中,要删除一些你需要使用HTTP请求方法(DELETE).
很明显,在我的链接中,它们都很简单 Delete
请赐教.
我的编程并不那么强大,如果给出的建议尽可能地成为外行,那将是很好的.
谢谢.
编辑
我有2个跟进问题.
问题1)由于这是一个带分页的项目列表,如果我想让它成为RESTful,URL会是什么样子?
问题2)因为我在列表中的每个项目旁边放置DELETE链接,我现在明白了,我应该使用
代替.
但表格应该张贴到哪里?项目网址?/项目/ {项目-ID}
但是我想回到这个列表页面,在成功删除数据库中的行后显示成功消息.
当我使用成功消息刷新此列表页面时,我还想避免弹出消息.
如果我发回这个list.php网址,那么它不是RESTful是吗?因为下面的答案我告诉我每个项目都是需要自己网址的资源.
请赐教.谢谢.
RESTful通常在引用Web服务时使用,但它非常适用于Web页面.简而言之,RESTful就是处理资源.资源可以是人,书,电影,剧院,票,或任何你喜欢的东西.
您可以对资源执行四种基本操作.
创建(POST)
读(GET)
更新(PUT)
删除(删除)
大多数Web浏览器不支持PUT
和DELETE
操作,因此您只能使用POST操作来发送数据.Rails通过传入一个名为_method
框架拾取的隐藏参数来伪造PUT和DELETE,并根据该值对其进行路由.
此外,你永远不应该使用GET
任何破坏性的行动.任何改变你的资源(S)的国家行为,应该被称为要么POST
,PUT
或DELETE
与该变更(假PUT/POST与DELETE如果需要的话).
我建议你查看在Rails中处理RESTful路由的方式,只是为了得到一个想法,如果没有别的.尽管上面的四个动作足以以任何可能的方式修改资源,但Rails还引入了其他三种听起来很有用的动作.
index(列出所有项目的视图)
new(通常是添加新资源的表单视图)
编辑(通常是更新现有资源的表单视图)
在设计RESTful网站时,漂亮的网址肯定在桌面上,但最大的好处可能是代码质量自动提升.当您只处理资源,并且只有四个可以应用于资源的潜在操作时,事情就会开始自行清理.
编辑1:自我描述性URL是首选,将使您的生活更轻松,但没有什么能阻止创建唯一标识资源并使用HTTP谓词管理它的神秘URL.以下URL(使用md5)唯一标识资源的URL完全是RESTful.
// represents a person "John Doe" http://example.com/4c2a904bafba06591225113ad17b5cec // represents the movie "Lord of the Rings: The Two Towers" http://example.com/1d9198260dec7bda3fb21e232d60fec3 // represents the "Formula One" sport http://example.com/fs340as?id=23xa12&type=SP012Ts
那是在那里的REpresentational State Transfer.MD5哈希就像保持不变的资源的邮件地址一样.表示可以是电影的细节(在html/xml/json /等中),也可以是电影本身的视频,具体取决于客户端的功能).
编辑2:假设你有一个资源,这是一个countries
世界的集合.它可以用URI和HTTP动词表示,例如:
GET /countries
由于分页是应用程序的属性而不是资源本身,因此您可以提供查询字符串参数来控制它.
GET /countries?page=1
一个国家也是一种资源,是国家资源的一部分.您可以使用以下URL标识国家/地区:
/countries/
可以使用以下动词执行此国家/地区的操作:
GET /countries/POST /countries -- the new country has no existing representation PUT /countries/ DELETE /countries/