oauth的令牌机制还是很适合api的身份验证的 实际上就是一种SESSION的变种
本身也没多少难度 就是按照预先几个平台约定的key ,请求端通过发送key加某个规则(比如平台id)加密后构成的签名码,发送到服务器端,服务器根据提供的身份参数查询获得预先约定好的key 再用key加规则(比如平台id)加密后确定无误就算通过 :很像密码验证吧。
然后给对方返回一个无序的加密字符串,就是令牌啦。令牌要存在服务器上,一般存数据库里和平台请求的来源对应,设置有效期保存。
客户端拿到这个令牌后就可以通过令牌访问了,(和SESSION几乎一模一样)在服务器上交互,只需要验证令牌的正确性和有效期,就可以放行进行操作了。
大致如此,细节有很多变化,机制运作差不多就这个样子。
参考thinkphp3.2手册 专题=>restful;REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性.restful借口的实现必不可少的便是路由的运用。启用路由:在Application\Common\Conf\config.PHP里开启路由,'URL_ROUTER_ON' => true, 然后设置路由规则,在模块的配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,每个元素都代表一个路由规则,例如:[php] view plain copy print?'URL_ROUTE_RULES'=>array( 'news/:id' => 'Index/index', ), 表示Index控制器里面的index方法,在地址栏内输入index.php/Home/news/china.html则会输出china.xml.简单的了解路由规则的定义格式为:'路由表达式'=>'路由地址和传入参数'。在控制器里接收通过路由传过来的值:[php] view plain copy print?_method){ case 'get': // get请求处理代码 if ($type== 'html'){ // 'html';die; $data=$this->city($pyname); //print_r($data); //Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html。 //$this->response($data,'json'); $result=$this->response($data,'html'); //print_r($result); return $result; }elseif($type== 'xml'){ $data = $this->city($pyname); $result = $this->response($data,'xml'); return $result; }elseif($type=='json'){ $data=$this->city($pyname); $result=$this->response($data,'json'); return $result; } break; case 'put': // put请求处理代码 break; case 'post': // post请求处理代码 break; } } public function city($name){ $sheng=M("sheng"); $city=M("city"); $xian=M("xian"); if($name=='china'){ $res=$sheng->select(); //print_r($res); return $res; }else{ //getFieldBy动态查询 根据字段查询并返回某个字段的值 $sid=$sheng->getFieldByPyname($name,'id'); //print_r($sid);die; if($sid==""){ $cid=$city->getFieldByPyname($name,'id'); if($cid==""){ $xid=$xian->getFieldByPyname($name,'id'); if($xid==""){ echo "没有该地天气数据"; }else{ $condition['id'] = $xid; $res=$xian->where($condition)->select(); //print_r($res); return $res; } }else{ $condition['p_id'] = $cid; $res=$xian->where($condition)->select(); // print_r($res); return $res; } }else{ $condition['p_id'] = $sid; $res=$city->where($condition)->select(); //print_r($res); return $res; } } } 注意:IndexController继承的是RestController而非Controller;__EXT__表示的是自动检测资源类型.Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html 。 这样,一个简单的天气查询的接口就实现了。
REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个惟一的地址。所有资源都共享统一的界面,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。另一个重要的 REST 原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。当REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。RESTful的实现:RESTful Web 服务与 RPC 样式的 Web 服务了解了什么是什么是REST,我们再看看RESTful的实现。最近,使用 RPC 样式架构构建的基于 SOAP 的 Web 服务成为实现 SOA 最常用的方法。RPC 样式的 Web 服务客户端将一个装满数据的信封(包括方法和参数信息)通过 HTTP 发送到服务器。服务器打开信封并使用传入参数执行指定的方法。方法的结果打包到一个信封并作为响应发回客户端。客户端收到响应并打开信封。每个对象都有自己独特的方法以及仅公开一个 URI 的 RPC 样式 Web 服务,URI 表示单个端点。它忽略 HTTP 的大部分特性且仅支持 POST 方法。由于轻量级以及通过 HTTP 直接传输数据的特性,Web 服务的 RESTful 方法已经成为最常见的替代方法。可以使用各种语言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])实现客户端。RESTful Web 服务通常可以通过自动客户端或代表用户的应用程序访问。但是,这种服务的简便性让用户能够与之直接交互,使用它们的 Web 浏览器构建一个 GET URL 并读取返回的内容。在REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETE,还可能包括 HEADER 和 OPTIONS。在RPC 样式的架构中,关注点在于方法,而在 REST 样式的架构中,关注点在于资源 —— 将使用标准方法检索并操作信息片段(使用表示的形式)。资源表示形式在表示形式中使用超链接互联。Leonard Richar ...
获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。
获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false);然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。
SOAP(Simple Object Access Protocol)简单对象访问协议,是基于HTTP的一种异构系统通信的协议,说白了就是xml文档传输,之所以会有它,就是在于不同语言C,C++,JAVA等语言开发的系统进行通信,是WebService就是基于SOAP协议的,确实是一种比较传统的SOA解决方案。
REST(Rerepresentational State Transfer)是外国一位博士提出的一种架构风格,从资源状态转换角度看待资源,但也是基于SOAP协议进行通信。
rest 是一种风格 restful Webservice 和 soap的区别在于表现形式不一样,如果想深入了解 可以去开开 深入理解Webservice 这本书,restful Webservice 不只是可以用json 也可以用xml 更可以用html做消息返回, rest 风格的Webservice 和传统的soap 主要的表现在于 rest是将资源暴露 soap是暴露操作 。具体的流程其实和soap是一样的,但是rest更方便,更轻。
89%的优秀读者还看下:
暂无相关信息