本打算上周末要在家里写这篇博客的,无奈没有控制住自己的拖延症,一直拖到周一,但下定决心,这篇文章一定要发表出来的。
在以前做的的ITOO项目中,模块之间的调用使用的EJB的session bean,貌似是EJB对分布式事务支持的比较好,但也深受其害。比如A模块想要调用B模块,需要依赖B模块的实体。在A模块中,通过JNDI到B模块的服务器查找依赖的service bean,所以A模块想要调用B模块,即需要依赖B模块的实体bean,还需要依赖B模块的service bean。这种方案造成的问题是,一旦B模块的某个bean出现问题,整个调用关系便中断。而且EJB的session bean对高可用负载均衡部署方案支持不是很好,调用关系不稳定。
对比EJB的session bean,现在我们采用spring boot微服务架构开发接口。接口开发前,由接口开发方和接口调用方定义接口规范,接口规范确定后同步到wiki。接口开发方和接口调用方根据接口规范双向开展工作。对于接口开发方,我们的接口开发方式如下:

@Path("/***")
@Produces(MediaType.APPLICATION_JSON)
public class ***Resource {@GETpublic ApiResponse list(@QueryParam("***") String ***, @DefaultValue("1") @QueryParam("***") int ***) {List<***DTO> *** = new ArrayList<>();......return ApiResponseBuilder.ok().entity(***).build();}}

list方法返回数据格式为ApiResponse实体,通过@Produces(MediaType.APPLICATION_JSON)注解,将实体转为json返回,ApiResponse实体内容如下:

public class ApiResponse {public static final Object EMPTY = "";private int status;private String message;private Object entity = EMPTY;/*** */public static class ApiResponseBuilder{private ApiResponse apiResponse;public ApiResponseBuilder(ApiResponse resp){this.apiResponse = resp;}public static ApiResponseBuilder ok(){return status(HttpServletResponse.SC_OK).msg("ok");}public static ApiResponseBuilder status(int status){ApiResponse resp = new ApiResponse();resp.setStatus(status);return new ApiResponseBuilder(resp);}public ApiResponseBuilder msg(String msg){this.apiResponse.setMessage(msg);return this;}public ApiResponseBuilder entity(Object entity){this.apiResponse.setEntity(entity);return this;}public ApiResponse build(){return apiResponse;}}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getEntity() {return entity;}public void setEntity(Object entity) {this.entity = entity;}
}

到此接口开发工作完成,然后我们运行spring boot的main方法,整个服务便跑起来了。对于接口如何支持高可用部署,可以参考高可用api接口网络部署方案
对于接口调用方,我们需要在application.properties配置下接口调用的url地址,代码级别,我们通过org.springframework.web.client.RestTemplate发起接口调用,我们的调用方式如下:

@Value(value = "${url}")
private String url;RestTemplate temp = new RestTemplate();String json = temp.getForObject(url, String.class, "***");JsonNode root = ***.getJsonNode(json);Entity entity = ***.getEntityFromJsonNode(root);

采用如上方式的接口开发与调用,开发方和调用方都依赖接口规范,这样可以很大程度的减小接口开发方和调用方的耦合关系,同时使用spring boot微服务架构,可以方便的部署接口高可用集群。
希望我的分享可以帮助到您进步。

http接口开发与调用案例相关推荐

  1. Zebra 打印机 Android 端驱动接口开发及调用案例

    文章目录 Zebra 打印机 Android 端驱动接口开发及调用 GitHub 源码 开发步骤 环境配置 Zebra SDK 资源下载 Android 开发环境搭建 新建Android项目 新建 A ...

  2. 免费电子面单Api_快递鸟接口JAVA对接调用案例

    电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印电子面单. 一. ...

  3. java 红包接口开发_java调用微信现金红包接口的心得与体会总结

    这几天看了下之前写的有关微信支付的博客,看的人还是挺多的,看了下留言不知道是因为博客写的不够细还是什么情况,大多都找我要源码,我觉得吧程序员还是需要有这么一个思考的过程,因此没直接给源码,俗话说&qu ...

  4. http接口开发及调用

    一般用http的post,尽量不用get: 开发中一般都使用org.apache.http的jar包,比较成熟,方便,易用:当然了,直接用java提供的也行 package com.XXXX.XXXX ...

  5. 金蝶osf接口开发_调用OSF接口取待办任务总数报错!急

    总部老师,好: 在调用OSF接口取待办任务总数报错 Method failed: HTTP/1.1 404 Not Found org.apache.commons.httpclient.HttpEx ...

  6. CTP接口开发案例(内附源码)

    CTP接口开发(内附源码) 提示:在看本博客之前建议先阅读上期所官方的开发文档(SimNow官网中去下载CTP接口文件),然后在SimNow官网注册模拟账号. 提示:股票CTP接口和期货CTP接口类似 ...

  7. 利用MyEclipse开发一个调用webservice接口的程序

    上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选 ...

  8. php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...

    前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...

  9. api 接口开发理论 在php中调用接口以及编写接口

    如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...

  10. python发送excel文件_Python操作Excel, 开发和调用接口,发送邮件

    接口开发: importflaskimporttoolsimportjson,redisimportrandom server= flask.Flask(__name__)#新建一个服务,把当前这个p ...

最新文章

  1. HDU 6706 huntian oy (欧拉函数 + 杜教筛)
  2. netflix_学习Netflix管理员–第1部分
  3. keepalive的作用
  4. 终于在VirtualBox中装好了Mac OS的虚拟机了!(
  5. ASP获取上月本月下月的第一天和最后一天
  6. 【kafka】控制台默认不能发送大数据 4096 4095 4129
  7. ubuntu下使用vi是方向键变乱码 退格键不能使用的解决方法
  8. java字节对齐原则_C struct 中字节对齐问题
  9. MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代
  10. RedHat 救援模式下排错
  11. NewSQL登堂入室 数据库厂商掘金行业大数据
  12. The King’s Problem 强连通
  13. python urllib 函数_python的urllib.quote()和urllib.unquote()的等效javascript函数
  14. package.json与package-lock.json
  15. 红米note3全网通 |2015112| 官方线刷包救砖包解账户锁屏幕锁
  16. 如何开好项目验收会?
  17. TCGA肿瘤数据分析专题
  18. 串口DCB定义,配置例程
  19. BlueTeam 应急
  20. win10下cuda版本升级

热门文章

  1. V-Rep机器人仿真软件模型导入部分
  2. 微信公众平台二次开发技术文档
  3. C语言猜数字游戏的设计
  4. PDF怎么编辑修改内容
  5. Dev C++中编译问题
  6. atmega328p引脚图_ATMEGA328P-AU 8位AVR微控制器
  7. Windows如何查看.db数据库文件
  8. R计算偏相关性示例教程
  9. php 字符串长度的解释
  10. 金融支付-银联卡支付系统产品介绍