RESTful API学习

RESTful API

REST(英文:Representational State Transfer,简称REST,直译过来表现层状态转换)是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。

一套层次结构清晰、便于理解、便于扩展、易于实现缓存让大部分人都能够理解接受的接口风格
在这里插入图片描述

特征

以资源为基础 :资源可以是一个图片、音乐、一个XML格式、HTML格式或者JSON格式等网络上的一个实体,除了一些二进制的资源外普通的文本资源更多以JSON为载体、面向用户的一组数据(通常从数据库中查询而得到)。

资源是REST系统的核心概念。 所有的设计都是以资源为中心
## 什么资源?
1.商品加入购物车 购物车
2.提交订单 订单
3.创建用户 用户围绕资源进行 添加,获取,修改,删除,以及对符合特定条件的资源进行列表操作 。针对资源设计接口
每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源## 哪种方式更符合RESTful?
/api/users/1
/api/user/1
第一种方式 /api/users/1 更常见且稍微更符合RESTful命名约定。它使用复数形式的“users”表明这是“用户”这一资源集合的一部分,1是该资源集合中特定用户的唯一标识符。

统一接口 使用状态码: 对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。换言而知,使用RESTful风格的接口但从接口上你可能只能定位其资源,但是无法知晓它具体进行了什么操作,需要具体了解其发生了什么操作动作要从其HTTP请求方法类型上进行判断。具体的HTTP方法和方法含义如下:

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。
GET
安全且幂等获取表示变更时获取表示(缓存)200(OK) - 表示已在响应中发出204(无内容) - 资源有空表示301(Moved Permanently) - 资源的URI已被更新303(See Other) - 其他(如,负载均衡)304(not modified)- 资源未更改(缓存)400 (bad request)- 指代坏请求(如,参数错误)404 (not found)- 资源不存在406 (not acceptable)- 服务端不支持所需表示500 (internal server error)- 通用错误响应503 (Service Unavailable)- 服务端当前无法处理请求
POST不安全且不幂等使用服务端管理的(自动产生)的实例号创建资源创建子资源部分更新资源如果没有被修改,则不过更新资源(乐观锁)200(OK)- 如果现有资源已被更改201(created)- 如果新资源被创建202(accepted)- 已接受处理请求但尚未完成(异步处理)301(Moved Permanently)- 资源的URI被更新303(See Other)- 其他(如,负载均衡)400(bad request)- 指代坏请求404 (not found)- 资源不存在406 (not acceptable)- 服务端不支持所需表示409 (conflict)- 通用冲突412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)415 (unsupported media type)- 接受到的表示不受支持500 (internal server error)- 通用错误响应503 (Service Unavailable)- 服务当前无法处理请求
PUT不安全但幂等用客户端管理的实例号创建一个资源通过替换的方式更新资源如果未被修改,则更新资源(乐观锁)200 (OK)- 如果已存在资源被更改201 (created)- 如果新资源被创建301(Moved Permanently)- 资源的URI已更改303 (See Other)- 其他(如,负载均衡)400 (bad request)- 指代坏请求404 (not found)- 资源不存在406 (not acceptable)- 服务端不支持所需表示409 (conflict)- 通用冲突412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)415 (unsupported media type)- 接受到的表示不受支持500 (internal server error)- 通用错误响应503 (Service Unavailable)- 服务当前无法处理请求
DELETE不安全但幂等删除资源200 (OK)- 资源已被删除301 (Moved Permanently)- 资源的URI已更改303 (See Other)- 其他,如负载均衡400 (bad request)- 指代坏请求404 (not found)- 资源不存在409 (conflict)- 通用冲突500 (internal server error)- 通用错误响应503 (Service Unavailable)- 服务端当前无法处理请求

无状态:服务器不能保存客户端的信息, 每一次从客户端发送的请求中,要包含所有必须的状态信息,会话信息由客户端保存, 服务器端根据这些状态信息来处理请求。 当客户端可以切换到一个新状态的时候发送请求信息, 当一个或者多个请求被发送之后, 客户端就处于一个状态变迁过程中。 每一个应用的状态描述可以被客户端用来初始化下一次的状态变迁。

为什么要无状态?
1. 可伸缩性(Scalability)
由于服务端不需要保存客户端的状态,它可以更容易地处理大量并发的请求。服务端不需要维护用户状态信息,因此资源可以被自由地重定向到处理新的请求。这使得负载均衡器能够将来自同一客户端的任何请求分配给集群中的任何服务器,而不会导致会话数据问题。
2. 简化服务器设计(Simplicity of Server Design)
无状态协议简化了服务器的设计,因为服务器只需考虑单个请求。他没有必要担心请求之间的上下文如何影响服务器的响应。这意味着服务器变得更加简洁,易于实现,且更少出错。
3. 易于缓存(Facilitates Caching)
由于每个响应都是自包含的,正确标记的响应更容易被缓存处理。缓存机制可以根据每个请求的信息来处理和重新使用响应,这提高了效率,减轻了服务器负担。

