企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、概述 这里描述服务的消费方,如何接入本平台的微服务接口; 这里将提供一个简单的例子,来说明如何编写接入代码; 除了常规逻辑编程之外,考虑到异构系统的特点,我们给出了一个客户端编程的编程规范,建议客户端编程遵循; >[danger] > 1、接口服务自身的设计与开发是基于BASE理论。因此,也强烈建议代码编写者遵循该理论;程序开发者必需考虑接口服务器因机房网络故障、域名解析故障、例行检修、程序升级、依赖服务中断等因素导致当前服务不可用。因此,业务逻辑的编写必须严格的核对响应码,并且必须编写消费接口服务的异常分支逻辑; > 2、只有responseCode为1,才说明您的api执行成功,其他的任何数字都是失败的,只是失败的原因不同; ## 二、例程 为了方便客户端编程,这里提供了一个完整的客户端调用api示范,基于java代码编写,您可以直接复制过去,修改参数运行; 签名算法: ``` private static String getParamStringByMap(Map<String, String> paramMap) { TreeMap map = new TreeMap(); for (Map.Entry<String, String> me : paramMap.entrySet()) { if (!me.getKey().equalsIgnoreCase("sign")) { map.put(me.getKey(), me.getValue()); } } return getParamStringByMap(map); } private static String getParamStringByMap(TreeMap<String, String> paramMap) { StringBuilder paramString = new StringBuilder(); for (Map.Entry<String, String> me : paramMap.entrySet()) { paramString.append(me.getKey()).append("=").append(me.getValue()).append("&"); } return paramString.toString().substring(0, paramString.toString().length() - 1); } private static String encodeHex(byte[] bytes) { StringBuffer buf = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { if (((int) bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString((int) bytes[i] & 0xff, 16)); } return buf.toString(); } public static synchronized String encryptByMD5(String data) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(data.getBytes()); return encodeHex(digest.digest()); } catch (NoSuchAlgorithmException nsae) { nsae.printStackTrace(); return null; } } public static String generateSign(Map<String, String> parameterMaps, String appSecret) { String para = getParamStringByMap(parameterMaps); return encryptByMD5(new StringBuilder(encryptByMD5(para)).append(appSecret).toString()); } ``` 调用: ``` static Logger logger = LoggerFactory.getLogger(Sample.class); public static void main(String[] args) { Log4jV2Util.initLog4jV2TestEnv(); String serviceUrl = "http://ip:port/oauth/service/test/validation"; String appId = "s123"; String appSecret = "axbdedgefger"; Map<String, String> paramap = new HashMap(); paramap.put("appId", appId); paramap.put("timeStamp", String.valueOf(new Date().getTime())); paramap.put("sign", Sign.generateSign(paramap, appSecret)); //签名参数放到最后计算再传入 String result = null; try { result = HttpPostUtil.executeAction(serviceUrl, paramap, null); } catch (Exception e) { e.printStackTrace(); } logger.warn(result); } ```