RESTFul接口和HTTP的幂等性分析

  • REST全称是Representational State Transfer,中文为表述性状态转移,REST指的是一组架构约束条件和原则
  • RESTful表述的是资源的状态性转移,在Web中资源就是URI(Uniform Resource Identifier)(统一资源标识符)
  • 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构,HTTP是目前与REST相关的唯一实例

RESTful接口URL命名原则

  1. HTTP方法后跟的URL必须是名词且统一成名词复数形式
  2. URL中不采用大小写混合的驼峰命名,尽量采用全小写单词,如果需要连接多个单词,则采用“-”连接
  3. 示例:/users、/users-fans;反例:/getUsers、/getUsersFans

HTTP方法的语义

RESTful架构应该遵循统一的接口原则,应该使用标准的HTTP方法如GET和POST,并且遵循这些方法的语义

方法 语义
GET 获取指定资源
DELETE 删除指定资源
POST 发送数据给服务器,依据HTTP 1.1规范中的描述,结合实际项目开发经验,POST经常为了以统一的方法来涵盖以下功能:1在公告板,新闻组,邮件列表或类似的文章组中发布消息2通过注册新增用户,3向数据处理程序提供一批数据,例如提交一个表单
PUT 使用请求中的负载创建或者替换目标资源PUT和POST的区别在于PUT是幂等的,而POST不是。幂等的含义可以理解为调用一次与连续调用多次是等价的(没有副作用或副作用不变)

POST和PUT的区别

  • POST和PUT的区别容易被简单地误认为“POST表示创建资源,PUT表示更新资源”
  • 而实际上,二者均可用于创建资源,更为本质的差别是在幂等性方面

HTTP的幂等性

方法 幂等性 幂等性分析
GET 具备幂等性 用于获取资源,没有副作用,所以是幂等的。请注意,这里强调的是一次和N次并不是说每次请求的结果相同,而是每次请求不会产生不同的副作用。
DELETE 具备幂等性 用于删除资源,有副作用,但它应该满足幂等性,调用一次和N次对系统产生的副作用是相同的
POST 不具备幂等性 POST所指向资源并非POST要创建的资源本身,而是POST创建资源的接收者,比如POST:/news的含义是在news新闻组这个资源分类下新建一条新的新闻,所以两次相同的POST请求会在服务器端创建两份新的资源,它们是不同的。所以,POST方法不具备幂等性
PUT 具备幂等性 PUT对应的资源是要创建或更新的资源本身,语义是创建或更新,对同一资源进行多次PUT的副作用和一次PUT是相同的,因此,PUT方法具有幂等性

02 RESTFul接口和HTTP的幂等性分析的更多相关文章

  1. 底层restful接口修改分析

    记录接口调用次数,接口调用时间需求. 需要修改公共的类,就是restful接口,可以认为是底层的代码,具体的实现有哪些?插入数据库肯定不能影响性能.

  2. [转]简单识别 RESTful 接口

         本文描述了识别一个接口是否真的是 RESTful 接口的基本方法.符合 REST 架构风格的接口,称为 RESTful 接口.本文不打算从架构风格的推导方面描述,而是从 HTTP 标准的方面 ...

  3. RESTful接口设计原则和优点

    RESTful架构优点: 前后端分离,减少流量 安全问题集中在接口上,由于接受json格式,防止了注入型等安全问题 前端无关化,后端只负责数据处理,前端表现方式可以是任何前端语言(android,io ...

  4. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

    我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的 ...

  5. RESTful接口签名认证实现机制

    RESTful接口 互联网发展至今,催生出了很多丰富多彩的应用,极大地调动了人们对这些应用的使用热情.但同时也为互联网应用带来了严峻的考验.具体体现在以下几个方面: 1.     部署方式的改变:当用 ...

  6. SpringBoot Restful 接口实现

    目录 SpringBoot 核心注解 SpringBoot Restful 接口实现 封装响应数据 SpringBoot 核心注解 SpringBoot 基础入门 注解 说明 Component 声明 ...

  7. RESTful 接口调试分享利器 restc

    这个工具来自于https://elemefe.github.io/restc/  这里对Abp进行了一次封装 1.在项目中添加nuget包 Abp.Web.Api.Restc 2.在项目Abp模块的D ...

  8. RESTful接口设计原则/最佳实践(学习笔记)

    RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...

  9. Swagger+Spring mvc生成Restful接口文档

    简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集 ...

随机推荐

  1. oracle sqlplus不支持上下键查看历史记录问题

    我们需要安装rlwrap软件 系统采样: [root@rac-2 src]# su - oracle Last login: Fri Mar 18 23:36:25 CST 2022 on pts/0 ...

  2. 前端CSS基础

    一:CSS 1.什么是CSS? CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). C ...

  3. 羽夏壳世界—— PE 结构(上)

    羽夏壳世界之 PE 结构(上),介绍难度较低的基本 PE 相关结构体.

  4. js实时监听dom尺寸变化

    开发过程中总会遇到dom节点尺寸变化,去做一些相应的逻辑,第一想到的应该是用$(window).resize()去做,但是这个是监听浏览器窗口的所以这个时候要用 ResizeObserver Resi ...

  5. 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)

    2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...

  6. C#语法糖系列 —— 第二篇:聊聊 ref,in 修饰符底层玩法

    自从 C# 7.3 放开 ref 之后,这玩法就太花哨了,也让 C# 这门语言变得越来越多范式,越来越重,这篇我们就来聊聊 ref,本质上来说 ref 的放开就是把 C/C++ 指针的那一套又拿回来了 ...

  7. 【FAQ】接入HMS Core地图服务过程中常见问题总结

    HMS Core地图服务(Map Kit)给开发者提供一套地图开发调用的SDK,助力全球开发者实现个性化地图呈现与交互,方便轻松地在应用中集成地图相关的功能,全方位提升用户体验. 在日常工作中,我们会 ...

  8. XCTF练习题---WEB---simple_js

    XCTF练习题---WEB---simple_js flag:Cyberpeace{786OsErtk12} 解题步骤: 1.观察题目,打开场景 2.打开该场景后发现是一个登录界面,随便输入一个密码, ...

  9. 聊聊 node 如何优雅地获取 mac 系统版本

    背景 今天突然碰到了一个兼容性需求,需要根据不同 macOS 版本,进行不同的兼容性处理. 没想到看似简单的需求,中间也经历了一番波折,好在最后解决了问题. 在此记录一下解决问题的过程,也方便其他有类 ...

  10. 基于casbin的RBAC权限实践

    五一假期疫情封在家也没事做,就想来优化一下一个前端容器小项目 之前的TODOlist里面有一项是权限这块时隔2年了还一直没有动手 迟迟没搞主要还是我太懒了,哈哈 其实我一直想要找一个轻量级的权限通用方 ...