6:RestFul API-Java Spring

简介: 6:RestFul API-Java Spring

6.1 RestFul API介绍

Rest表示性状态转移(Representation State Transfer),用URI表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作,用于 Web 数据接口的设计,Rest的最基本特征是面向资源

  • Resource 资源,资源是构成应用系统的所有的基本概念,即数据
  • Representational 表述,REST的资源可以用XML,JSON,纯文本等多种方式表述
  • State Transfer 状态转移,客户端通过HTTP的GET/POST/PUT/DELETE/PATCH对资源进行操作,实现资源的状态转移

6.2 URL构成

Restful API用URL表示特定的资源或资源集合,例如http://www.xxx.com/goods

  • URI(统一资源标识符)用于标识一个资源,提供标识资源的方法
  • URL(统一资源定位符)用于提供找到某个资源的路径,比如网址
  • URL是URI的子集
URL 描述
/categories 商品的所有一级分类categories
/categories/1 id为1的一级分类
/categories/1/goods id为1的一级分类下所有商品
/categories/1/subcategories id为1的一级分类下的所有二级分类
/subcategories/2 id为2的二级分类
/subcategories/2/goods id为2的二级分类下所有商品
/goods/5 id为5的商品

6.3 RestFul API原理

RESTful API 是一种指REST设计风格的API,采用HTTP做传输协议,用一套协议来规范多种形式的前端和同一个后台的交互方式

用户在Android、IOS、PC等终端平台向服务端发送请求后,需要为每个平台的数据请求单独定义相应的返回格式,需要为每个平台单独写一个后台系统

而RESTful API 要求前端用一套协议来规范的语法格式发送请求,并与同一个后台系统交互,服务端只需要定义一个统一的响应接口(API)即可

传统API

  • http://localhost:8080/user/queryUser (GET查询用户)
  • http://localhost:8080/user/addUser(POST添加用户)
  • http://localhost:8080/user/updateUser (PUT更新用户)
  • http://localhost:8080/user/deleteUser (DELETE删除用户)

RestFul API

  • http://localhost:8080/user/1 (@GetMapping("/user/{userId}") 查询)
  • http://localhost:8080/user (@PostMapping("/user") 添加或修改)
  • http://localhost:8080/user (@PutMapping("/user") 修改)
  • http://localhost:8080/user/1 (@DeleteMapping("/user/{userId}") 删除)

6.4 RestFul API映射注解

请求方法 用途
@Controller 表明了这个类或方法是一个控制器,用于返回对象
@ResponseBody 将返回的Java对象转为JSON格式的数据
@RestController 包含了@Controller@ResponseBody
@RequestMapping 全注解,将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上
@GetMapping 接收GET的请求方式,等同于 @RequestMapping(value ="/user", method = RequestMethod.GET)
@PostMapping 接收Post的请求方式,等同于 @RequestMapping(value ="/user", method = RequestMethod.POST)
@PutMapping 接收Put的请求方式,等同于@RequestMapping(value ="/user", method = RequestMethod.PUT)
@DeleteMapping 接收Delete的请求方式,等同于@RequestMapping(value ="/user", method = RequestMethod.DELETE)
@RequestParam 将请求参数绑定到控制器的方法参数上
@PathVariable 接收请求路径中占位符的值
@RequestBody 接收前端传递给后端的json字符串中的数据(请求体中的数据的)

6.5 RestFul API操作

RestFul API接口响应的资源(返回给前端的数据格式)的表现形式是, @RestController@Controller标签相同,用于标注在类定义前面,使得类会被认定为Controller对象,用于告知Spring容器,该类所有方法的返回值需要以JSON或XML格式写到@ResponseBody

  • 可在控制类(@Controller类)上添加@ResponseBody 注解
  • 可在每个接口的方法上添加@ResponseBody 注解
  • 可把@ResponseBody注解提取到控制器上,这个控制器中所有的返回值会写到@ResponseBody
  • 可在控制类(@Controllerr类)上合并@Controller@ResponseBody成一个@RestController注解

RestFul API通过两种方式实现定义接口的URL

1.指定请求方式

  • @RequestMapping(value ="/user", method = RequestMethod.GET) 查询

2.特定请求方式

  • @PostMapping("/user") 添加或修改

HTTP的五种请求方法

请求方法 用途
POST 创建一个新的资源并返回新资源
GET 查询特定资源
PUT 修改资源的全部属性并返回修改后的资源
PATCH 修改资源的特定属性并返回修改后的资源
DELETE 删除资源

HTTP状态码

HTTP状态码 描述
2** 操作成功接收并处理
3** 重定向
4** 客户端错误,请求包含语法错误
5** 服务器错误,服务器在处理请求的过程中发生了错误

共用HTTP状态码

HTTP状态码 描述
400 参数格式错误(缺少或不符合要求)
401 用户需登录访问
403 用户无权限访问
409 资源冲突或资源被锁定(由于事务回滚造成的)
500 服务器通用错误(服务器程序错误)
503 服务当前无法处理请求(服务器忙)

GET请求

URL 描述
GET /categories 获取所有的一级商品分类
GET /categories/1 获取id为1的一级商品分类对象
GET /categories/1/goods 获取id为1的一级商品分类下所有商品
GET /categories/1/subcategories 获取id为1的分类下的所有子分类
GET /goods?name=电视机 &sort=price&order=acend 获取商品名称为电视机的商品,按照价格升 序排序

Get请求的HTTP状态码

HTTP状态码 描述
200 请求成功,数据在Response中返回

POST请求

URL 描述
POST /categories 创建一个新的一级商品分类
POST /categories/1/subcategories 在id为1的一级商品分类下创建一个二级分类
POST /subcategories/1/goods/1 在id为1的二级商品分类下增加id为1的商品
POST /orders/1000/payments 为id为1000的订单付款
POST /login 用户登录

Post请求的HTTP状态码

HTTP状态码 描述
201 新资源成功,数据在Response中返回
202 已经接受处理请求但尚未完成(异步处理)

PUT请求

URL 描述
PUT /categories/1 修改id为1的一级商品分类
PUT /subcategories/1 修改id为1的二级商品分类
PUT /goods/5/onshelves 将id为5的商品上架
PUT /goods/5/offshelves 将id为5的商品下架

PUT请求的HTTP状态码

HTTP状态码 描述
200 修改成功
202 已经接受处理请求但尚未完成(异步处理)

DELETE请求

URL 描述
DELETE /categories/1 删除id为1的一级商品分类
DELETE /categories/1/goods/5 在id为1的分类中将id为5的商品移除

Delete请求的HTTP状态码

HTTP状态码 描述
200 删除成功
202 已经接受处理请求但尚未完成(异步处理)
目录
相关文章
|
10天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
38 2
|
3天前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
5天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
5天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
14天前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
51 12
|
11天前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
14天前
|
存储 API 开发者
深入理解RESTful API设计原则
本文探讨了RESTful API的设计原则,强调了其在现代Web服务中的重要性。通过分析状态表示转移(REST)的概念、核心约束以及最佳实践,本文旨在为开发者提供构建高效、可扩展和易于维护的API的指导。文章还讨论了常见的设计陷阱和如何避免它们,以确保API设计的健壮性和灵活性。
|
15天前
|
JSON 缓存 API
构建高效RESTful API的最佳实践
【10月更文挑战第34天】在数字时代的浪潮中,后端开发扮演着至关重要的角色。本文将带你深入探索如何构建高效的RESTful API,从设计原则到实际编码技巧,再到性能优化和错误处理,我们将一一解锁这些技能。你将学会如何打造一个既优雅又强大的后端服务,让你的应用程序在激烈的市场竞争中脱颖而出。那么,让我们一起踏上这段精彩的旅程吧!
28 2
|
17天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
22 2
|
19天前
|
存储 安全 API
深入理解RESTful API设计原则
本文旨在探讨RESTful API设计的基本原则和最佳实践,帮助开发者构建高效、可维护的Web服务。通过分析REST架构的核心概念,如资源、统一接口、无状态通信等,本文将指导读者如何设计符合REST原则的API,以及如何处理常见的设计挑战,如版本控制、错误处理和安全性问题。
下一篇
无影云桌面