本文原创地址,博客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 吗?的更多相关文章

  1. (转载) RESTful API 设计指南

    作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...

  2. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  3. Restful Api 最佳实践

    Web APIs has become an very important topic in the last year. We at M-Way Solutions are working ever ...

  4. 基于轻量型Web服务器Raspkate的RESTful API的实现

    在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...

  5. RESTful Api 身份认证安全性设计

    REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...

  6. 深入理解 RESTful Api 架构

    转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api  就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...

  7. 使用Flask设计带认证token的RESTful API接口[翻译]

    上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问 ...

  8. RESTful API 设计指南

    转自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机. ...

  9. RESTful API URI 设计的一些总结

    非常赞的四篇文章: Resource Naming Best Practices for Designing a Pragmatic RESTful API 撰写合格的 REST API JSON 风 ...

  10. Restful API

    http://www.ruanyifeng.com/blog/2011/09/restful 参考资料:-------以网络为基础的应用软件的架构设计. Restful API的设计与实践 字数218 ...

随机推荐

  1. 7.Springboot之web开发

    自用 要解决的问题: 1.导入静态资源(html之类的(webapp)) 2.首页 3.没有写Jsp的地方-------->所以要学模板引擎Thymeleaf 4.装配扩展springmvc 5 ...

  2. two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想

    two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想, 如果能用这种思想解决问题,那么会大大降低程序的复杂度. 两个利用这个思想的例 ...

  3. 页面回显与URL模板映射

    一.页面回显 对于需要返回界面的数据,可以将后台封装好的数据回显至原始jsp界面中. 举个例子: User.java package com.zk.data; public class User { ...

  4. mysql数据库-笔记

    基本概念篇 SQL语言的分类(DDL.DML.DCL.DQL) 对应的英文全程:data (definition.manipulation.control.query)language 参考资料: h ...

  5. python3练习100题——008

    今天第二道,做了明天就可以休息一下- 原题链接:http://www.runoob.com/python/python-exercise-example8.html 题目:输出 9*9 乘法口诀表. ...

  6. Reverse is Multiplex, You Need PinTools.

    Read this slide: pin_in_CTF.pdf And this link: pin_in_CTF

  7. vue全局组件与局部组件

    <!DOCTYPE html> <html> <head> <title></title> </head> <script ...

  8. JS高级---bind方法的使用

    bind方法的使用 //通过对象,调用方法,产生随机数 function ShowRandom() { //1-10的随机数 this.number = parseInt(Math.random() ...

  9. STL 萃取(Traits)机制剖析

    模板特化 在将萃取机制之前,先要说明模板特化 当有两个模板类,一个是通用泛型模板,一个是特殊类型模板,如果创建一个特殊类型的对象,会优先调用特殊的类型模板类,例如: template <type ...

  10. socket 异步I/O

    # 客服端 # -*- coding: utf-8 -*- import socket import threading # from collections import deque # q = d ...