zoukankan      html  css  js  c++  java
  • 你了解真正的 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。

  • 相关阅读:
    我的期末可以加分项
    冲刺
    公司授课管理系统
    挑战赛题终于完成
    Java web 学习
    Java web 学习
    Javaweb 学习
    Base64加密
    选课系统
    Educational Codeforces Round 62题解
  • 原文地址:https://www.cnblogs.com/jcjc/p/11832901.html
Copyright © 2011-2022 走看看