Solon2 接口开发: 强化 Gateway 模式
一般可以从这几方面对 Gateway 模式进行强化:
- 定制异常状态码
- 定制基类
- 将一些处理独立封装成类
- 接口只返回数据部份,异常状态用抛
强化之后,具体的网关即简单,又功能强大。同时会对团队开发形成一定的风格和约束。
API_0(异常状态用抛)
@Component(tag = "api")
public class API_0 {
@Mapping
public void exec() {
throw ApiCodes.CODE_4001011;
}
}
API_hello_world(接口只返回数据部份)
@Component(tag = "api")
public class API_hello_world {
@Mapping("hello")
public String exec(String name) {
return "Hello " + name;
}
}
ApiGateway(将一些处理独立封装成类,简化网关)
@Mapping("/api/**")
@Component
public class ApiGateway extends ApiGatewayBase {
@Override
protected void register() {
//添加个前置处理
before(new TokenHandler());
//添加Bean
addBeans(bw -> "api".equals(bw.tag()));
}
}
1、定制网关基类
/**
* 自定义一个网关基类,对结果做了处理的转换处理
*/
public abstract class ApiGatewayBase extends Gateway {
@Override
public void render(Object obj, Context c) throws Throwable {
if (c.getRendered()) {
return;
}
c.setRendered(true);
//
// 有可能根本没数据过来
//
if (obj instanceof ModelAndView) {
//如果有模板,则直接渲染
//
c.result = obj;
} else {
//如果没有按Result tyle 渲染
//
Result result = null;
if (obj instanceof ApiCode) {
//处理标准的状态码
ApiCode apiCode = (ApiCode) obj;
result = Result.failure(apiCode.getCode(), apiCode.getDescription());
} else if (obj instanceof Throwable) {
//处理未知异常
ApiCode apiCode = ApiCodes.CODE_400;
result = Result.failure(apiCode.getCode(), apiCode.getDescription());
} else if (obj instanceof ONode) {
//处理ONode数据(为兼容旧的)
result = Result.succeed(obj);
} else if (obj instanceof Result) {
//处理Result结构
result = (Result) obj;
} else {
//处理java bean数据(为扩展新的)
result = Result.succeed(obj);
}
c.result = result;
}
//如果想对输出时间点做控制,可以不在这里渲染(由后置处理进行渲染)
c.render(c.result);
}
}
2、对比演进参考:
https://gitee.com/noear/solon_api_demo
3、其它演示参考:
https://gitee.com/noear/solon-examples/tree/main/6.Solon-Api/demo6013-step3
Solon2 接口开发: 强化 Gateway 模式的更多相关文章
- .net之微信企业号开发(三) 回调模式的接口开发
一.前言 微信企业号应用中,有两种模式,一种是普通模式,这种模式只能进行简单网页链接,以及发送固定的消息.为了可以让企业号的用户更好的与应用交互,微信提供了回调模式,这种回调模式的可以将用户发送给微信 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 微信JS-SDK之图像接口开发详解
由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(http://www.cnblogs.com/it-cen/p/453 ...
- 示例浅谈PHP与手机APP开发,即API接口开发
示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...
- 微信公众平台消息接口开发(24)图片识别之人脸识别API
微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 图片识别 人脸识别 API 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archi ...
- 微信公众平台消息接口开发(2)你的服务器没有正确响应Token验证的解决方法
你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 本系统 ...
- python语言(六)mock接口开发、发邮件、写日志、新Excel操作
一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...
- 基于Python的WEB接口开发与自动化测试 pdf(内含书签)
基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...
- Python(七) —— mock接口开发
mock接口开发 接口开发有很多框架,诸如 Django,flask,相比较而言,flask 是轻量级web开发框架,用来开发 mock 接口的不二之选.那你可能会问,什么叫 mock 接口呢?moc ...
- python的flex服务端数据接口开发
python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted ...
随机推荐
- win10任务栏图标设置“不合并标签但隐藏文字”
设置如图不分组即可,下载链接 https://files-cdn.cnblogs.com/files/slyuan/7tt_setup.rar
- 快学起来!python入门自学必看
记得刚开始学python的时候,各种买书各种找资料,最后发现资料找了一大堆,但都是东一块西一块,内容不全且不系统,无意间发现这个宝藏网站,真的是太全了,当作工具书,时不时的翻翻,总会发现一些惊喜.0基 ...
- IE8兼容的零零碎碎
css部分 1 nth-of-type选择器 2 span:nth-of-type(1) 3 /*IE8兼容写法*/ 4 span:first-child /*选中第一个*/ 5 span:first ...
- js- throw
// Create an object type UserExceptionfunction UserException (message){ this.message=message; this.n ...
- JS计算加减乘除出现多位小数的解决方法
function add(arg1, arg2){ let decima1, decima2, differ, m; try { decima1 = arg1.toString().split('.' ...
- iview的表格 render
view的表格 render 先看一下效果图 效果题 代码如下 render render:(h,params)=>{} //h指dom对象,params指当前每一行数据(param ...
- 实验二 实验二 Linux系统简单文件操作命令
项目 内容 这个作业属于哪个课程 <班级课程的主页链接> 这个作业的要求在哪里 <作业要求链接接地址> 学号-姓名 15043109吴小怀 作业学习目标 学习在Linux系统终 ...
- hdu:最大点权(强连通分量kosaraju)
Problem Description给定一个有向图,每个点ii有点权a_iai,请对于每个点ii,找到ii能到达的点中点权的最大值(包括ii点). Input第一行包含一个正整数T(1\leq ...
- 网络游戏同步法则 -- skywind
转载出处:http://www.skywind.me/blog/archives/112 网路的硬件也有限,而人的创造也无限,在公网平均130ms的Latency下,是不存在"完全的&quo ...
- Android 自定义SeekBar (一)
一.前言 巩固自定义view基础用,本次尝试构建一个拖动条组件.代码参考于 https://github.com/woxingxiao/BubbleSeekBar ,精简其中高度可重用的部分,仅保留基 ...