RESTful简介和使用

文章目录

    • 概述
    • 优点

概述

REST:英文representational state transfer直译为表现层状态转移,或者表述性状态转移;Rest是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。
一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
RESTful是一种设计风格,用于构建可伸缩、可维护和可扩展的网络服务。在Java中,可以使用各种方式来实现RESTful风格的API。
RESTful的一些基本原则和相关概念:

  1. 资源(Resources):RESTful API将数据和功能封装为资源,每个资源都有一个唯一的标识符(URI)。例如,一个用户资源可以表示为/users/{id}。
  2. HTTP方法(HTTP Methods):HTTP方法用于定义对资源的操作,常用的有:
    ○ GET:获取资源的信息。
    ○ POST:创建新的资源。
    ○ PUT:更新现有资源。
    ○ DELETE:删除资源。
  3. 状态码(Status Codes):RESTful API使用HTTP状态码来表示请求的结果。例如,200表示成功,404表示资源不存在,500表示服务器错误等。
  4. 媒体类型(Media Types):RESTful API使用媒体类型来指定数据的格式,常用的有:
    ○ JSON(application/json):用于传输结构化的数据。
    ○ XML(application/xml):用于传输和存储数据。
    在Java中,可以使用多种框架和技术来构建RESTful API,例如:
  5. JAX-RS(Java API for RESTful Web Services):是Java EE的一部分,提供了一套标准的API和注解,用于构建RESTful风格的Web服务。常用的JAX-RS实现包括Jersey和RESTeasy。
  6. Spring MVC:是Spring框架的一部分,可以使用注解方式来构建RESTful风格的Web服务。Spring Boot提供了自动配置和简化开发的特性,使得构建RESTful API更加方便。
    无论选择哪种方式,都需要定义API的URI、请求方法、响应状态码和返回数据格式等,以满足RESTful的设计原则和要求。同时,还可以通过使用过滤器、拦截器、异常处理等技术来增强API的功能和安全性。
    总之,Java提供了多种工具和框架来实现RESTful API,开发者可以根据项目需求和个人喜好选择合适的方式。

优点

通过 HTTP 动词指定了不同的 CRUD 操作,将接口 URL 简化为了同一个地址,仅需要改变 HTTP 动词即可实现不同的操作。
另一方面,相对于 SOAP/XML 形式的 RPC 服务,Restful API 采用 HTTP/JSON 的形式传递数据,降低了传输数据量,同时提高了数据解析的效率,单位时间内的负载能力会高于 SOAP WebService 服务。
以webService为例通俗解释。
非Rest设计,以往我们都会这么写:
http://localhost:8080/admin/getUser (查询用户)
http://localhost:8080/admin/addUser (新增用户)
http://localhost:8080/admin/updateUser (更新用户)
http://localhost:8080/admin/deleteUser (删除用户)
总结:以不同的URL(主要为使用动词)进行不同的操作。
Rest架构:
GET http://localhost:8080/admin/user (查询用户)
POST http://localhost:8080/admin/user (新增用户)
PUT http://localhost:8080/admin/user (更新用户)
DELETE http://localhost:8080/admin/user (删除用户)
总结:URL只指定资源,以HTTP方法动词进行不同的操作。用HTTP STATUS/CODE定义操作结果。
Restful:遵守了rest风格的web服务便可称为Restful。
为什么需要Restful?
URL具有很强可读性的,具有自描述性
规范化请求过程和返回结果
资源描述与视图的松耦合
可提供OpenAPI,便于第三方系统集成,提高互操作性
提供无状态的服务接口,降低复杂度,可提高应用的水平扩展性
/版本号/资源路径
/v1/tags/{tag_id}
/v1/users?[&keyword=xxx][&enable=1][&offset=0][&limit=20]
1、版本号
命名版本号可以解决版本不兼容问题,在设计 RESTful API 的一种实用的做法是使用版本号。一般情况下,我们会在 url 中保留旧版本号,并同时兼容多个版本
【GET】 /v1/users/{user_id} // 版本 v1 的查询用户列表的 API 接口
【GET】 /v2/users/{user_id} // 版本 v2 的查询用户列表的 API 接口
2、资源路径
URI 不能包含动词,只能是名词(命名名词的时候,要使用小写、数字及下划线来区分多个单词)。
资源的路径应该从根到子依次如下:
/{resources}/{resource_id}/{sub_resources}/{sub_resource_id}/{sub_resource_property}
【POST】 /v1/users/{user_id}/roles/{role_id} // 添加用户的角色
有的时候,当一个资源变化难以使用标准的 RESTful API 来命名,可以考虑使用一些特殊的 actions 命名。
/{resources}/{resource_id}/actions/{action}
【PUT】 /v1/users/{user_id}/password/actions/modify // 密码修改
3、请求方式
【GET】 /users # 查询用户信息列表
【GET】 /users/1001 # 查看某个用户信息
【POST】 /users # 新建用户信息
【PUT】 /users/1001 # 更新用户信息(全部字段)
【PATCH】 /users/1001 # 更新用户信息(部分字段)
【DELETE】 /users/1001 # 删除用户信息
【PATCH】一般不用,用【PUT】
4、查询参数
RESTful API 接口应该提供参数,过滤返回结果。
【GET】 /{version}/{resources}/{resource_id}?offset=0&limit=20
5、响应参数
JSON格式(code、data、msg)
6、状态码
使用适合的状态码很重要,而不应该全部都返回状态码 200
状态码,可根据以下标准按照项目扩展自身状态码:
200~299段 表示操作成功:
200 操作成功,正常返回
201 操作成功,已经正在处理该请求
300~399段 表示参数方面的异常
300 参数类型错误
301 参数格式错误
302 参数超出正常取值范围
303 token过期
304 token无效
400~499段 表示请求地址方面的异常:
404找不到地址
500~599段 表示内部代码异常:
500 服务器代码异常

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL主要内容

1,在表中插入数据 插入值的类型,必须和字段的类型保持一致 - 如果数据类型是字符串,必须引号引起来,数字的话,可以不加 - 插入的数据顺序和字段的顺序必须保持一致 格式一:向表中插入数据 insert in…

python爬虫学习第二十八天-------了解scrapy(二十八天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

【k8s】Kubernetes 1.29.4离线安装部署(总)

(一)kubernetes1.29.4离线部署之-安装文件准备 (二)kubernetes1.29.4离线部署之-镜像文件准备 (三)kubernetes1.29.4离线部署之-环境初始化 (四)kubernetes1.29.4离线部署之-组件安装…

网工学习云计算HCIE感受如何?

作为一名网工,我经常会在各种网络论坛里查询搜索一些网络技术资料,以及跟论坛里的网友交流讨论平时在工作、学习中遇到的问题、故障,因此也经常能在论坛的首页看到誉天的宣传信息。机缘巧合之下关注了誉天的B站号,自从关注了誉天的…

真实世界的密码学(一)

原文:annas-archive.org/md5/655c944001312f47533514408a1a919a 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 序言 当你拿起这本书时,你可能会想,为什么又一本关于密码学的书?甚至,为什么我要读这本…

【DDD领域驱动设计】战术设计--核心概念介绍

目录 前言 战术设计 基本概念 领域内: 实体 值对象 领域服务 模块 对象生命周期: 聚合 工厂 仓库 其他: 领域事件 事件溯源 实例介绍 前言 上一篇文章 DDD-事件风暴 属于领域驱动设计中的战略设计,战略设计主要从…

数据中台工具的选型要点_光点科技

数据中台工具扮演着举足轻重的角色。想要全面理解数据中台工具的意义、作用以及应用方式,就必须深入探讨这一概念以及相关实践。 数据中台工具概述 数据中台,是一个支持数据集成、管理、分析和服务的平台,它能够帮助企业统一数据资源&#xf…

GreatSQL统计信息相关知识点

相关知识点: INNODB_STATS_PERSISTON或用STATS_PERSIST1定义单个表时,优化器统计信息将持久化到磁盘。默认情况下,innodb_stats_persistent是启用的。 持久统计信息存储在mysql.innodb_table_stats和mysql.innodb_index_stats表中。 默认情…

梦境绘师:揭秘生成对抗网络(GAN)的魔法

梦境绘师:揭秘生成对抗网络(GAN)的魔法 1 引言 在今日的深度学习领域,生成对抗网络(GAN)已成为一项无人能外的技术,以其独特的数据生成能力俘获了无数研究者和工程师的心。这项技术不仅在理论上…

CSS3新增特性(二)

四、2D 转换 • 属性名:transform (可用于制作2D转换,也可用于制作3D转转换;2D转换是平面上的转换,3D转换是在三维立体空间的转换) • 作用:对元素进行水平或垂直方向的移动、缩放、旋转、拉长…

【GitHub】2FA认证(双重身份验证)

GitHub 2FA认证(双重身份验证) 写在最前面一、使用 TOTP 应用程序配置双2FA(双因素身份验证)1. 介绍2. github3. 认证 官网介绍小结 & 补充 :权限不足or验证码错误问题 🌈你好呀!我是 是Yu欸…

增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM,Python代码)

