Restful定义,接口设计原则及优点

2023-11-13

1、什么是REST

      REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。

用一句话表示:URL定位资源,用HTTP动词(GET,POST,PUT,PATCH,DELETE)描述操作。

2、理解RESTFUL

2.1 资源

      资源就是网络上的一个实体,一段文本,一张图片或者一首歌曲。资源总是要通过一种载体来反应它的内容。文本可以用TXT,也可以用HTML或者XML、图片可以用JPG格式或者PNG格式,JSON是现在最常用的资源表现形式。

2.2 统一接口

      RESTful风格的数据元操CRUD(create,read,update,delete)分别对应HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口。

2.3 URI

       可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。一般的,每个资源至少有一个URI与之对应,最典型的URI就是URL。

2.4 无状态

      所谓无状态即所有的资源都可以URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而变化。有状态和无状态的区别,举个例子说明一下,例如要查询员工工资的步骤为第一步:登录系统。第二步:进入查询工资的页面。第三步:搜索该员工。第四步:点击姓名查看工资。这样的操作流程就是有状态的,查询工资的每一个步骤都依赖于前一个步骤,只要前置操作不成功,后续操作就无法执行。如果输入一个URL就可以得到指定员工的工资,则这种情况就是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个URL与之对应可以通过HTTP中的GET方法得到资源,这就是典型的RESTful风格。
 

3、restful设计原则

     RESTful API由后台也就是SERVER来提供前端来调用。前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端。也就是说RESTful 是典型的基于HTTP的协议。下面就讲讲RESTful架构设计原则和规范(不同公司具体细节可能不同):

  1. 在接口命名时应该用名词,不应该用动词,因为通过接口操作到是资源。
  2. 在url中加入版本号,利于版本迭代管理更加直观
    https://www.rgc.com/v1/

     

  3.  对于资源的操作类型应该是通过http动词表示。

    GET /zoos:列出所有动物园
    POST /zoos:新建一个动物园
    GET /zoos/ID:获取某个指定动物园的信息
    PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
    DELETE /zoos/ID:删除某个动物园
    GET /zoos/ID/animals:列出某个指定动物园的所有动物
    DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

     

  4.  

    排序规则:默认时升序,‘-’为降序;多个排序规则时以逗号间隔组合。使用sort查询参数限制

    GET /tickets?sort=-time,created_at 
    优先以time倒序显示,其次以created_at正序显示

     

  5. 限制返回值的字段域:明确指定输出字段列表,用于控制网络带宽和速度。使用fields查询参数来限制。

    GET /tickets?fileds=id,subject,customer_name,time&sort=-time
    返回参数列表为id,subject,customer_name,time,并且以time字段倒序显

     

  6. HTTP Method分别对于资源的CURD操作

    GET(SELECT):从服务器取出资源(一项或多项)。
    POST(CREATE):在服务器新建一个资源。
    PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
    PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
    DELETE(DELETE):从服务器删除资源。

     保证 POST,PUT,DELETE,PATCH,GET 操作幂等性

     

  7. 使用SSL(Secure Sockets Layer 安全套接层)
  8. 参数和url采用蛇行命名方式。如:updated_time
  9. 服务器请求和返回的数据格式,应该尽量使用JSON,避免使用XML。在 request中的Accept和Response中的Content-Type:application/json

总结:优秀的RESTful接口设计,能够根据请求的路径及请求方法就能看出这个接口主要是对具体某个资源进行什么方法的操作以及返回数据的规则等等。

 

参考资料:

http://blog.csdn.net/jielysong117/article/details/68948972

http://www.runoob.com/w3cnote/restful-architecture.html

