RESTful接口

作为一个后端服务端开发者,经常会听到你会开发restful接口吗,可能我开发过?可能我又没有?但其实主要是因为我没有彻底搞懂restful风格接口,今天下午必须整明白!

REST架构

rest提出了一组架构约束条件和规则:统一接口、统一分层、按需代码。所有满足条件和规则的架构都称为RESTful架构。

统一接口:rest架构把网络中所有的可以访问和操作的数据、信息等都看作是资源。定义了对资源操作的统一方法和链接入口。

统一分层:系统分层,各层次间有良好的独立性。

按需代码:按需在客户端的应用程序上进行功能扩展。

REST接口设计规范

互联网越发展,大家对web应用需要更多。从以前的传动页面到前后端分离,到小程序、安卓、IOS等很多客户端类出现,客户端和服务端的通信,是希望有一个统一的接口规范让大家都能接受。

资源 

以资源为基础:可以是二进制文件、也可以是一张图片、一个vedio等实体,通常以JSON或xml格式为载体,从数据库中获取。用URL定位资源。该资源存放形式对外不公开,外面只能获取资源。

统一接口:对资源做增删改查的操作,对应http协议的get、post、put、delete方法。如果使用restful风格的接口操作资源,从接口上看可能只能资源url,而不能表露出对资源做的操作。想知道具体对资源做了什么操作,还是需要看http请求方法类型,常见的方法类型:

GET:从服务器上获取资源

POST:在服务器上创建资源

PUT:在服务器更新资源(客户端需要提交完整的数据)

PATCH:更新资源(客户端只需要提交修改的资源数据)

DELETE:从服务器删除资源

以下是合格的RESTful风格接口

POST   http://www.demo.com/koukou
GET    http://www.demo.com/koukou
PUT    http://www.demo.com/koukou
DELETE http://www.demo.com/koukou

下面是不符合RESTful规范的接口写法

POST   http://www.demo.com/create_koukou
GET    http://www.demo.com/query_koukou
PUT    http://www.demo.com/update_koukou
DELETE http://www.demo.com/del_koukou

url设计规范:我们用url去定位资源,一个完整的URL组成由以下几个部分构成:

URI = scheme "://" host  ":"  port "/" path [ "?" query ][ "#" fragment ]

scheme:协议名

host:服务器的IP或域名

port:端口,http默认是80

path:资源路径

query:可选。一些查询参数,比如排序、数据分页等参数

fragment:可选。锚点,定位到页面的资源

无状态

RESTful接口要求是无状态的。任意一个web请求都必须和其他请求隔离开,如果客户端发起请求,消息本身就包含了服务端处理该请求所需的全部上下文,服务器不能保存客户端的信息。

符合RESTful规范的接口,服务端相应信息是包含状态码的,这些状态码是通用的,不用额外定义,下面是常见的http状态码:

1xx-相关信息,服务器正在处理
2xx-请求成功
3xx-资源重定向
4xx-客户端错误
5xx-服务器错误

 

为什么要无状态???

为了保证高可用,多个微服务通过负载均衡实现集群化部署,每个服务器之间都是独立和平等的,如果一个服务器在收到客户端请求的时候宕机或者不可用,其他服务器可以迅速处理这个无状态请求。如果请求是带状态的,那么每个请求都需要到指定服务器去处理,这就没意义了。

无状态只是说服务端无状态,但整个会话还是要状态维持的。一般客户端会和服务端进行多次通信才能完成一个完整的业务,但我们知道http协议是无状态协议,这就要求服务端可以识别几个独立的http请求的状态信息,把这些状态信息关联到业务流程中。比如服务端在不同时间点收到一个登录请求和取钱请求,如果不在技术层面对这些独立的http请求做关联的话,服务器就不知道这俩请求是【取钱业务】的一部分了。

普通的API和RESTful风格的API区别是什么呢?

从流程上来看:

                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值