举例

GET /api/users : 获取所有用户列表
GET /api/users/1 : 获取特定用户信息POST /api/users : 创建新用户
PUT /api/users/1 : 更新特定用户信息
Content-Type: application/json
body : {"name": "John Doe","email": "john.doe@example.com"
}
DELETE /api/users/1 : 删除特定用户GET /api/users/1/articles : 获取特定用户的所有文章
POST /api/users/1/articles : 为特定用户创建文章
RESTful API的无状态性意味着每个请求都应包含所有必须的信息,使得服务器能够理解和处理该请求。服务器不会保存任何客户端请求之间的状态信息。这样,每个请求都可以独立于其他请求进行处理,提高了API的可靠性、可扩展性和简化了服务器设计。## 登录
POST /api/login
用户通过发送用户名和密码到登录端点进行认证。服务器验证凭据后,响应中返回一个令牌(token),客户端将使用这个令牌来访问需要认证的资源。
GET /api/users/1
Authorization: Bearer abcdefghij
即使之前已经进行了登录,服务器也不会“记住”这个用户;每次请求都需要提供令牌作为认证的一部分。## 访问
如果客户端试图访问同样的资源但没有提供令牌,服务器将不能识别用户,并且会返回错误响应。
401 Unauthorized
Content-Type: application/json
body : {"error": "Authentication required"
}

参考

https://zhuanlan.zhihu.com/p/334809573

https://chatgate.ai/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/528141.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划|【路径问题】|174.地下城游戏

题目 174. 地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…

关于GPU显卡的介绍

一.关于英伟达历代产品架构 显卡是一种计算机硬件设备,也被称为显示适配器或图形处理器。目前的硬件部分主要由主板、芯片、存储器、散热器(散热片、风扇)等部分。显卡的主要芯片是显卡的主要处理单元。显卡上也有和计算机存储器相似的存储器&#xff0…

mysql集群搭建-读写分离

一.前期准备 1.检查是否存在MySQL安装包 执行命令:rpm -qa | grep -i mysql 删除搜索到的MySQL安装包 执行命令:rpm -e --nodeps 搜索到的mysql 2.创建用户 创建用户组: groupadd mysql 创建用户: useradd -g mysql mysql 二.安装MySQL…

Python列表及其操作详解,从此不再迷茫!

在前面的文章中,我们详细讲了六大数据类型中的数字类型,字符串类型。相信大家都能够熟练的掌握了。那么今天我们来讲解列表(list)。 这是一种常用且重要的数据类型,List可以用来存储一系列的元素,对于后期…

Java“树结构TreeNode”用法详解,二叉树用法实现代码!!!

一、TreeNode用法 在Java中,TreeNode通常用于表示树结构中的节点。在树结构中,每个节点可以有零个或多个子节点,而TreeNode就是这个树结构中的一个节点。通常,树结构是通过链式结构实现的,每个节点有指向其子节点的引…

蓝桥杯备战刷题five(自用)

1.数字三角形(方向次数限制,动态规划) //如果n为奇数时,最后必然走到最后行最中间的数,如果为偶数,则取中间两个数的最大值, //因为向左下走的次数与向右下走的次数相差不能超过 1 #include …

探索stable diffusion的奇妙世界--01

目录 1. 理解prompt提示词: 2. Prompt中的技术参数: 3. Prompt中的Negative提示词: 4. Prompt中的特殊元素: 5. Prompt在stable diffusion中的应用: 6. 作品展示: 在AI艺术领域,stable di…

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法,常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则,从历史样本中集中找出与现在的最相似的一…

three.js 射线Ray,三维空间中绘制线框

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div><…

Feed、RSS、Atom概念对比及ROME实战

概述 在豆瓣等网站里&#xff0c;经常会看到如下订阅Button&#xff1a; 本文记录一下相关概念学习成果。 Feed Feed&#xff1a;消息来源&#xff0c;一种资料格式&#xff0c;网站通过它将最新资讯传播给用户。用户能够订阅某网站的前提条件是网站有提供Feed。Feed被很多…

Java高频面试之Mysql篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 Java高频面试之总纲篇 Java高频面试之集合篇 Java高频面试之异常篇 Java高频面试之并发篇 Java高频面试之SSM篇 Java高频面试之Mysql篇 Java高频面试之Redis篇 Java高频面试之消息队列与分布式篇…

代码随想录算法训练营Day39 || leetCode 762.不同路径 || 63. 不同路径 II

62.不同路径 每一位的结果等于上方与左侧结果和 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m,vector(n,0));for (int i 0; i < m; i) dp[i][0] 1;for (int j 0; j < n; j) dp[0][j] 1;for (int i 1; i < m; …