在参数说明的上方,还提供了调用说明以及功能说明等API的基本服务信息,供用户浏览查看。
其中,接口地址为该API接口的URL地址。公共请求参数PAGENUM表示接口调用后返回的连续数据样本数量,参数START代表返回的第一个数据样本的索引。
点击在线接口调用按钮,进入在线接口调用页面。在上面的接口参数文本框中输入公共请求参数,点击接口调用按钮,用户可在下方的接口参数窗口中得到JSON格式的返回参数。如下图:
在该示例的返回内容中,冒号前面的内容为字段,并按照层级进行了缩进。
用户返回接口的描述界面,在下方参数说明中这时就会出现该接口返回参数。该示例接口的请求参数与返回参数详细信息如下图所示:
公共数据开放网站服务调用支持三种方式:
用户点击个人中心在我的令牌选项中可以查看令牌,令牌分为签名认证令牌、简单认证令牌。
网站支持重新生成令牌,以备在令牌泄露后禁用原有令牌,并重新生成新的令牌。
其中签名认证令牌由ClientID和ClientSecret两部分组成:
我的令牌页面如下图所示:
用户要查看ClientSecret需点击后面的查看链接,系统会向账号绑定的手机号发送验证码,在下方出现的文本框中输入验证码后,即可查看ClientSecret的具体值。
调用过程
返回该接口的描述页面,在调用说明一栏中,找到接口地址一行中的URL地址,并在使用时在URL地址后用''和'&'拼接请求参数名与对应的参数值。用户按格式调用接口的URL地址,才能获取相应内容。
接口调用最常见的请求方式为GET和POST两种方式,即读接口和写接口,通过这两种方式,实现对数据的增删查改,其中增删改本质都是写的动作。GET请求会将数据放在URL地址中,POST请求会将数据放在消息体Body中。
实际的代码调用接口服务必须遵循以下HTTP协议的传输方式的格式:
调用签名的生成方式为使用HmacSHA256算法对X-Client-Id+X-Timestamp+X-Nonce组合字符计算后,再经过Base64编码得到的加密字符串,密钥为签名认证令牌密钥ClientSecret。
根据以上要求,在调用请求发送前需对请求参数执行如下的代码片段来实现API网关的签名认证:
```javaimportorg.apache.commons.codec.binary.Base64;
importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;
importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;importjava.time.Instant;importjava.util.UUID;
StringserviceUrl="SERVICE_URL";//具体服务的调用地址inttimeout=500;//服务调用延时StringclientId="YOUR_CLIENT_ID";//替换为用户的client_idStringtimestamp=String.valueOf(Instant.now().toEpochMilli());Stringnonce=UUID.randomUUID().toString();Stringsecret="YOUR_CLIENT_SECRET";//替换为用户的client_secretStringstringToSign=clientId+timestramp+nonce;
Stringsign=null;try{MachmacSha256=Mac.getInstance("HmacSHA256");byte[]keyBytes=secret.getBytes("UTF-8");hmacSha256.init(newSecretKeySpec(keyBytes,0,keyBytes.length,"HmacSHA256"));sign=Base64.encodeBase64String(hmacSha256.doFinal(stringToSign.getBytes("UTF-8")));}catch(NoSuchAlgorithmExceptione){}catch(UnsupportedEncodingExceptione){}catch(InvalidKeyExceptione){}
HttpPostrequestMethod=newHttpPost();//根据服务的具体请求方法构造合适的请求方法对象,此处以POST方法为例说明requestMethod.setURI(serviceUrl);RequestConfigconfig=RequestConfig.custom().setConnectTimeout(timeout).build();requestMethod.setConfig(config);
requestMethod.addHeader("X-Client-Id",clientId);requestMethod.addHeader("X-Timestamp",timestamp);requestMethod.addHeader("X-Nonce",nonce);requestMethod.addHeader("X-Signature",sign);
//处理返回结果```
```javascriptvarurl="";varclientId="";varclientSecret="";
vartimestamp=newDate().getTime();varnonce=createUuid();
vartextToSign=appKey+timestamp+nonce;varhash=CryptoJS.HmacSHA256(textToSign,clientSecret);varsignature=hash.toString(CryptoJS.enc.Base64);
$.ajax({url:url,type:"POST",beforeSend:function(request){request.setRequestHeader("X-Client-Id",clientId);request.setRequestHeader("X-Timestamp",timestamp);request.setRequestHeader("X-Nonce",nonce);request.setRequestHeader("X-Signature",signature);},success:function(result){console.log(result);}});
functioncreateUuid(){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function?{varr=Math.random()*16|0,v=c=='x'r:(r&0x3|0x8);returnv.toString(16);});}```
调用说明
以上调用接口的过程信息用户可以在该接口的描述页面中的调用说明一栏中查看,如下图:
用户点击个人中心后,在我的令牌选项中可以查看简单认证令牌,如下图:
如页面中提示所说,简单认证令牌通过明文传递,安全性较弱,只适合服务在线调用,不建议在开发的应用中使用。用户点击AppKey的查看链接后,即可显示简单认证令牌的具体值。基于简单认证的接口调用的URL地址格式以及调用方式与签名认证调用接口的一致,但在代码调用时不需要实现API网关的签名认证。
StringserviceUrl="SERVICE_URL";//具体服务的调用地址inttimeout=500;//服务调用延时StringappKey="YOURAPPKEY";//替换为用户的AppKey
requestMethod.addHeader("AppKey",appKey);
用户点击个人中心后,在我的令牌选项中可以查看在老平台申请的所有令牌,如果没有则表示不存在这样的令牌。原有的服务调用令牌如下图所示:
如页面中的提示所说,平台在升级后,为确保原来的服务申请可以正常使用,保留了原来的服务调用令牌。平台将逐步禁用该令牌,并替换为最新的服务令牌。