https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_617days.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Restful定义,接口设计原则及优点 的相关文章

  • SpringMVC(07) -- RESTful

    SpringMVC学习笔记 源码地址 7 1 RESTful简介 REST Representational State Transfer 表现层资源状态转移 7 1 1 资源 资源是一种看待服务器的方式 即 将服务器看作是由很多离散的资源
  • httpUtil工具类

    简单httpUtil工具类发送post get请求 package com wt commons utils import com alibaba fastjson JSONObject import lombok extern slf4j
  • swagger接口需要权限验证解决方案

    目录 背景 解决方案 背景 当我们在使用s w a g g e r的情况下 经常会遇到需要授权或者请求带有token才可以访问接口 这里我们就是解决授权问题 解决方案 废话不多说 我们直接给出解决方案 具体代码如下 import org s
  • 公司规定所有接口都用POST请求

    前言 经研发部商议 后续接口都统一使用post请求了 不过这个主要也和我们的具体业务有关 所有接口的参数都做了加 解密 加 验签处理 包括查询 下面是公司架构分享的一篇文章 觉得挺有意思 转载一下 转载内容 小二刚去一家公司实习俩月 就收到
  • 前端知识点总结(一):从输入URL到页面展示的详细过程

    这里只是简单地概括一下大致流程 输入网址 DNS解析 建立tcp连接 客户端发送HTPP请求 服务器处理请求 服务器响应请求 浏览器展示HTML 浏览器发送请求获取其他在HTML中的资源 1 输入地址 当我们开始在浏览器中输入网址的时候 浏
  • FeignClient带文件多对象传参

    生产者 ApiOperation value 切块上传 notes 切块上传 PostMapping uploadChunk public Result uploadChunk HttpServletRequest request Chun
  • @FeignClient Get请求、实体参数,自动转POST请求问题

    问题 报错提示不支持POST请求 解决 使用SpringCloud2 1以上版本提供的 SpringQueryMap注解标注在实体对象参数后解决 导入注解包路径 import org springframework cloud openfe
  • Swagger

    第一节 Swagger 简介 1 企业开发所面临的问题 在前后端分离开发的情况下 前端开发人员经常抱怨后端开发人员给的接口文档与实际情况不一致 后端开发人员觉得编写接口文档太过于消耗精力 而且更新也不及时 以至于前后端开发人员经常出现争吵的
  • HTTP的请求方式有哪些?

    一 GET方法 最常用的方法 它是发送一个请求来获取服务器上的资源 资源通过HTTP响应头和数据 如html文档 图片 样式 视频等 返回给客户端 如浏览器 二 POST方法 常用方法 用于向服务器提交数据 请求的参数要在请求体 body
  • Swagger 3.0 使用指南

    Swagger 3 0 使用指南 Swagger 官网地址 https swagger io 1 Swagger 是什么 API Developmentfor Everyone Simplify API development for us
  • 【Spring Boot】详解restful api

    目录 1 restful api 1 1 历史 1 2 内容 1 3 传参 2 Spring Boot中的Restful Api 1 restful api 1 1 历史 RESTful API Representational State
  • 自定义实现OAuth2.0 授权码模式

    文章目录 OAuth2 0 授权码模式 实践 依赖知识 术语 授权码流程 认证服务器 拉起请求用户授权页面 用户手动授权 提交授权 生成code 下发Token 第三方应用 收到code并请求Token 访问受保护的资源 项目结构 Tomc
  • JAVA实现大文件多线程下载,提速30倍!(提供exe版)

    JAVA实现大文件多线程下载 提速30倍 前言 兄弟们看到这个标题可能会觉得是个标题党 为了解决疑虑 我们先来看下最终的测试结果 测试云盘下载的文件 46M 自己本地最大下载速度 2M 1 单线程下载 总耗时 603s 2 多线程下载 50
  • .Net Core中间件

    目录 一 什么是中间件 二 中间件的用途 三 中间件的三个概念 四 自定义中间件 五 ASP NET Core附带中间件组件 六 中间件和过滤器的区别 一 什么是中间件 在浏览网站或者使用手机App加载内容的时候 浏览器或者手机App其实在
  • 【Java基础】day14

    day14 一 什么是 RESTful 架构 REST 全称是 Representational State Transfer 中文意思是表征性状态转移 它首次出现在 2000 年 Roy Fielding 的博士论文中 Roy Field
  • RESTful接口规范(带案例)

    一 主要特征 以资源为基础 Rest是web服务的一种设计思想和风格 只要符合REST原则 即为RESTful URL只指定资源 以HTTP方法动词进行不同的操作 统一接口 对资源的操作包括获取 创建 修改和删除 这些操作正好对应HTTP协
  • 初步使用基于RESTful的前后端交互方式,包括前后端增、删、改流程

    目录 一 问题背景 二 解决方法 1 POST增 2 DELETE删 3 PUT改 4 参考源代码 一 问题背景 最开始接触web后端开发时 使用的请求大多是通过自定义的一些请求名称 比如update do delete do等 现在为了规
  • Spring Security OAuth2.0(四)-----OAuth2+JWT

    传统的通过 session 来记录用户认证信息的方式我们可以理解为这是一种有状态登录 而 JWT 则代表了一种无状态登录 无状态登录天然的具备单点登录能力 1 无状态登录 1 1 什么是有状态 有状态服务 即服务端需要记录每次会话的客户端信
  • SpringMVC注解

    注解大全 请求注解 名称 类型 位置 作用 注意点 RequestMapping save 方法注解 SpringMVC控制器方法定义上方 设置当前控制器方法请求访问路径 如果设置在类上统一设置当前控制器方法请求访问路径前缀 路径不能重复
  • java一行代码实现RESTFul接口

    一 介绍spring data rest Spring Data REST是基于Spring Data的repository之上 可以把 repository 自动输出为REST资源 目前支持 Spring Data JPA Spring