1.效果视频:增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM)_哔哩哔哩_bilibili) 2.三个模型和数据集的介绍 交通流量预测(python代码,压缩包中带有数据,CN…

又发现一个超好用的youtube字幕翻译插件!!!

最近有了梯子,所以热衷于去youtube、Facebook、Twitter等网站浏览。但英语不好是硬伤,不懈努力之下,让我发现了一个超超超超好用的翻译插件——Relingo。 1.支持Youtube字幕翻译 官网下载安装后,打开youtube视频,右侧…

PVE虚拟机隐藏状态栏虚拟设备

虚拟机启动后,状态栏会出现一些虚拟设备,点击弹出会导致虚拟机无法使用。 解决方案: 1、在桌面新建disable_virtio_removale.bat文件,内容如下: ECHO OFF FOR /f %%A IN (reg query "HKLM\SYSTEM\CurrentContro…

【机器学习与实现】机器学习概述

目录 一、机器学习的基本概念和方法(一)基本概念(二)机器学习的一般过程举例(三)样本和参数估计 二、机器学习的步骤总结(一)机器学习的主要步骤(二)样本及样…

MyBatis基础操作

黑马程序员JavaWeb开发教程 文章目录 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发一、环境准备1、准备数据库表emp2、创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok&…

SpringBoot项目启动,传参有哪些方式?

SpringBoot项目启动,传参有哪些方式? 1.Spring级别的参数 直接在启动 Spring Boot 应用的命令行中使用 -- 后跟参数名和值的方式来传递参数。 记住:一般是对于Spring Boot应用特有的配置参数,确保它们遵循Spring Boot的配置属性命…

PC端微信软件如何多开【详细教程】

现在工作中,很多小伙伴会用到两个微信。如何在PC端同时登录多个微信呢?赶快跟着下面的教程学起来吧 1、创建一个txt文本文件 2、输入以下代码并保存 echo offstart "" "复制粘贴微信的目标地址" 需要开几个微信就复制几行exit示例…

顺序表leetcode刷题(C语言版)

一.移除元素 对于本题,共有两种解法: 思路一:创建新的数组,遍历原数组,将不为value的值放到新数组中,但本题不允许使用新的数组,因此该方法不行 思路二:使用快慢指针,原数…

2.5G交换机 TL-SE2109简单开箱评测,8个2.5G电口+1个10G光口(SFP+)

TPLINK(普联)的万兆上联的2.5G网管交换机TL-SE2109简单开箱测评。8个2.5电口,1个万兆SFP口。 TL-SH5428 万兆交换机开箱和简单的评测:https://blog.zeruns.tech/archives/707.html WiFi7无线路由器TL-7DR6560简单开箱测评&#x…
最新文章