一般可以从这几方面对 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 模式的更多相关文章

  1. .net之微信企业号开发(三) 回调模式的接口开发

    一.前言 微信企业号应用中,有两种模式,一种是普通模式,这种模式只能进行简单网页链接,以及发送固定的消息.为了可以让企业号的用户更好的与应用交互,微信提供了回调模式,这种回调模式的可以将用户发送给微信 ...

  2. 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  3. 微信JS-SDK之图像接口开发详解

    由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(http://www.cnblogs.com/it-cen/p/453 ...

  4. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...

  5. 微信公众平台消息接口开发(24)图片识别之人脸识别API

    微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 图片识别 人脸识别 API 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archi ...

  6. 微信公众平台消息接口开发(2)你的服务器没有正确响应Token验证的解决方法

    你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 本系统 ...

  7. python语言(六)mock接口开发、发邮件、写日志、新Excel操作

    一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...

  8. 基于Python的WEB接口开发与自动化测试 pdf(内含书签)

    基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...

  9. Python(七) —— mock接口开发

    mock接口开发 接口开发有很多框架,诸如 Django,flask,相比较而言,flask 是轻量级web开发框架,用来开发 mock 接口的不二之选.那你可能会问,什么叫 mock 接口呢?moc ...

  10. python的flex服务端数据接口开发

    python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted ...

随机推荐

  1. ULR1 B. 【ULR #1】光伏元件

    一个n∗nn∗n的0101矩阵ai,jai,j,有些位置可以修改,代价为ci,jci,j.要求进行一些修改之后满足:设clicli为第ii行的11的个数,cricri为第ii列的11的个数,要求cli ...

  2. python中的字典数据读取

    ①字典中嵌套字典 res1={'content': {'age': '47岁', 'ageOne': 47, 'ageOneUnit': '1', 'ageTwo': '8', 'ageTwoUnit ...

  3. echarts 折柱表混合图(折线,柱状图,表格)

    效果图如下: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  4. IDEA-mybatis逆向工程使用

    首先我们需要安装mybatis逆向工程插件mybatis Generator: 然后在pom.xml文件中添加逆向工程插件: <!--mybatis逆向工程插件--> <plugin ...

  5. mysql 的小问题

    首先按下win+R 执行 services.msc 进入服务,查找到MySQL,点击停止服务,然后在控制台cmd进入本地的MySQL文件夹,我的文件名是mysql-8.0.26-winx64,进入后执 ...

  6. cobbler安装CentOS-8系统

    cobbler安装CentOS-8系统 cobbler 1. cobbler简介 2. cobbler服务端部署 3. 客户端安装 4. 定制安装 1. cobbler简介 Cobbler是一个Lin ...

  7. Mybatis-plus的自定义分页搭配sql Server数据库使用

    原文出处:mybatisplus查询分页并且排序报错解决方法,适用于自定义sql和sqlserver_十七梦的博客-CSDN博客 一开始使用过的是官方文档来写分页,结果出现了如果不在最后添加ORDER ...

  8. StarUML画用例图

    好久没画图在StarUML里都找不到useCase了,记下来不然又忘了 右击Untitled->Add Diagram->UseCase Diagram,然后左边就有UseCase了就可以 ...

  9. 解决office提示您的许可证不是正版的问题

    https://blog.csdn.net/d_pcb66/article/details/125339872?spm=1001.2101.3001.6650.4&utm_medium=dis ...

  10. PageHeplper使用

    1.引入POM 1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId ...