Solon2 接口开发: 熟悉 Gateway
Gateway 是 Solon 框架的特殊控制器(也是Handler 的一个实现类)。它通过注册收集之后,在局部范围内提供:二级路由、拦截、过滤、融断、异常处理等功能,并统一到网关处理。
另一个作用:可以为同一批接口安排多个网关,进而定制不同的协议效果。
1、定义2个组件
API_0
@Component(tag = "api")
public class API_0 {
@Mapping
public Result exec() {
return Result.failure(404, "Interface does not exist");
}
}
API_hello_world
@Component(tag = "api")
public class API_hello_world {
@Mapping("hello")
public Result exec(String name) {
return Result.succeed("Hello " + name);
}
}
这2个组件,很特别???有@Mapping,看起来像控制器类。但它确用@Component注解,而且还有tag属性。
其实它们跟平常开发的控制器类是一样的。改用 @Component ,是为了不被根路由器扫描进去。而增加tag属性,是为了方便 Gateway 做局部扫描。
@Mapping 值为空时,会被 Gateway 做为默认接口对待。即找不到别的接口时,就用它。
2、定义 Gateway
ApiGateway
@Mapping("/api/**")
@Component
public class ApiGateway extends Gateway {
@Override
protected void register() {
addBeans(bw -> "api".equals(bw.tag()));
}
}
最简单的 Gateway 只需要完成注册即可,输出效果跟普通的控制器差不多。启动服务后,我们就可以访问 http://localhost:8080/api/hello。
3、在 Gateway 上做点什么
加一个前置处理,做令牌验证。再重写渲染,对未处理异常做控制。
@Mapping("/api/**")
@Component
public class ApiGateway extends Gateway {
@Override
protected void register() {
//添加个前置处理
before(c -> {
//检测有没有token(用 param 替代;方便手浏览器测试)
if (c.param("t") == null) {
//如果没有令牌;直接设定结果
c.result = Result.failure(403, "Missing authentication information");
//设为已处理(主接口就不会进去了)
c.setHandled(true);
}
});
//添加Bean
addBeans(bw -> "api".equals(bw.tag()));
}
//重写染处理异常
@Override
public void render(Object obj, Context c) throws Throwable {
if (obj instanceof Throwable) {
c.render(Result.failure("unknown error"));
} else {
c.render(obj);
}
}
}
Solon2 接口开发: 熟悉 Gateway的更多相关文章
- Solon2 接口开发: 强化 Gateway 模式
一般可以从这几方面对 Gateway 模式进行强化: 定制异常状态码 定制基类 将一些处理独立封装成类 接口只返回数据部份,异常状态用抛 强化之后,具体的网关即简单,又功能强大.同时会对团队开发形成一 ...
- Solon2 接口开发: 分布式 Api Gateway 开发预览
建议使用专业的分布式网关产品,比如: nginx apisix [推荐] k8s ingress controller 等... 对 Solon 来讲,只有 Gateway:它调用本地接口时,则为本地 ...
- 支付宝WAP支付接口开发(Node/Coffee语言)
此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...
- 支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言
前 言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...
- 支付宝(alipay)即时到账收款接口开发中的那些事儿
不会做,看看也可以会,要做好就还是需要多学习 国庆回来就一直没状态,看完<银河护卫队>,印象最深的竟然是只有两句台词的呆萌groot,昨天才休息一天,大耍大吃,今天还是把昨天的知识学习一下 ...
- 【转】支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- python的flex服务端数据接口开发
python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted ...
- 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《Python Web 接口开发与测试》---即将出版
为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...
随机推荐
- 从GPT定制到Turbo升级再到Assistants API,未来AI世界,你准备好了吗?
引言 在OpenAI DevDay发布会上,OpenAI再次震撼整个人工智能行业,为AI领域带来了重大的更新.CEO Sam Altman宣布推出了定制版本的ChatGPT,这意味着用户现在可以根据自 ...
- typeid关键词
typeid是c++的关键字,typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义) ISO C++标准并没有确切定义type_info,它的确 ...
- uni-app小程序项目发布流程
uni-app小程序项目发布流程开发工具:HbuilderX编辑器.微信小程序开发工具1.小程序开发工具就可以点击发行版本了 2.登录开发者平台配置域名白名单 在开发者设置里完成服务器域名配置(域名白 ...
- Linux机器在命令行操作时开启/关闭代理
命令行操作时,如果需要连接通过代理才能访问的地址,可以通过配置当前shell的配置文件来手动开启/关闭代理 注意:代理只对当前用户当前shell生效,切换用户或者重新连接需要重新开启代理 修改当前用户 ...
- 从零开始使用 ROS CDK 搭建云上解决方案
作者: 金湛 前言 资源编排服务ROS(Resource Orchestration Service)是阿里云提供的一项简化云计算资源管理的服务.开发者和管理员可以编写模板,在模板中定义所需的阿里云资 ...
- Android学习day01【搭建Android Studio】
是Google开发的操作系统 Android开发是移动应用开发的表现形式之一 还有很多的开发形式,就不一一列举了 完整项目精简的开发流程 开发工具 Android studio(强烈建议) Andro ...
- SpringBoot整合数据可视化大屏使用
整合数据可视化大屏是现代化应用程序中的一个重要组成部分,它可以帮助我们更直观地展示和理解大量的数据. 在Spring Boot框架中,我们可以使用一些优秀的前端数据可视化库来实现数据可视化大屏,例如E ...
- 如何在Web应用中添加一个JavaScript Excel查看器
前言 在现代的Web应用开发中,Excel文件的处理和展示是一项常见的需求.为了提供更好的用户体验和功能,经常需要在Web应用中添加一个JavaScript Excel查看器,小编今天将为大家展示如何 ...
- Linux笔记02: Linux环境_2.1虚拟机软件VMware
2.1 虚拟机软件VMware 如果直接在计算机上安装多个操作系统,同一个时刻只能运行一个操作系统,切换系统需重启计算机.VMware可以使用户在一台计算机上同时运行多个操作系统(如Windows.L ...
- .NET企业应用安全开发动向-概览
太长不读版:试图从安全的全局视角触发,探讨安全的重要性,讨论如何识别安全问题的方法,介绍.NET提供的与安全相关的基础设施,以及一些与时俱进的安全问题,为读者建立体系化的安全思考框架. 引言 关于&q ...