RESTful 分享

RESTful 分享

  1. 什么是RESTful

  2. 理解RESTful

  3. RESTful的使用

1.什么是RESTful

REST全称是Representational State Transfer,中文译文就是“表述性状态转移”。

在2000年,由Roy Fielding(HTTP规范的主要编写者之一)在博士论文中提出的。

写作目的:想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。

REST本身并没有创造新的技术、组件或服务,REST指的是一组架构约束条件和原则。而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

2.理解RESTful

要理解RESTful架构,需要理解Representational State Transfer这个词组到底是什么意思,它的每一个词都有些什么涵义。
结合REST原则,围绕资源展开讨论,从资源的定义、获取、表述、关联、状态变迁等角度,列举一些关键概念并加以解释。

  • 资源与URI
  • 统一资源接口
  • 资源的表述
  • 资源的链接
  • 状态的转移

2.1 资源与URI

REST全称是表述性状态转移,其实指的就是资源的表述性

任何事物,只要有被引用到的必要,它就是一个资源。
一些资源:

  • 某用户的手机号码
  • 两个产品之间的依赖关系
  • 某用户的个人信息

  • 要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。URI既可以看成是资源的地址,也可以看成是资源的名称.

URI的设计应该遵循可寻址性原则,具有自描述性,需要在形式上给人以直觉上的关联。

命名好的URI:

  • https://github.com/git/git/commit/e3af72cdafab5993d18fae056f87e1d675913d08
  • https://github.com/git/git/pulls
  • https://github.com/git/git/compare/master…next

命名技巧:

  • 使用_或-来让URI可读性更好
  • 使用/来表示资源的层级关系
  • 使用?用来过滤资源
  • ,或;或…可以用来表示同级资源的关系

2.2 统一资源接口

RESTful架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,即不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。按照HTTP方法的语义来暴露资源,那么接口将会拥有安全性和幂等性的特性。
GET:获取资源,安全且幂等
POST:创建资源(当使用服务端管理的(自动产生)的实例号),不安全且不幂等
PUT:创建资源(当用客户端管理的实例号),更新资源(通过替换的方式)
DELETE:删除资源,不安全但幂等

统一资源接口要求使用标准的HTTP方法对资源进行操作,所以URI只应该来表示资源的名称,而不应该包括资源的操作。

错误示例:

  • GET /getUser/1
  • POST /createUser
  • PUT /updateUser/1
  • DELETE /deleteUser/1

2. 3 资源的表述

客户端通过http方法获取的资源,更确切的说是资源的表述
资源的表述包括数据和描述数据的元数据,
例如,HTTP头"Content-Type" 就是这样一个元数据属性。服务端则通过Content-Type告诉客户端资源的表述形式(资源的格式是什么)。
在这里插入图片描述

2.4 资源的链接

当你浏览Web网页时,从一个连接跳到一个页面,再从另一个连接跳到另外一个页面,就是利用了超媒体的概念:把一个个把资源链接起来.
。在《RESTful Web Services》一书中,作者把这种具有链接的特性称为为连通性。

2.5 状态的转移

http协议是无状态的,服务器不记录客户端的状态(登录状态)。无状态通信原则,并不是说客户端应用不能有状态,而是指服务端不应该保存客户端状态。
应用状态与资源状态
状态应该区分应用状态和资源状态,客户端负责维护应用状态,而服务端维护资源状态。客户端与服务端的交互必须是无状态的,并在每一次请求中包含处理该请求所需的一切信息。
服务端不需要在请求间保留应用状态,只有在接受到实际请求的时候,服务端才会关注应用状态。

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

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

相关文章

Ubuntu系统下使用docker容器配置nginx并部署前端项目

1.下载 Nginx 镜像 命令 描述 docker pull nginx 下载最新版 Nginx 镜像 :2. 创建要挂载的宿主机目录 启动前需要先创建 Nginx 外部挂载的配置文件( /home/nginx/conf/nginx.conf) 之所以要先创建 , 是因为 Nginx 本身容器只存在 / etc/nginx 目录 ,…

Android学习之路(21) 进程间通信-AIDL与Servce基本使用

Service 与 Thread 和 进程 之间的关系 进程:应用程序在内存中分配的空间。(正在运行中的程序)线程:负责程序执行的单元,也称为执行路径。(需要线程来执行代码)。一个进程至少包含一条线程&…

看我为了水作业速通C++!

和java不太一样的一样的标题打个*&#xff0c;方便对比 基本架构* #include<iostream> using namespace std; int main() { system("pause"); return 0; } 打印* cout << "需要打印的内容" <<endl endl 是一个特殊的输出流控…

python 之 矩阵相关操作

文章目录 1. **创建矩阵**&#xff1a;2. **矩阵加法**&#xff1a;3. **矩阵乘法**&#xff1a;4. **矩阵转置**&#xff1a;5. **元素级操作**&#xff1a;6. **汇总统计**&#xff1a;7. **逻辑操作**&#xff1a; 理解你的需求&#xff0c;我将为每个功能写一个单独的代码块…

非关系型数据库-Redis

一、缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且硬盘也有大小不一的缓存…

您账号或密码有误,请重新输入?

1、网站不让我进? 2、警告&#xff1a;声明未成年人不可轻易模仿&#xff01;可刑 3、MYSQL函数特性是如何被黑客利用的&#xff1f; --- SQL 注入原理&#xff1a; 账号登录场景&#xff1a; --- 数据库概述&#xff1a; --- MYSQL系统库(默认)&#xff1a; MYSQL数据…

5G学习笔记之5G频谱

参考&#xff1a;《5G NR通信标准》1. 5G频谱 1G和2G移动业务的频段主要在800MHz~900MHz&#xff0c;存在少数在更高或者更低频段&#xff1b;3G和4G的频段主要在450MHz ~ 6GHz&#xff1b;5G主要是410MHz ~ 6GHz&#xff0c;以及24GHz ~ 52GHz。 5G频谱跨度较大&#xff0c;可…

react antd实现upload上传文件前form校验,同时请求带data

最近的需求&#xff0c;两个下拉框是必填项&#xff0c;点击上传按钮&#xff0c;如果有下拉框没选要有提示&#xff0c;如图 如果直接使用antd的Upload组件&#xff0c;一点击文件选择的窗口就打开了&#xff0c;哪怕在Button里再加点击事件&#xff0c;也只是&#xff08;几乎…

PKU 概率论+数理统计 期中考复习总结

这里写目录标题 计算条件概率计算概率&#xff08;放回与不放回&#xff09;生成随机数算法Uniformity (test of frequency)1.Chi-Square test2.Kolmogorov-Sminov test Independence (test of autocorrelation)Runs test Acceptance-rejection methodmethod方法1&#xff1a;建…

「我的AIGC咒语库:分享和AI对话交流的秘诀——如何利用Prompt和AI进行高效交流?」

文章目录 每日一句正能量前言基础介绍什么是Prompt?什么是 Prompt Engineering&#xff1f;为什么需要 Prompt Engineering&#xff1f;如何进行 Prompt Engineering&#xff1f;Prompt的基本原则Prompt的编写模式AI 可以帮助程序员做什么&#xff1f;技术知识总结拆解任务阅读…

哈夫曼树、哈夫曼编码/解码

哈夫曼树 哈夫曼树的基本介绍 哈夫曼树构建步骤图解 创建哈夫曼树代码实现 """ 创建哈夫曼树 """ class EleNode:""" 节点类 """def __init__(self, value: int):self.value valueself.left None # 指向左子…

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f;2、给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f;&#xff08;1&#xff09;用一个位图…