REST API详解

本文深入解析REST(Representational State Transfer)架构风格,介绍了REST的基本概念、核心要求,以及基于HTTP的REST API工作原理。通过实例演示了如何使用REST API进行资源操作,并阐述了REST API的优缺点。
部署运行你感兴趣的模型镜像

原创Blog,转载请注明出处
blog.youkuaiyun.com/hello_hwc


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


一 REST的概念

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

资源由URI(统一资源定位符)的来指定。
通过资源的表现形式来操作资源
对资源的操作包括获取、创建、修改和删除资源,对应HTTP协议提供的GET、POST、PUT 和DELETE方法
这里写图片描述
- 安全-指的是对原有资源没有任何影响
- 等幂-不管操作多少次对资源的影响都是一样的。

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


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


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


二 REST的要求

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

三 基于HTTP的REST简介

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

1 资源的URI
2 资源的传输格式
3 对资源的操作(GET、POST、PUT,DELETE,OptionsHead方法)

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

其中

  • VERB是HTTP的方法,例如GET POST DELETE等
  • URI指定资源的位置
  • HTTP Version,HTTP的版本
  • Request Header。header包含了metaData,也就是上面说的额外信息。
  • Request Body,实际传递的消息。

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

GET www.baidu.com
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Connection:keep-alive
Content-Type:text/plain; charset=utf-8
Cookie:BDUSS=1hCVG9GN29OSkkwdld-MEh3enJBLUVnZGxKRTB5NTBCQW5BamRobTB4SGtzTWxVQVFBQUFBJCQAAAAAAAAAAAEAAADZ4YEvx6PE47XEX1pVT8rWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQjolTkI6JUT; BAIDUID=8BD0E853CDCBAD524D6691E5AE0C61BB:FG=1; BAIDUPSID=8BD0E853CDCBAD524D6691E5AE0C61BB; locale=zh; MCITY=-289%3A; B64_BOT=1; BD_HOME=1; BD_UPN=123253; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_645EC=a1bfJPwk9lOpMwLUJPTu1EGEjyg7U%2B0iMwXeWzgjyMiK62RLlrkuWmGwFvFTes98m0qN; BD_CK_SAM=1; BDSVRTM=84; H_PS_PSSID=12760_12528_1443_12772_12691_12717_12721_12728_12735_12739_12743_12763_12781_8498_11422
Host:www.baidu.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 

上述除了GET www.baidu.com之外都是headers。具体的header字段含义可以参考wiki
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

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

  • HTTP Version HTTP的版本
  • Response Code 表示请求的状态。例如404Not found不少人遇到过吧
  • Response Header表示返回信息的头信息
  • Response Body 包含实际数据

例如,上述对www.baidu.com的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。
网站地址
http://openweathermap.org/current

然后,用这个工具来测试GET方法
GET http://api.openweathermap.org/data/2.5/weather?q=Shanghai,china

Status
200 OK Show explanation Loading time: 388


Request headers 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36
Content-Type: text/plain; charset=utf-8 
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: __utmt=1; __utma=124807636.1438772543.1425606715.1425869175.1425872408.7; __utmb=124807636.1.10.1425872408; __utmc=124807636; __utmz=124807636.1425777557.4.2.utmcsr=so.com|utmccn=(organic)|utmcmd=organic|utmctr=weather.com%20REST%20API


Response headers 
Server: nginx 
Date: Mon, 09 Mar 2015 03:46:05 GMT 
Content-Type: application/json; charset=utf-8 
Transfer-Encoding: chunked 
Connection: keep-alive
X-Source: redis
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-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的软件依赖性更小
可以利用缓存来提高性能


参考资料:
http://zh.wikipedia.org/zh-cn/REST
http://www.drdobbs.com/web-development/restful-web-services-a-tutorial/240169069?pgno=2

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

ArcGIS REST API是Esri公司提供的一种基于HTTP/HTTPS协议的Web API,用于访问和管理ArcGIS Server和ArcGIS Online等GIS服务和资源。ArcGIS REST API支持多种编程语言和平台,例如Java、Python、JavaScript、.NET、iOS和Android等。以下是ArcGIS REST API的一些主要特点和功能: 1. 支持多种HTTP操作:ArcGIS REST API支持多种HTTP操作,例如GET、POST、PUT和DELETE等,可以用于从GIS服务中获取或修改数据。 2. 支持多种数据格式:ArcGIS REST API支持多种数据格式,包括JSON、XML、HTML和二进制等,可以根据需要选择合适的数据格式。 3. 支持多种GIS服务和资源:ArcGIS REST API支持多种GIS服务和资源,例如地图服务、要素服务、空间分析服务、地理编码服务、地理处理服务、Web地图和Web应用程序等。 4. 支持数据查询和过滤:ArcGIS REST API支持对GIS服务中的数据进行查询和过滤,可以根据要求返回符合条件的数据。 5. 支持安全认证和授权:ArcGIS REST API支持多种安全认证和授权方式,例如基本认证、令牌认证和OAuth2.0认证等,可以保证GIS服务和资源的安全性和可靠性。 6. 支持跨域访问:ArcGIS REST API支持跨域访问,可以在不同的域名和网站之间进行数据交互和共享。 7. 支持自定义扩展:ArcGIS REST API支持自定义扩展,可以根据需要扩展和定制GIS服务和资源的功能和特性。 总之,ArcGIS REST API是Esri公司提供的一种基于HTTP/HTTPS协议的Web API,用于访问和管理ArcGIS Server和ArcGIS Online等GIS服务和资源,具有多种特点和功能,可以满足不同用户的需求和要求。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值