Wenchen的专栏

原创Blog,,转载请注明出处 blog.csdn.net/hello_hwc

由于接下来会把博客更新的重心放到网络上来。想来想去,直接写Demo,讲解API似乎不是一个好的方式。网络涉及到的概念太多,我就挑几个我认为需要提前理解的概念来讲解下。然后,我会更新几篇IOS中网络编程的博客,关于NSURLSession以及IOS的一个很火的开源库AFNetworking。

一 REST的概念

REST(Representational State Transfer)含状态传输是一种软件架构风格。 要点

资源由URI(统一资源定位符)的来指定。 通过资源的表现形式来操作资源 对资源的操作包括获取、创建、修改和删除资源,对应HTTP协议提供的GET、POST、PUT和DELETE方法

– 安全-指的是对原有资源没有任何影响 – 等幂-不管操作多少次对资源的影响都是一样的。

这里,再讲解下PUT和POST的区别

最大的区别是PUT是等幂的,也就是同一个操作,不管PUT多少次,都是一样的。而POST则不一样,POST多次会导致多个资源被创建。PUT需要完整的URI,而POST不需要。如果,URL不完整,PUT不会被执行。

简单来说,REST就是对资源的操作都可以通过URI来完成,REST是基于资源的。

二 REST的要求客户端和服务器的架构链接协议的无状态(协议本身不记录链接的状态信息)层次化的系统可以利用Cache来提高性能三 基于HTTP的REST简介

REST API不依赖于协议,但是几乎全部的REST都是基于HTTP协议的。因此,举例也就只举HTTP的例子。基于HTTP的REST API包括三部分:

1 资源的URI2 资源的传输格式3 对资源的操作(GET、POST、PUT,DELETE,Options,Head方法)

HTTP的交互的过程是客户端发出一个请求,然后服务器返回一个请求。交互的过程中,处理传递的数据之外,也需要一些meta Data用来传递额外的信息(例如接受的数据格式,授权,证书等信息)。一个REST的HTTP请求如图

其中

例如,一个GET 方法,(默认在浏览器中输入URL然后回车,就是GET方法)

GET -Encoding:gzip, deflate, sdch-hCVG9GN29OSkkwdld-=.baidu.com() AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36

上述除了GET 之外都是headers。具体的header字段含义可以参考wiki

发出请求后,服务器返回响应。响应的格式如下

例如,上述对的GET方法 Response Code

Status Code:200 OK 表示请求成功

Response Header

BDPAGETYPE:2 BDQID:0xf0ed07ea0034f3f2 BDUSERID:797041113 Cache-Control:private Connection:keep-alive Content-Encoding:gzip Content-Type:text/html Date:Mon, 09 Mar 2015 01:53:10 GMT Expires:Mon, 09 Mar 2015 01:53:10 GMT Server:BWS/1.1 Set-Cookie:BDSVRTM=326; path=/ Set-Cookie:BD_HOME=1; path=/ Set-Cookie:H_PS_PSSID=12760_12528_1443_12772_12691_12717_12721_12728_12735_12739_12743_12763_12781_8498_11422; path=/; domain=.baidu.com Transfer-Encoding:chunked Via:1.1 hkidc-dmz-wsa-4-mgmt.cisco.com:80 (Cisco-WSA/8.5.0-497)

Response Body

是一个HTML网页,内容过多,这里不列出来了。

四 举例

首先介绍一个小工具,Chrome的扩展程序,用来测试REST API。 Advanced REST Client

然后,我们利用这个程序来测试一个免费的获取天气的网站REST API。 网站地址

然后,用这个工具来测试GET方法 GET ?q=Shanghai,china

Status200 OK Show explanation Loading time: 388Request headers User-Agent: Mozilla/Safari/537.36Content-Type: text/plain; charset=utf-8 Accept: */*Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: __utmt=; __utmb=; __utmc=.utmcsr=so.com|utmccn=(organic)|utmcmd=organic|utmctr=weather.com%20REST%20APIResponse headers Server: nginx Date: Mon, 09 Mar 2015 03:46:05 GMT Content-Type: application/json; charset=utf-8 Transfer-Encoding: chunked Connection: keep-aliveX-Source: redisAccess-Control-Allow-Origin: *Access-Control-Allow-Credentials: trueAccess-Control-Allow-Methods: GET, POST

返回的message内容

{“coord”:{“lon”:121.47,”lat”:31.23},”sys”:{“type”:1,”id”:7452,”message”:0.1765,”country”:”China”,”sunrise”:1425852688,”sunset”:1425895071},”weather”:[{“id”:804,”main”:”Clouds”,”description”:”overcast clouds”,”icon”:”04d”}],”base”:”cmc stations”,”main”:{“temp”:283.62,”pressure”:1027,”humidity”:81,”temp_min”:282.15,”temp_max”:285.93},”wind”:{“speed”:6,”deg”:310},”clouds”:{“all”:90},”dt”:1425869026,”id”:1796231,”name”:”Shanghai”,”cod”:200}

五 REST的优点

通讯本身的无状态特性会提高服务器对请求的处理能力 浏览器的本身就是客户端 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小 可以利用缓存来提高性能

参考资料: ?pgno=2

一直觉得人应该去旅行,在年轻的时候,趁着有脾气装潇洒,

Wenchen的专栏

相关文章:

你感兴趣的文章:

标签云: