你了解真正的 restful API 吗?
本文原创地址,博客:https://jsbintask.cn/2019/03/20/api/restful-api-best-practices/(食用效果最佳),转载请注明出处!
前言
在以前,一个网站的完成总说“all in one”,页面,数据,渲染全部在服务段完成。这样做的最大的弊端就是后期维护,扩展极其痛苦,开发人员必须同时具备前后端只是,于是慢慢的后来兴起了 前后分离的思想
后端负责 数据编造,而前段时间只负责数据渲染,前段静态页面调用指定 api 获取到有固定格式的数据,在将数据展示出来,这样呈现给用户的就是一个“”董涛“的过程,而关于 api 这部分的设计则成了一个问题,如何设计一个便于理解,容易使用的 api 则成了一个问题,
而 所谓 restful 就是用来规范我们的 api 的一种约束。、
介绍
rest 就是 Representational State Transfer 三个单词的缩写,由 Roy Fielding 于2000 年论文中提出,它代表着分布式服务的架构风格,而如果想你的 api 被称为 restful api ,值要遵循其规定的约束即可。
rest 设计原理
1、客户端 - 服务端:通过将用户 UI 于数据存储分开,我们可以简化服务器组件来提高跨多个平台的用户界面的可移植性并提高可伸缩性,它可以比表现成前后分离的思想。
2、无状态:从客户端到服务器端的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上任何的上下文,这表示你应该可能的避免使用 seeeion,由客户端自己标识回话状态。(token)
3、规范接口:rest接口约束定义,资源识别,请求动作,响应信息,它表示通过 uri 标出你要操作的 资源 ,通过请求 (http method)标识执行的操作,通过返回的状态码来表示这次请求的执行结果,
4、可缓存:缓存要求将对请求的响应中的数据隐式或显示标记为可缓存或不可缓存,如果响应是可缓存,则客户缓存有权重用该响应数据以用于以后的等效请求,它表示 get 请求响应头中该表示有是否可缓存的头(Cache- Control)
uri 规范
资源的描述构成了 uri,它一般有以下约束:
1、使用名词:
如: user、student、class
http://api.example.com/class-management/students
http://api.example.com/device-management/managed-devices/(device - id)
http://api.exanple.com/user-management/users
http://api.example.com/user-management/users(id)
2、 http method 对应不同的请求动作(数据库或者业务逻辑)
GET:查询操作:
HTTP GET /device?startindex=0&size=20
无状态
是restful api 无状态有一些非常显著的有点;
1、无状态通过将 API 部署到各个服务器。有助于将 API 扩展到数百万并发用户,任何服务器都可以处理任何请求,因为没有与会话相关的依赖(集群)
2、无状态使得 RESTful API 不那么复杂,可以删除所有服务器端状态同步逻辑,(删除session,清理多余空间)
3、无状态 API 很容易缓存,特定软件可以通过查看该一个请求是都缓存 HTTP 请求的结果,从先前请求中获得状态的肯能会影响这个请求的可缓存性,这并不存在任何不确定性,它提高了应用程序的性能。
4、服务器永远不会忘记每个客户的身份,因为客户端会在每个请求中发送所有必要的信息。(携带 token)
那么无状态又要怎么实现呢?前面我们已经说过了,服务端不应爱保存session会话,这个工作全部交由 http 请求标识,而最常见的做法则是 使用 token。生成 token 可以考虑使用 jwt,oauth。
你了解真正的 restful API 吗?的更多相关文章
- (转载) RESTful API 设计指南
作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...
- Node.js实现RESTful api,express or koa?
文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...
- Restful Api 最佳实践
Web APIs has become an very important topic in the last year. We at M-Way Solutions are working ever ...
- 基于轻量型Web服务器Raspkate的RESTful API的实现
在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...
- RESTful Api 身份认证安全性设计
REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...
- 深入理解 RESTful Api 架构
转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api 就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...
- 使用Flask设计带认证token的RESTful API接口[翻译]
上一篇文章, 使用python的Flask实现一个RESTful API服务器端 简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问 ...
- RESTful API 设计指南
转自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机. ...
- RESTful API URI 设计的一些总结
非常赞的四篇文章: Resource Naming Best Practices for Designing a Pragmatic RESTful API 撰写合格的 REST API JSON 风 ...
- Restful API
http://www.ruanyifeng.com/blog/2011/09/restful 参考资料:-------以网络为基础的应用软件的架构设计. Restful API的设计与实践 字数218 ...
随机推荐
- 普通平衡树 lg3369
在多次学习splay后,我终于理解并码出了整份代码 参考了https://tiger0132.blog.luogu.org/slay-notes的博客 具体实现原理在上面这篇博客和百度中可以查到,接下 ...
- OERR: ORA-32004 "obsolete or deprecated parameter(s) specified for %s instance"
Oracle 11gR2通过Memory创建动态参数文件后,通过SPFILE启动,提示 ORA-32004: obsolete or deprecated parameter(s) specified ...
- 关于jquery绑定事件执行两次
经常会出现jquery绑定事件执行两次的情况,如: $("a[tag=slide]").click(function () { alert(1); $(this).parent() ...
- 如何转proto
找到对应协议在对应proto中的片段(片段的子也要提取),提出来 放到适合proto文件中(逻辑 || 功能近似协议聚集地) 转换成proto.js 替换 || 增加原有js内容
- SpringMVC-时间类型转换
在上一篇SpringMVC的提交表单中,我们使用的日期为String型,可以将日期转换为Date型,然后使用initBinder函数进行显示,具体代码如下: (1)首先更改User.java的birt ...
- 大白话Web三大组件之一Servlet
很多学习到Servlet这里的童鞋,听到那么多专业名词解释这个Servlet,相信都是很蒙圈的,在这里我先不跟大家扯Servlet的大概念,先跟大家探讨一下关于Servlet的作用 相信MVC这个概念 ...
- git上传时出现ERROR: Repository not found.的解决办法
今天在上传时出现错误,原因是之前更改了gitee上的个人空间地址,导致找不到.需要重新配置 https://gitee.com/help/articles/4114#article-header0
- DataTable、DataRow、DataColumn用法
转载csdner 发布于2018-08-17 17:03:30 阅读数 4375 收藏 DataSet 表示数据在内存中的缓存. 属性 Tables 获取包含在 DataSet 中的表的集合. ...
- Bugku-CTF之本地包含( 60)
Day36
- Python(一):一行解法参考
#一行快速排序quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in arra ...