5月29 服务接口
接口:
接口分为两类:
面向对象的接口和常说的调用接口,
面向对象的接口时一个抽象类(抽象类:比较抽象不能直接new 需要子类来实现具体的操作,需要被继承)而接口比抽象类还要抽象,所用的关键字比较特殊interface
socket:TCP,长连接------
socket则是对TCP/IP协议的封装和应用(程序员层面上)。
也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,
而HTTP是应用层协议,主要解决如何包装数据。
TCP:长连接,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
HTTP:无状态。每次请求都会断开。建立新的断开,建立断开-----HTTP协议是无状态协议
无状态是指协议对于 事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
<?php //接口中必须要对父类进行重写 interface USB//不能直接new 通过子类 { function Read() { } function Write() { } } class Upan extends USB { function Read() { echo "读取USB"; } function Write() { echo "写入USB数据"; } } ?>
例题:
利用API接口查询天气预报,API:调用接口时给其数据并返回我们需要的数据
国家气象局天气预报接口API,可根据地区名称、经纬度、IP查询对应地区的天气预报。 接口返回7天的数据,包括白天晚上的温度、湿度、风速、风向、风力,一氧化碳、二氧化氮等PM 2.6空气质量指数,穿衣、出行、洗车等生活指数。7天天气范围的预报每天更新3次,分别是9点,12点,18点。实时天气情况每30分钟更新1次。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>利用API接口查询天气</title> </head> <body> <?php //md5签名方式--非简单签名 header("Content-Type:text/html;charset=UTF-8"); date_default_timezone_set("PRC"); $showapi_appid = '19667'; //替换此值,在官网的"我的应用"中找到相关值 $showapi_secret = '5693007ca66f483cb14782b137745212'; //替换此值,在官网的"我的应用"中找到相关值 $paramArr = array( 'showapi_appid'=>$showapi_appid, 'area'=>'青岛' ); //创建参数(包括签名的处理) function createParam ($paramArr,$showapi_secret) { $paraStr = ""; $signStr = ""; ksort($paramArr); foreach ($paramArr as $key => $val) { if ($key != '' && $val != '') { $signStr .= $key.$val; $paraStr .= $key.'='.urlencode($val).'&'; } } $signStr .= $showapi_secret;//排序好的参数加上secret,进行md5 $sign = strtolower(md5($signStr)); $paraStr .= 'showapi_sign='.$sign;//将md5后的值作为参数,便于服务器的效验 //echo "排序好的参数:".$paraStr."<br>"; return $paraStr; } $param = createParam($paramArr,$showapi_secret); $url = 'http://route.showapi.com/9-2?'.$param; //echo "请求的url:".$url."<br>"; $result = file_get_contents($url); echo "返回的json数据:"; $result = json_decode($result); //var_dump($result); //返回object //将object转换为数组 $attr = object_array($result); function object_array($array) { if(is_object($array)) { $array = (array)$array; } if(is_array($array)) { foreach($array as $key=>$value) { $array[$key] = object_array($value); } } return $array; } echo "今天的最高温度是:{$attr['showapi_res_body']['f1']['day_air_temperature']}";//查询最高温度 var_dump($attr); ?> </body> </html>
补充:
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的
HTTP超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。HTTP本身是一个无状态的 连接协议,为了支持 客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。