Rest/RestFul的理解(一家之见)

--------------------------------------------------如果你不学习,那么你的知识每18个月贬值一半,这就是软件行业的摩尔定律。

Rest:是一种基于HTTP协议之上的一种API设计的风格不是规范(是一组没有严格标准的架构约束条件和设计原则),使得懂得HTTP协议的开发者,尽可能不需要过多的交流达到“理解”接口的目的。

理解概念:

资源

        网络上的所有事物都可以被抽象为资源(resource)

        每一个资源都有唯一的资源标识(URI),对资源的操作不会改变这些标识

                   在Server端中的应用程序状态和功能都可以抽象为一种资源,如:应用程序对象、数据库记录、算法等,这些资源以URI(Universal Resource Identifier)的方式向Client公开。每一个资源映射到一个URIURI作为资源的唯一标识。

URI: 标识(URI:一类资源)

URL: 统一资源定位符(URL:URI+LOACATE)

URIURL的关系URL是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何Find这个资源

态转: URI的命名要使用名词,那我们要如何来表示一个操作动作呢?就是依靠HTTP方法,也叫HTTP动词。也就是通过这种动名词的组合来表示一次操作,在REST中会被叫做状态转移

某个API: API:(URI+URL+URI操作类型+API返回状态+API参数+API返回值)

设计一个API需要考虑的因素:

URI、URL、URI操作类型、API参数、API返回状态、API返回值。

为达到目的需要考虑API满足因素:

自解释性、无状态、是否简单。

1、自解释性

A、针对URI操作类型:将HTTP中的方法CRUD和接口方法CRUD对应起来。因为所有复杂的业务无非就是CRUD组合而成。

POST:新增资源

DELETE:删除资源

PUT:修改资源

GET:获取资源

严格遵守存在的问题:复杂需求中国GET参数过长时不满足,如批量删除,批量查询。

B、针对API返回状态:将HTTP中的状态码和HTTP协议中的状态码对应起来。

2xx:请求正常处理并返回。

3xx: 重定向,请求资源位置发生了变化。

4xx: 客户端发送的请求有误。

5xx: 服务器端错误。

C、针对URI

             见名知意

只能使用名词,推荐使用复数(无状)。

统一使用小写字母。

不要包含文件(脚本)的扩展名。

URI中尽量使用连字符"-"代替下划线"_"的使用。

"_"一般用于对一个整体含义的字符串做了层级的分割。

REST API URI的七大设计原则

规则1URI结尾不应包含(/

规则2:正斜杠分隔符(/)必须用来指示层级关系

规则3:应使用连字符( - )来提高URI的可读性

规则4:不得在URI中使用下划线(_

规则5URI路径中首选小写字母

规则6:文件扩展名不应包含在URI

规则7:所用的名词往往与数据库的表格名对应

D、针对URL

     尽可能采用HTTPS协议。

2、是否简单

A、针对返回值类型

     采用JSON格式的返回值

 

3、无状态

A、针对API请求参数

        每一个API请求参数必须包含服务器端理解请求的全部参数。

        例如:在写API认证的时候将sessionid返回给前端,之后每次带上sessionid的模式是unrestfull模式,因为只要服务器端保存了状态。

详解:有状和无状求本身没有多大关,重要的是状信息是由求方是响负责保存。在Session ID可以被认为是一个用来标识某一会Key,将其传递给器端意味着这样一个求:帮我取出个状信息,也就是说这求假方保有着状信息。由于与某一特定求相关的状属于用状,而RESTful架构要求任何此求方负责提供,所以传递Session ID认为unRESTful的做法。反来,user credential一种用状,是被期望由求方提供的,所以在求中传递user credentials(姑且忽略安全性问题)是符合RESTful架构范的

应该这么做呢(本质不依赖某一系统或者缓存,状态)?

可以在登陆之后利用登录名和密码生成相应的token,将token返回给前端,每次请求时将token发送给后端,后端进行解析得到用户名和密码,进行相应的认证,也可以在生成token之后将其存储于缓存中,请求过来后直接读取token,匹配token,如果token匹配不成功则可以进行解析得到用户名和密码,查询持久化数据库进行认证。

        安全性、幂等性

https://blog.csdn.net/u013731455/article/details/56278168

 

设计经验

GET /users - 获取用户列表

GET /users/1 - 获取 Id 1 的用户

POST /users - 创建一个用户

PUT /users/1 - 替换 Id 1 的用户

PATCH /users/1 - 修改 Id 1 的用户

DELETE /users/1 - 删除 Id 1 的用户

GET /users/1/products - 获取 Id 1 用户下的产品列表

GET /users/1/products/2 - 获取 Id 1 用户下 Id 2 的产品

POST /users/1/products - Id 1 用户下,创建一个产品

PUT /users/1/products/2 - Id 1 用户下,替换 Id 2 的产品

PATCH /users/1/products/2 - 修改 Id 1 的用户下 Id 2 的产品

DELETE /users/1/products/2 - 删除 Id 1 的用户下 Id 2 的产品

"current_user_repositories_url": https://api.github.com/user/repos{?type,page,per_page,sort} -获取某一用户下,分页查询的网摘列表

充满Rest风格的架构称为RestFul架构的项目

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值