① RESTful API

1.API(Application Programming Interface)

        API就是一个接口;例如玩某一款游戏,你不必知道游戏具体的实现细节,只需要知道点哪个键是哪个技能就够了,而这个键之所以能实现玩家与游戏的交互,是因为开发者提供了这样的接口-API

https://youtu.be/zvKadd9Cflchttps://youtu.be/zvKadd9Cflc

        现实世界中API的应用也越来越多,带来大量便利的同时,传统API不够统一规范也成了问题,于是一种结构清晰、统一规范、易于理解、便于扩展的接口风格-RESTful API应运而生

2. REST(Representational State Transfer)

        REST是一种软件架构风格,它定义了一组原则和约束条件,用于设计网络应用程序的分布式系统

        RESTful 是基于 REST 架构风格设计和实现的 Web 服务或 API

        通过遵循RESTful设计原则,可以实现松耦合、可扩展和易于维护的分布式系统和Web服务

3.RESTful API

        RESTful API(Representational State Transfer API)是一种设计和实现符合 REST 架构风格的 Web 服务接口。它基于 HTTP 协议,使用 HTTP 方法(GET、POST、PUT、DELETE)对资源进行操作,并通过 URI(统一资源标识符)来定位和标识资源。

  • GET:从Server取得资源或是状态。
  • POST:将资源发布到Server,例如新增一笔资料。
  • PUT:在Server上新增或修改指定资源。
  • PATCH:更新Server上现有资源的一部分。
  • DELETE:删除Server的资源。

3.1 RESTful 三要素

3.1.1 资源

        资源是API的核心概念,它代表着系统中的实体或数据。资源可以是具体的对象(例如用户、产品)或是集合(例如用户列表、产品目录)。在RESTful API中,每个资源都有一个唯一的标识符(通常使用URL或URI表示),通过该标识符可以对资源进行操作。

@GetMapping("/computePark/{id}")

axios.get("/money/computePark/"+this.order.msid).then(res=>{})

3.1.2 方法

        GET、POST、PUT、DELETE

3.1.3 表示

        表示指的是资源在请求和响应中的表示形式。对于客户端发送的请求,它可以包含请求参数和请求体,以及请求头部信息。对于服务器返回的响应,它包含了资源的表示形式,通常以JSON、XML或其他格式表示。表示形式的选择应该根据API的设计和客户端的需求来确定。

3.2 RESTful API的设计原则

3.2.1 统一接口(Uniform Interface)

        RESTful API具有统一的接口,使用HTTP方法(如GET、POST、PUT、DELETE)和明确定义的请求和响应数据结构的组合来操作资源。通过统一接口,让使用者了解API需要哪些资料,以及返回那些资料,客户端和服务器可以相互通信

3.2.2 无状态(Stateless)

        服务器和客户端之间的通信是无状态的,即服务器不会在请求之间保留任何连接状态或上下文信息。每个请求都是独立的,服务器不会依赖先前的请求。

3.2.3 可缓存性*(Cacheability)

        RESTful API可以通过缓存来提高服务器的响应时间。服务器可以在响应中设置适当的缓存标头,以指示客户端对响应进行缓存,从而减少对服务器的后续请求。

3.2.4 客户端-服务器分离*(Client-Server Separation)

        客户端和服务器之间的关注点分离。服务器负责提供资源和业务逻辑,客户端负责处理用户界面和用户交互。这样可以实现系统的分层和松耦合。

3.2.5 分层系统*(Layered System)

        服务器可以将请求转发到其他API,客户端可以连接到其他经过授权的API,同时仍然接收来自服务器的响应。这种分层的结构提供了可扩展性和灵活性。

3.2.6 按需编码*(Code on Demand)

        服务器可以将可执行代码传输到客户端,以临时扩展或自定义客户端功能。这使得客户端可以动态地获取特定的代码段,以满足其特定需求。

4.举例说明

controller层代码:

@RestController
@RequestMapping("/products")
public class ProductController {
  
  @Autowired
  private ProductService productService;
  
  @GetMapping("/getProductById/{id}")
  public ResponseEntity<Product> getProductById(@PathVariable("id") Long id) {
    return null;
  }
  
  @PostMapping("/getProductById")
  public ResponseEntity<Product> createProduct(@RequestBody Product product) {
    return null;
  }
  
  @PutMapping("/getProductById/{id}")
  public ResponseEntity<Product> updateProduct(@PathVariable("id") Long id, @RequestBody Product product) {

  }
  
  @DeleteMapping("/getProductById/{id}")
  public ResponseEntity<Void> deleteProduct(@PathVariable("id") Long id) {
    return null;
  }
}
  • GET请求 /products/{id}:获取指定id的产品信息。
  • POST请求 /products/:创建一个新的产品。
  • PUT请求 /products/{id}:更新指定id的产品信息。
  • DELETE请求 /products/{id}:删除指定id的产品。

前端对应代码:

// GET请求 - 获取产品信息
function getProductById(id) {
  axios.get(`/products/getProductById/${id}`).then(res=>{内容省略})
}

// POST请求 - 创建新产品
function createProduct(product) {
  axios.post('/products/createProduct/', product).then(res=>{内容省略})
}

// PUT请求 - 更新产品信息
function updateProduct(id, product) {
  axios.put(`/products/updateProduct/${id}`, product).then(res=>{内容省略})
}

// DELETE请求 - 删除产品
function deleteProduct(id) {
  axios.delete(`/products/deleteProduct/`,this.id).then(res=>{内容省略})
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值