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 已经接受处理请求但尚未完成(异步处理)
目录
相关文章
|
27天前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
762 58
|
2月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
15天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
74 8
|
1月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
812 1
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
4月前
|
缓存 安全 API
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。
|
1月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
134 2
|
2月前
|
前端开发 Java 开发者
Java新手指南:在Spring MVC中使用查询字符串与参数
通过结合实际的需求和业务逻辑,开发者可以灵活地利用这些机制,为用户提供更丰富而高效的Web应用体验。
99 15
|
3月前
|
JSON 前端开发 Java
Java新手指南:如何在Spring MVC中处理请求参数
处理Spring MVC中的请求参数是通过控制器方法中的注解来完成的。这些注解包括 `@RequestParam`, `@PathVariable`, `@ModelAttribute`, `@RequestBody`, `@RequestHeader`, `@Valid`, 和 `@RequestMapping`。使用这些注解可以轻松从HTTP请求中提取所需信息,例如URL参数、表单数据或者JSON请求体,并将其转换成Java对象以供进一步处理。
327 17
|
3月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
436 0