随机推荐

  • 算法题目练习(C/c++/java)

    记录做过的经典题型 以便于以后查看 目录 二分法 1 二分查找一个数 2 二分查找左边界 3 二分查找右边界 计算最大公约数 辗转相除 递归辗转 链表的逆置 前缀和求法 一维前缀和 二维前缀和 包子凑数 扩展欧几里得算法 例子 青蛙的约会
  • 【全民编程】《软件编程-讲课视频》【零基础入门到实战应用】

    第一阶段 零基础编程到入门 视频讲解 第二阶段 工作实操指导
  • EC变色玻璃介绍

    EC Electrochromic 全称电致变色 最外层的两层EC器件基底将所有材料包裹起来 EC器件基底大部分为玻璃 变色玻璃组成 EC变色的本质是在电压作用下材料的光学性质 透过率 反射率 吸收率等 发生稳定 可逆的变化 在EC薄膜两边
  • VMM基础

    复杂度3 5 机密度3 5 最后更新2021 04 20 VMM Virtual Memory Management是所有操作系统都要解决的问题 也是非常硬件相关的问题 必须从硬件CPU的地址管理开始谈起 我们先了解一些术语 Page 内存
  • Sklearn——5折交叉验证评估模型性能

    学习资料 sklearn 中文文档 http www scikitlearn com cn pandas cookbook https github com iamseancheney pythonbooks blob master Pan
  • NLP-分词器:SentencePiece【参考Chinese-LLaMA-Alpaca在通用中文语料上训练的20K中文词表并与原版LLaMA模型的32K词表进行合并的代码】

    背景 随着ChatGPT迅速出圈 最近几个月开源的大模型也是遍地开花 目前 开源的大语言模型主要有三大类 ChatGLM衍生的大模型 wenda ChatSQL等 LLaMA衍生的大模型 Alpaca Vicuna BELLE Phoeni
  • 业内首发

    区块链数据服务 Blockchain Data Service BDS 是京东云区块链产品部发推出的 其将区块链的链式 非结构化数据通过技术手段进行结构化存储 实时同步到高性能数据仓库中 用户可以通过区块链数据查询工具 实现简单的条件查询和
  • springboot+rabbitmq两小时入门(七):生产者发送失败和消费者消费失败处理

    消息队列经常会发送失败和消费失败 这两种问题在日常工作中是不可忽视的 消息发送失败情况 1 网络抖动导致生产者和mq之间的连接中断 导致消息都没发 答 rabbitmq有自动重连机制 叫retry 具体到rabbitTemplate中叫re
  • LVS——DR模式下的健康检查(ldirectord)

    对后端服务器健康检查 如果一个后端服务器挂掉将这个服务器踢出集群 让用户无感知 否则会出现访问时好时坏的情况 当宕机的服务器恢复正常时自动将他加回集群 当服务器集群宕机的时候返回一个统一的错误页面 这个页面来自于调度器 注意 ldirect
  • linux 下搭建BugFree

    遇到问题 公司项目组开发小组需要搭建缺陷管理系统 方便开发小组提交Bug 介绍 BugFree基于PHP和MySQL开发 是免费且开放源代码的缺陷管理系统 服务器端在Linux和Windows平台上都可以运行 客户端无需安装任何软件 通过I
  • [运维] 在debian系统下安装KODExplorer(可道云)

    系统环境说明 系统 Debian GNU Linux 10 buster 平台 amd64 参考文献 KODExplorer 系统环境软件安装 KODExplorer 运行环境软件安装 sudo apt install php php cu
  • python线程池 ThreadPoolExecutor 使用详解

    从 Python3 2 开始 标准库为我们提供了 concurrent futures 模块 它提供了 ThreadPoolExecutor 和 ProcessPoolExecutor两个类 实现了对 threading 和 multipr
  • [ACTF2020]exec

    ACTF2020 exec 点开进入题目 可以看见一个ping 首先第一反应是输入自己电脑的地址 可以得到 然后凭感觉进行 输入127 0 0 1 whoami 因为linux的默认用户组是www data 因此这是linux 继续下去 遍
  • Flash地址空间的数据读取——STM32

    目录 一 STM32 的内部 FLASH 简介 二 工程验证 三 总结 参考链接 一 STM32 的内部 FLASH 简介 在 STM32 芯片内部有一个 FLASH 存储器 它主要用于存储代码 我们在电脑上编写好应用程序后 使用下载器把编
  • Linux学习笔记——Linux实用操作(二)

    04 Linux实用操作 4 6 IP地址 主机名 4 6 1 IP地址 主机名 学习目标 掌握什么是IP地址 掌握什么是主机名 掌握什么是域名解析 4 6 1 1 IP地址 1 每一台联网的电脑都会有一个地址 用于和其它计算机进行通讯 I
  • Qt界面之间信息传递(自身项目经验,一文必懂)

    Qt最常用的就是信号与槽这一结构 对于这一结构 我们可以看下Qt4和Qt5以上版本的差别 connect ui gt QCP fabric edit SIGNAL mousePress QMouseEvent this SLOT myMou
  • NVIDIA驱动安装及报错处理

    NVIDIA驱动安装及报错处理 下载GPU驱动包 安装GPU驱动包 卸载GPU驱动包 GPU驱动包安装排错 下载GPU驱动包 驱动下载 https www nvidia com Download Find aspx 复制好地址后 使用wge
  • order函数的简单使用

    a lt c 5 4 3 2 1 b lt c 1 2 3 4 5 c lt cbind a b c order c 1 按第一列递增排序 转载https blog csdn net illfm article details 152183
  • Hinton开源CapsuleNet

    当前的深度学习理论是由Geoffrey Hinton大神在2007年确立起来的 但是如今他却认为 CNN的特征提取层与次抽样层交叉存取 将相同类型的相邻特征检测器的输出汇集到一起 是大有问题的 去年9月 在多伦多接受媒体采访时 Hinton
  • Restful定义,接口设计原则及优点

    1 什么是REST REST全称是Representational State Transfer 中文意思是表述 编者注 通常译为表征 性状态转移 它首次出现在2000年Roy Fielding的博士论文中 Roy Fielding是HTT