※ 引述《tas72732002 (葱头)》之铭言:
: 目前的网站常用呼叫的api方式大都是 xxx.xxx.xxx.xxx/api/func/?para = demo
: 注 : func 是功能名称或class ~
: 但目前我的的写法是 xxx.xxx.xxx.xxx/api/protal.php?para = demo
: 请问要如何改写才能改成上述的格式 ?
: 我的改法 :
: (1) 将所有访问都只到处理router那支, 这必须在 nginx 或 apache设定转址
: (2) router.php 根据func与参数呼叫指定的 class
: 以上是我的改法, 不知道一般做法是否是这样
: 到我好奇的是, 两者差在哪边啊, 有什么好处吗, 使用后者还要多转一次网址 ~
: 不太清楚好处在哪里 ?
想想还有用回的好了,有错的话请指正,这是依照我的经验来看的。
很多framework都有处理路由
以ci来说不设计route也不做index.php的处理前
假设你有一个controller,叫做blog,其中有一个show的函式
路径可能会像这样:
http://hostname/index.php/blog/show
不过通常我们都会把index.php用.htaccess来滤掉变成
http://hostname/blog/show
也习惯上不会再使用get的网址模式例如:
http://hostname/blog/show/?param1=helloworld¶m2=wonderful
会改成如下:
http://hostname/blog/show/helloworld/wonderful
也就是后续直接当做参数抛进show这个method
class blog{
function show($param1,$param2){
your code...
}
}
再来就是framework会提供的路由设计例如:
$route['blog/(:any)/(:any)'] = 'blog/show/$1/$2'
于是可以简化成:
http://hostname/blog/helloworld/wonderful
不过到这边其实都谈不上restful………
因为你提供网址通常要的就只是一个页面。
然而restful的请求格式通常就是要在路径上包含请求的字段名称和一些要求的格式
例如:
http://resthostname/blog/show/name/ptt/address/taipei/format/json
上述分开来看格式就是:
resthostname => server的位置
blog => class名称
show => method 名称
name => 送出请求参数的key1,其值为ptt
address => 送出请求参数的key2,其值为taipei
format => 要求response回来的资料为json格式(通常另一种就是xml)
其实也就是说你送出给服务器的资料就是name = ptt,address = taipei
服务器会就你传送的资料来判定是不是符合他的规则以及该传给你资料还是抛错误给你。
如果符合所需的资料要求以及使用你传的内容找到符合的资料。
最后就会依据你要求的格式请求将资料以既定的格式回传给你。
用在那?
不论是是ajax或是手机装置乃至于不同的程式语言间的资料传递传换。
都遵循着相同的格式要求。
不同的语言之间只要做对应的资料转换就可以顺利取回内容。
通常较严谨的restful甚至你得将依照其规范压密的内容传过去解密。
他才会传给你正确的资料。
不过,并不是表示restful的设计是一定按照这样的请求格式。
即使你打算用http://resthostname/blog/ptt/taipei/json
想简化成这样也行。
总之概念上来说你要怎么让资料能顺利的请求并能够大幅降低服务器消耗。
在开放资料的接口来说,其实就是告诉对方请求的url格式,照这个规则就可以
取回需求的资料内容。