HTTP DELETE 请求是一种 HTTP 方法,用于请求服务器删除指定的资源。它是构建在 HTTP 协议之上的操作命令,通过网络发送到服务器,告知服务器客户端希望删除由请求 URL(统一资源定位符)标识的资源。
通常情况下,DELETE 请求不需要请求体,因为删除操作通常是基于资源的标识符(如 URL 中的资源路径)来执行的。但在一些复杂的场景下,可能会有请求体。例如,在删除一个具有关联数据的资源时,请求体可能包含关于如何处理关联数据的指令。比如,要删除一个文章资源,请求体可能包含一个字段,指示服务器同时删除与该文章相关的评论。
执行 HTTP DELETE 操作,可能出现如下状态码:
200 OK:如果服务器成功删除了请求的资源,并且有响应内容返回(例如返回一个包含删除结果详细信息的消息),会返回这个状态码。例如,服务器删除了一个用户资源后,返回一个 JSON 格式的响应 {"message": "User 123 deleted successfully"},状态码为 200。
204 No Content:当服务器成功删除资源且没有内容需要返回给客户端时,返回该状态码。它表示请求已经被成功处理,但响应不包含实体的主体内容。
401 Unauthorized:如果请求缺少有效的认证信息,或者认证信息无效,服务器会返回这个状态码。例如,客户端没有提供正确的 Authorization 请求头,或者提供的令牌已经过期。
403 Forbidden:即使客户端提供了认证信息,但如果客户端没有足够的权限删除指定资源,服务器会返回这个状态码。比如,一个普通用户试图删除一个只有管理员权限才能删除的系统配置资源。
404 Not Found:当服务器无法找到请求中指定要删除的资源时,会返回这个状态码。例如,客户端请求删除一个不存在的用户 ID 对应的用户资源。
创建一个接口来定义对远程服务的 DELETE 请求操作。例如,假设要删除一个用户资源,接口可能如下:
@FeignClient(name = "user-service") public interface UserServiceClient { @DeleteMapping("/users/{userId}") HttpStatus deleteUser(@PathVariable("userId") Long userId); }
详细说明:
@FeignClient 注解用于指定这个接口是一个 Feign 客户端,name 属性用于指定服务名称,这里假设远程服务名称是 user-service。
@DeleteMapping 注解用于定义一个 HTTP DELETE 请求方法。这里指定了请求路径模板 /users/{userId},其中 {userId} 是一个路径变量,用于在请求时替换为实际的用户 ID。
💥注意:deleteUser() 方法是一个 Java 方法,它的返回值类型是 HttpStatus(假设我们希望获取删除操作后的 HTTP 状态码),方法参数 userId 通过 @PathVariable 注解与请求路径中的变量相对应,这个方法在被调用时,会自动发起一个 DELETE 请求到指定的远程服务路径。
下面发起 HTTP DELETE 请求调用远程服务器方法,删除指定 ID 的用户。
服务端代码:
// DELETE 请求,删除用户 @DeleteMapping("/deleteUser") public CommonReturn<String> deleteUser(@RequestParam("id") Long id) { log.info("deleteUser() id={}", id); USERS.removeIf(user -> user.getId().equals(id)); return CommonReturn.success("删除成功").ext(appName, appPort); }
定义 Feign 客户端:
@DeleteMapping("/user/deleteUser") CommonReturn<String> deleteUser(@RequestParam("id") Long id);
调用 Feign 客户端:
@GetMapping("/deleteUser") public CommonReturn<String> deleteUser(@RequestParam("id") Long id) { // 调用 Feign 客户端方法 return userFeign.deleteUser(id); }
输出结果: