RESTful API学习

RESTful是目前最流行的API设计规范,用于web数据接口的设计。REST(Representational State Transfer,表示层状态转移),看了翻译还是懵逼。

表示层用来表示什么东西?

其实这个表述的主体是网络中的资源。它通常用URI(Uniform Resource Identifier)标识,如果缺少这个标识,网络中其他人就找不到,也就称不上资源了。这个体现在HTTP请求头信息中,用Request URL字段指定。

表示层又是什么东东?

既然表示的主体是网络中的"资源",那么表现层就是用来呈现资源的形式。比如网络中的一个文本资源,它可以用txt格式表现,也可以用html格式,xml格式等等。
那上面说用URI标识资源,那么为什么还用表示层呢?原因在于URI代表的是一个真实的实体,没能表现它的形式。
表示层体现在HTTP请求的头信息中,用AcceptContent-Type字段指定。其中客户端通过Accept来请求一种特定格式的表现,服务端通过Content-Type告诉客户端资源的表现形式。

这个状态转移又是什么情况?

网上有好多种说法,各有各的道理。我认为"资源表示层的状态转移",可以从两方面来理解:一是转移作为动词;二是作为名词。作为动词,即指资源转移的某种形式,例如采用什么样的方式来转移资源,这个体现在HTTP请求头信息中,用Request Method字段指定;作为名词,即指资源的一种转移状态,例如:301表示资源已经被永久转移到其他URL。这个体现在HTTP请求的响应头中,用Status Code字段表示。

设计注意规范

将上面三部分内容结合起来,我们就可以得出RESTful API的一些基本设计规范:
1.既然用URI表示一个资源实体,那么它就应该是个名词,所以URI中不应该有动词。例如获取文本资源。

https://blog.csdn.net/benben_2015/article      正确的
https://blog.csdn.net/benben_2015/getArticle   错误的

错误的URI中含有get动词,如果想表示这个get动作,可以在HTTP请求的Request Method中指定。

https://blog.csdn.net/benben_2015/article        正确的
https://blog.csdn.net/benben_2015/v1/article   错误的

这个错误的原因在于在URI中加入了版本号v1,版本号并不是用来表示资源的,所以URI中不需要。如果想表示版本号,可以在HTTP请求头信息的Accept字段中进行区分,例如:

Accept:vnd.example-com.foo+json; version=1.0

2.由于资源的分类,所以有可能会出现多级URI。这样是不利于URI的扩展的,语义也不明确。这个我们可以通过查询字符串表示。

https://blog.csdn.net/benben_2015/article/categories/2  不推荐
https://blog.csdn.net/benben_2015/article?categories=2  推荐

3.状态码必须精确,比如301表示永久重定向,302表示暂时重定向。如果你在应该使用301的时候使用了302,那么你每次请求,内容都不会被缓存或保存。

参考文章

  1. RESTful API最佳实践
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值