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 ...
随机推荐
- [Jetson Nano]SSH连接Jetson Nano时出现Xlib: extension NV-GLX missing on display localhost:10.0
解决SSH连接Jetson Nano时遇到的"Xlib: extension "NV-GLX" missing on display 'localhost:10.0'&q ...
- Java核心知识体系6:集合框架详解
Java核心知识体系1:泛型机制详解 Java核心知识体系2:注解机制详解 Java核心知识体系3:异常机制详解 Java核心知识体系4:AOP原理和切面应用 Java核心知识体系5:反射机制详解 1 ...
- 七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境
前言 SQLite的一个重要的特性是零配置的.无需服务器,这意味着不需要复杂的安装或管理.它跟微软的Access差不多,只是一个.db格式的文件.但是与Access不同的是,它不需要安装任何软件,非常 ...
- MIGO配置过账后自动打印
1.业务需求 本文档介绍,当MIGO发货过账时,自动打印自开发表格. 2.打印程序 复制标准配置中调用的程序和子例程,到新的程序(路径可参考下文系统配置) 只用复制子例程entry_wa01即可,参考 ...
- 如何使用JavaScript 将数据网格绑定到 GraphQL 服务
前言 作为一名前端开发人员,GraphQL对于我们来说是令人难以置信的好用.它可以用来简化数据访问,这让我们的工作变得更加容易. 什么是 GraphQL?它是一个抽象层,位于任意数量的数据源之上,并为 ...
- i-MES生产制造管理系统-总览
前言 说起 MES 就不得不说 ERP,但是 ERP 大家基本上都知道,MES 就不一定了,常见的 ERP 系统包括 SAP.金蝶.用友等,ERP的流程相对来说也比较统一:MES就不同了,基本上熟悉业 ...
- 小程序引入外部icon图标
一.使用阿里巴巴图标库引入字体图标 阿里巴巴图标库:https://www.iconfont.cn/manage/index 选择合适的图标 收藏,在收藏中查看 选择:自己的项目 选择:第二个{fon ...
- 大语言模型底层架构丨带你认识Transformer
本文分享自华为云社区<大语言模型底层架构你了解多少?大语言模型底层架构之一Transfomer的介绍和python代码实现>,作者: 码上开花_Lancer . 语言模型目标是建模自然语言 ...
- netty整合websocket(完美教程)
websocket的介绍: WebSocket是一种在网络通信中的协议,它是独立于HTTP协议的.该协议基于TCP/IP协议,可以提供双向通讯并保有状态.这意味着客户端和服务器可以进行实时响应,并且这 ...
- Redis工具类及Redis序列化
导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...