入门指南
葛南云API是针对企业二次开发需求封装的一套应用程序接口,可帮助您在自己的平台中获取和使用葛南云平台数据中心的部分数据。葛南云API支持AccessToken和白名单两种网关验证方式,验证接口调用是否合法。其中:AccessToken验证方式免费对外开放;白名单验证方式为付费功能,使用前请与我司技术支持人员联系沟通。
使用AccessToken
每个组织和工程都有一个AppID和AppSecret,组织的AppID和AppSecret权限等级较高,可以调用该组织下任意工程的数据,工程的AppID和AppSecret仅能调用该工程的数据。
使用AppID和AppSecret可获取一个AccessToken具体步骤请参考《获取AccessToken》,在后续数据请求的接口中,请求头字段传入AccessToken值即可通过网关验证。
登录葛南云平台,选择工程,进入【管理】,可查看和获取工程的AppID和AppSecret。
登录葛南云平台,进入【管理后台】→【机构配置】,可查看和获取组织的AppID和AppSecret。
登录葛南云平台,进入【管理后台】→【工程管理】→【工程详情】,可查看和获取某个工程的AppID和AppSecret。
使用白名单
通过白名单,用户可更方便快捷的调用接口,设置白名单后,调用数据获取接口时传入AppID即可通过网关验证。另外使用白名单可以对调用IP地址进行限制,即只有该白名单中的网站才能成功发起调用。
白名单使用前请与我司技术支持人员联系,由专业技术人员协助开通后,一个AppID最多可设置三个公网IP作为白名单。
白名单设置完成后,将AppID作为一个参数调用数据获取接口即可通过网关验证,请求参数支持放到Body和直接拼接到请求地址后两种形式。
开发环境准备(以Java为例)
Java环境下需要安装引用一些必备的依赖包,可采用通过Maven引用和通过下载引用两种方式加载。
1. 通过Maven引用
Maven项目引用以下,在配置文件中输入以下配置项即可。
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.8</version> </dependency>
2. 通过下载jar包方式引用
手动下载jar包,并且在项目中引用,这里提供3个必须引用的jar包的下载地址。
将上述相关依赖包加载进项目后,为方便开发,可封装一个公共类引用相关资源,处理http请求。
import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.config.SocketConfig; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; // HttpClient 连接池 public class HttpUtil { private static PoolingHttpClientConnectionManager cm = null; public static PoolingHttpClientConnectionManager getHttpClientConnectionManager() { if (cm == null) { cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(200); cm.setDefaultMaxPerRoute(20); SocketConfig config = SocketConfig.custom().setSoTimeout(10000).build(); cm.setDefaultSocketConfig(config); } return cm; } // 初始化连接池,可用于请求HTTP/HTTPS(信任所有证书) static { // 整个连接池最大连接数 cm = getHttpClientConnectionManager(); // 每路由最大连接数,默认值是2 cm.setMaxTotal(200); cm.setDefaultMaxPerRoute(5); } public static String postHttp( String url, Map<String, String> paramMap, Map<String, String> headerMap ) { HttpPost request = new HttpPost(url); request.addHeader("Content-Type", "application/x-www-form-urlencoded"); if (paramMap != null && paramMap.size() > 0) { List<NameValuePair> nameValuePairs = covertParams2NVPS(paramMap); try { request.setEntity( new UrlEncodedFormEntity( nameValuePairs, StandardCharsets.UTF_8.name() ) ); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } if (headerMap != null) { for (Entry<String, String> param : headerMap.entrySet()) { request.addHeader(param.getKey(), param.getValue()); } } return doHttp(request); } public static String post( String url, Map<String, String> paramMap, Map<String, String> headerMap ) { return postHttp(url, paramMap, headerMap); } public static String post(String url, Map<String, String> paramMap) { return postHttp(url, paramMap, null); } public static List<NameValuePair> covertParams2NVPS( Map<String, String> params ) { List<NameValuePair> pairs = new ArrayList<NameValuePair>(); for (Map.Entry<String, String> param : params.entrySet()) pairs.add( new BasicNameValuePair(param.getKey(), param.getValue()) ); return pairs; } private static String doHttp(HttpRequestBase request) { CloseableHttpClient httpClient = HttpClients .custom() .setConnectionManager(cm) .build(); return doRequest(httpClient, request); } private static String doRequest( CloseableHttpClient httpClient, HttpRequestBase request ) { String result = null; CloseableHttpResponse response = null; try { try { response = httpClient.execute(request); HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, StandardCharsets.UTF_8.name()); EntityUtils.consume(entity); } catch (Exception e) { e.printStackTrace(); } } finally { if (null != response) try { response.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } }