当前位置: 首页 > news >正文

从阿里SDK学习请求-响应模式

请求响应模式

在阿里SDK中,很多调用接口都使用类型安全的请求-响应模式,代码。废话不多说,Show Code


import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import lombok.*;
import lombok.extern.slf4j.Slf4j;import java.lang.reflect.InvocationTargetException;
public class RequestResponsePattern {@Datastatic abstract class Response{private boolean success;private Object error;}@Datastatic abstract class Request<T extends Response> {private String url;public abstract Class<T> getResponseClass();}static class Client{private static final String BASE_URL = "https://www.baidu.com/";public <T extends Response> T execute(Request<T> request) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class<T> responseClass = request.getResponseClass();try (HttpResponse response = HttpRequest.get(BASE_URL.concat(request.getUrl())).execute();) {T bean = JSONUtil.toBean(response.body(), responseClass);bean.setSuccess(true);return bean;} catch (Exception e) {T t = responseClass.getDeclaredConstructor().newInstance();t.setError(e);t.setSuccess(false);return t;}}}@EqualsAndHashCode(callSuper = true)@Datastatic class TestResponse extends Response{private String message;}@EqualsAndHashCode(callSuper = true)@AllArgsConstructor@Data@NoArgsConstructorstatic class TestRequest extends Request<TestResponse>{private String name;@Overridepublic Class<TestResponse> getResponseClass() {return TestResponse.class;}}/*** test demo*/public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {Client client = new Client();TestRequest testRequest = new TestRequest();testRequest.setUrl("get");//返回指定响应类TestResponse execute = client.execute(testRequest);System.out.println(execute.getError());}
}

以上比较粗糙,Request类没有那么灵活,感兴趣的可以拿自己的业务设计一下

场景 & 为什么

每个API请求对象在创建时,就明确地知道了它预期会接收到哪种类型的响应数据结构。通常与外部API交互时使用

类型安全: 通过指定 Response 类,编译器可以在编译期检查类型是否匹配,避免运行时类型转换错误。
开发者可以直接操作强类型的对象,而无需手动解析 JSON 或处理原始数据。

代码可读性:
每个 API 有明确的 Request 和 Response 类,命名通常与 API 功能对应,开发者可以快速理解 API 的用途。
相比直接操作 Map 或 JSON 字符串,这种写法更直观,符合面向对象的设计理念。

封装性:
SDK 将底层的 HTTP 请求、签名生成、JSON 解析等复杂逻辑封装在内部,开发者只需关注业务参数和返回数据的处理。
Request 和 Response 类可以包含校验逻辑(例如必填参数检查),提高代码健壮性。

易于维护和扩展:
每个 API 的 Request 和 Response 类是独立的,新增或修改 API 时,只需添加新的类,不会影响现有代码。
如果 API 返回的数据结构发生变化,只需更新对应的 Response 类即可。

错误处理统一:
Response 类通常包含通用的错误字段(例如 error_code、error_msg),便于开发者统一处理异常情况。

http://www.xdnf.cn/news/439111.html

相关文章:

  • 【Python】抽象基类ABC
  • [论文阅读]Formalizing and Benchmarking Prompt Injection Attacks and Defenses
  • 构建现代化WPF应用:数据驱动开发与高级特性解析
  • LeetCode 热题 100 230. 二叉搜索树中第 K 小的元素
  • 多模态论文笔记——NaViT
  • 2005-2022年各省绿色信贷水平测算数据(含原始数据+计算过程+计算结果)
  • 《AI大模型应知应会100篇》第61篇:FastAPI搭建大模型API服务
  • Vue3 区分开发环境与生产环境
  • PostgreSQL常用DML操作的锁类型归纳
  • 搜索二维矩阵 II
  • 【达梦数据库】超出全局hash join空间问题处理
  • 生活实用小工具-手机号归属地查询
  • PaddleNLP框架训练模型:使用SwanLab教程
  • 养生:拥抱健康生活的实用之道
  • URP相机如何将场景渲染定帧模糊绘制
  • PyTorch中mean(dim=1)的深度解析
  • P2168 NOI2015 荷马史诗
  • Kubernetes排错(十七) :kubelet日志报device or resource busy
  • 【机器人】复现 SG-Nav 具身导航 | 零样本对象导航的 在线3D场景图提示
  • ​​开放传神创始人论道AI未来|“广发证券—国信中数人工智能赛道专家交流论坛“落幕
  • MySQL——九、锁
  • 【Linux】Ext系列文件系统
  • 卷积神经网络全连接层详解:特征汇总、FCN替代与性能影响分析
  • SRM电子采购管理系统:Java+Vue,集成供应商管理,实现采购流程数字化与协同优化
  • PyQt5完整指南:从入门到实践
  • 刘强东 “猪猪侠” 营销:重构创始人IP的符号革命|创客匠人热点评述
  • 如何创建自动工作流程拆分Google Drive中的PDF文件
  • iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
  • 深度学习基础知识
  • RK3588 串行解串板,支持8路GMSL相机