restful api接口设计

技术由来:

互联网早期,页面请求和并发量不高,且移动端未盛行时对接口要求不高,使用动态页面(jsp)就能满足绝大多数的使用需求。但是随着互联网和移动设备的发展,人们对Web应用的使用需求也增加,传统的动态页面由于低效率而渐渐被HTML+JavaScript(Ajax)的前后端分离所取代,并且安卓、IOS、小程序等形式客户端层出不穷,客户端的种类出现多元化,而客户端和服务端就需要接口进行通信,但接口的规范性就又成了一个问题:

所以一套结构清晰、符合标准、易于理解、扩展方便让大部分人都能够理解接受的接口风格就显得越来越重要,而RESTful风格的接口(RESTful API)刚好有以上特点,就逐渐被实践应用而变得流行起来。

使用resetful设计的接口特点:看Url就知道要什么资源数据,看http method就知道进行什么操作!

所以RESTful API就是一套接口设计风格,用来规范多种形式的前端和同一个后台的交互方式

 

使用场景:

前后端分离。前端拿到数据只负责展示和渲染,不对数据做任何处理。后端处理数据并以JSON格式传输出去,定义这样一套统一的接口,在web,ios,android三端都可以用相同的接口,节约开发成本以及便于同一调试。

 

 

区分REST和RESTful :

REST是几个单词缩写 -- REpresentational State Transfer 直接翻译:表现层状态转移。字面理解太复杂了,先简单理解为:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

REST描述的是在网络中client和server的一种交互形式;REST并没有一个明确的标准,而更像是一种设计的风格,满足这种设计风格的程序或接口我们称之为RESTful(从单词字面来看就是一个形容词)。所以RESTful API 就是满足REST架构特征的接口。

 

 

 

REST架构特征和设计规范:

 

  • URI指向资源:使用URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。URI包括URL和URN,在这里更多时候可能代指URL(统一资源定位符)。RESTful是面向资源的,每种资源可能由一个或多个URI对应,但一个URI只指向一种资源。注意:使用名词的复数表示一个资源集合,如api.domain.com/users;使用斜线“/”用来表示资源之间的层次关系,如api.domain.com/users/1234/orders;URI 中应尽量使用小写字母,不实用下划线;URL末尾不应包含斜线“/”;

 

  • 统一接口: 通过一定原则设计接口降低耦合,简化系统架构,这是RESTful设计的基本出发点。对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。换言而知,使用RESTful风格的接口但从接口上你可能只能定位其资源,但是无法知晓它具体进行了什么操作,需要具体了解其发生了什么操作动作要从其HTTP请求方法类型上进行判断。具体的HTTP方法和方法含义如下图1,这样就统一了数据操作的接口。

        非RESTful风格的API中,我们通常使用GET请求和POST请求完成增删改查以及其他操作,查询和删除一般使用GET方式请求,更新和插入一般使用POST请求。从请求方式上无法知道API具体是干嘛的,所有在URL上都会有操作的动词来表示API进行的动         作,例如:query,add,update,delete等等。而RESTful风格的API则要求在URL上都以名词(推荐用复数)的方式出现,从几种请求方式上就可以看出想要进行的操作,这点与非RESTful风格的API形成鲜明对比。在谈及GET,POST,PUT,DELETE的时候,就必须提一下接口的安全性和幂等性,其中安全性是指方法不会修改资源状态,即读的为安全的,写的操作为非安全的。而幂等性的意思是操作一次和操作多次的最终效果相同,客户端重复调用也只返回同一个结果。

       

       上述四个HTTP请求方法的安全性和幂等性如下:

      

 

      举例子:说了这么多,到底RESTful长什么样子的呢?

  •   GET:http://www.xxx.com/source/id 获取指定ID的某一类资源。
  •   例如GET:http://www.xxx.com/friends/123表示获取ID为123的会员的好友列表。如果不加id就表示获取所有会员的好友列表。
  •   POST:http://www.xxx.com/friends/123表示为指定ID为123的会员新增好友。其他的操作类似就不举例了。

     如果一个操作无法对应到资源的某个操作上,此时可以适当地在URI中包含动词,但依然应该基于一个资源的标识符。例如:DELETE /users/1234/set-admin

 

  • 无状态。服务器不能保存客户端的信息, 每一次从客户端发送的请求中,要包含所有必须的状态信息,会话信息由客户端保存, 服务器端根据这些状态信息来处理请求。 当客户端可以切换到一个新状态的时候发送请求信息, 当一个或者多个请求被发送之后, 客户端就处于一个状态变迁过程中。 每一个应用的状态描述可以被客户端用来初始化下一次的状态变迁。

 

  • 状态码和返回数据

       服务端处理完成后客户端也可能不知道具体成功了还是失败了,服务器响应时,包含状态码返回数据两个部分。

      

       

 

{  //响应格式status:0,data:{}||[],msg:’’
}

   

  • 过滤信息:可以使用过滤信息进行筛选、搜索或分页查询等

       

 

  • 可缓存性(Cacheability) :服务端需回复是否可以缓存以让客户端甄别是否缓存提高效率。
  • 版本号:可以将API的版本号放入URL。GET:http://www.xxx.com/v1/friend/123。或者将版本号放在HTTP头信息中。

 

 

总结:

RESTful风格的API 固然很好很规范,但大多数互联网公司并没有按照或者完全按照其规则来设计,因为REST是一种风格,而不是一种约束或规则,过于理想的RESTful API 会付出太多的成本。

比如RESTful API也有一些缺点

  • 比如操作方式繁琐,RESTful API通常根据GET、POST、PUT、DELETE 来区分操作资源的动作,而HTTP Method 本身不可直接见,是隐藏的,而如果将动作放到URL的path上反而清晰可见,更利于团队的理解和交流。
  • 并且有些浏览器对GET,POST之外的请求支持不太友好,还需要特殊额外的处理。
  • 过分强调资源,而实际业务API可能有各种需求比较复杂,单单使用资源的增删改查可能并不能有效满足使用需求,强行使用RESTful风格API只会增加开发难度和成本。

所以,当你或你们的技术团队在设计API的时候,如果使用场景和REST风格很匹配,那么你们可以采用RESTful 风格API。但是如果业务需求和RESTful风格API不太匹配或者很麻烦,那也可以不用RESTful风格API或者可以借鉴一下,毕竟无论那种风格的API都是为了方便团队开发、协商以及管理,不能墨守成规。

 

参考学习文章:

https://www.toutiao.com/i6693727878158221836/

https://www.toutiao.com/a6902604637149692428/

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7压缩文件夹怎么压缩到最小

在我们日常使用win7系统的过程中,压缩文件作为经常使用的东西相信很多小伙伴都对它不陌生,由于其占用空间小,所以网站下载的文件大多都是压缩包格式。很多时候我们和朋友分享文件也以压缩包的形式传输。接下来小编就手把手来教大家win7系统中…

vue-cli安装和使用

主要记录安装vue-cli制定版本和使用,注意vue-cli4创建项目命令和项目结构的改变 检查当前项目的vue-cli版本: vue -V 卸载当前版本: npm uninstall vue-cli -g 安装最新版本: npm install -g vue-cli 安装指定版本: npm in…

Win7局域网内找不到其他电脑怎么解决

最近有用户反映说自己新装的win7纯净版系统中,IP之类的设置没问题,上网也没有问题,但是在访问局域网中的其他电脑时,找不到局域网内其他电脑,其他电脑也看不到我的电脑,Win7局域网内找不到其他电脑怎么解决…

Apache 和 Tomcat 服务器的区别

Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML、PHP、JSP、Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置。 Apache是web服务器(静态解析,如HTML)&…

360安全浏览器截图快捷键怎么设置 360安全浏览器截图快捷键设置教程

凭借在安全防护方面的特殊优势,360安全浏览器获得了不少PC用户的青睐,甚至还有人认为其是装机必备的软件之一。此外,360安全浏览器中还内置了不少实用的功能,例如:截图、翻译、网银等!当然,用户…

二进制、八进制、十六进制相互转换

一、十进制与二进制之间的转换 1、十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 (具体用法如下图) 2、二…

Chrome浏览器插件Tab Groups Extension使用方法

谷歌浏览器最近新增加了标签分组功能,新的插件名称叫做Tab Groups Extension。Tab Groups Extension的主要功能是将网页标签分组进一步优化,使得用户能够自由地定义标签分组的规则。很多用户都是第一次接触到这个新插件,下面一起来看看吧。 …

vue-cli3+与vue-cli2的区别和vue-cli 修改配置

vue-cli3是基于webpack4打造,vue-cli2是基于webpack3vue-cli3的设计原则是“0配置”,移除(隐藏)配置文件build和config等目录vue-cli3提供了vue ui 命令,提供了可视化配置vue-cli3移除了static文件夹,新增了…

windows7更改开始菜单外观的方法

很多朋友希望将自己的win7系统外观设置地比默认外观更好看更有个性,但是却不知道windows7如何更改开始菜单外观,其实菜单外观和主题是绑定的,我们可以通过更改主题的方式更改开始菜单外观,下面就一起来看一下windows7更改开始菜单…

js判断url链接是否可访问(服务可连接,可用)

electron 项目中通过loadURL() 方法加载用户输入的url服务,但是electron不管该url服务是否可用都会加载执行,所以需要在用户输入url后对该url进行可用性判断,记录一下解决方案: 解决方案一: XMLHTTP方案 function getURL(url) {fu…

windows7系统电脑管理员权限的更改方法

我们在使用win7系统的时候,有时候会发现自己的账户因为没有管理员权限从而无法更改某些设置或者打开一些文件,非常不方便,因此我们可以通过下面的方法让自己获得管理员权限,下面就一起来看一下windows7电脑管理员权限更改教程吧。…

electron打包vue-cli4项目的解决方案1(项目实测)

背景: 项目已通过vue-cli4框架开发并运行在nginx服务器上(使用了nginx的反向代理),现需要将该项目转成桌面端应用程序,选择electron来实现。 设想2种解决方案: 1、使用electron-quick-start的loadURL方法…

IP 基础知识“全家桶”,45 张图一套带走!

转载自: https://mp.weixin.qq.com/s/kPjFeefB1Xsbc2bHz_Or1Q 前言 前段时间,有读者希望我写一篇关于 IP 分类地址、子网划分等的文章,他反馈常常混淆,摸不着头脑。 那么,说来就来!而且要盘就盘全一点&am…

win7系统主板驱动在哪

win7系统主板驱动在哪?主板是一台计算机最重要的硬件设备之一,它不仅是所有硬件系统的核心,也是机箱中最大的电路板。今天小编就给大家带来了win7系统主板驱动位置信息介绍,一起来看看win7系统主板驱动在哪的吧。 win7系统主板驱动在哪 答…

win7进入主板bios设置的方法

win7怎么进入主板bios设置?主板是一台计算机最重要的硬件设备之一,它不仅是所有硬件系统的核心,也是机箱中最大的电路板。我们在使用win7系统时经常会围绕主板产生大大小小的问题,此时需要进行主楹bios设置,今天小编就给大家带来…

浅谈XSS攻击的那些事(附常用绕过姿势)

本文《浅谈XSS攻击的那些事(附常用绕过姿势)》 由一叶知安团队原创投稿安全脉搏首发,作者geek痕,安全脉搏独家首发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。随着互联网的不断发展&#x…

Win7系统防火墙设置方法

Win7防火墙在哪里设置?Win7防火墙无法启动怎么解决?防火墙是一种位于内部网络与外部网络之间的网络安全系统。我想大家都应该清楚防火墙的重要性。有些Win7用户不知道防火墙的具体位置,因此也不知道在哪里设置防火墙。下面小编为大家带来win7防火墙详细的解决方法…

了解与防御XSS攻击

一. XSS是什么 XSS攻击全称跨站脚本攻击(Cross Site Scripting),是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意…

win7窗口颜色没有透明的解决方法

win7的个性化中可以将窗口颜色设置为透明能够让我们的界面视觉效果更加美观舒适。但是有的朋友反映他的win7窗口颜色中没有透明,win7窗口颜色没有透明怎么开启?其实透明效果不是颜色,需要勾选透明选项框才可以开启,下面就一起来看一下win7窗…

BS架构和CS架构的优缺点

1、CS、BS架构定义 CS(Client/Server):客户端----服务器结构。C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示&a…