微信号:we21cto

介绍:21CTO(21CTO.com)是中国项级技术专家的学习与服务平台.我们为CTO、技术总监、架构师等技术专家提供高质量的资讯、问答、活动等产品,同时与企业连接,提供技术咨询、研发、运维、技术支持、培训及人才招聘等服...

深度理解HTTP与RESTFull API

2016-12-20 23:56 杜江


前文我们一起讨论了开发Web API的教程,在后台收到了一些朋友的回复,有关于一些内容的指正,比如OpenAPI,以及对Thirft的看法。

 

我只所以称“Web API”,是因为我们返回的内容都是在HTTP的Body上反映的错误信息,一些错误处理是Web服务器返回给调用者,而非API本身。鉴于实用主义,亦不用吹毛求疵,通过Body中的JSON或XML返回也没有任何问题,很多技术团队都这么做,也没有什么不好,只是并不是完全的RESTFUL,而是叫Web API或JSON API。

 

关于HTTP


HTTP协议,在服务器与客户机建立连接后,规定了报文源流入与流出的规则,定义了报文头、首部、BODY,以及对服务器资源的请求方法 ,即GET/POST/PUT/DELETE/HEAD/TRACE/OPTIONS等,这7种武器并非所有服务器都实现了,常见的是前4种。HTTP的高扩展性,还允许我们实现其它的请求方法。

 

HTTP中的GET/POST/PUT/DELETE分别对应资源的查 ,改 ,增 ,删这4个操作。

 

根据HTTP规范,GET用于信息获取,PUB为更新信息,按规定应该是安全和幂等。  

安全的意味着该操作用于获取信息而非修改。比如说GET,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。  

.幂等是对同一URL的多个请求应返回同样的结果。比如请求最新的新闻,不同的时间返回的数据不同的,但我们可以视为幂等。  

 

对资源的增删改查操作,其实都可以通过GET与POST方法来完成,不需要用到PUT和DELETE。 很多开发者为了图方便,更新资源时用了GET,因为用POST必须要到表单,在测试时稍麻烦一些。  

 

还有一个重要原因,一些Web MVC框架设计者们并未将URL当作抽象的资源来看待和设计,比如Servlet,Contoller等 。有的框架可能只支持GET和POST两种方法,开发人员基本就这样用了。  

 

随着架构的发展,现在出现REST(Representational State Transfer),一套支持HTTP规范的新风格。

 

综合而言,JSON API已经完成了大部分RESTFUL的工作,只不过像大多数开发者一样,我们使用GET和POST方法来完成了增删改查,而没有用到PUT和DELETE,另外返回的状态并非API返回的HTTP状态码,要么是JSON格式的状态,要么是Web服务器根据程序的严密度返回的状态码。

 

 

关于RESTFUL

 

RESTFUL是Representational State Transfer表述性状态转移的缩写,是Roy Fielding先生于2000年定义的,用来描述分布式系统架构的统一通信接口。它并不是一个严格规范存在。关于RESTFUL的几个定义,如下列表:

 

  • 提供容易理解的目录结构URL

  • 表现形式为JSON或XML来表示数据对象和属性

  • 返回消息使用明确的HTTP方法实现(GET,POST,PUT,DELETE)

  • 无状态交互存储,客户端与服务器之间请求

  • 状态依赖并限制可扩展

  • 客户端保持会话

  

小结


在本篇中,我试图用“较科学”的态度,描述RESTFUL,考虑的并非全面,如有不周,还请各位留言,共同探讨。


下篇我们以高度实践的方式描述与实现一个可运行的RESTFUL API。谢谢大家观赏。


作者:杜江。21CTO(21cto.com)社区创始人。多年架构与管理经验。 著有《PHP5与MySQL5 Web开发技术详解》、《PHP5完全攻略》、《PHP与MySQL高性能应用开发》(机械工业出版社出版,各大电商平台和书店有售)。


 
21CTO 更多文章 Web API设计之最佳实践 php-fpm解读-进程管理的三种模式 技术负责人如何做Headcount预算? 四象限管理法——时间管理 PHP7扩展开发之数组处理
猜您喜欢 一则跟屈原有关的小笑话 【第596期】npm scripts 数学突破奖:告诉你一个真实的数学研究 对不起,我拒绝BAT的offer! Druid 单机环境