NAVERクラウドプラットフォームCDN+ Purge API スタートガイド
概要
このガイドには、簡単なシナリオに従ってCDN+インスタンスを照会し、そしてPurgeを遂行します。
詳しい文書は、NAVERクラウドプラットフォームCDN+ Purge API referenceをご参照ください。
シナリオ実行
CDNインスタンス別にドメインリスト照会
CDN インスタンスドメインリスト照会APIを利用して、cdnInstanceIDとDomainID、cdn設定情報を確認します。
- アクション
- getCdnPlusInstanceList
- アクションパラメータ
- cdnInstanceNo : インスタンス番号(選択)
旧バージョン(12月Deprecated)
OAuth外部ライブラリを利用して、authorizationヘッダにauthparamsを含めて簡単にリクエストできます。
詳しい事項はNcloud OAuth認証ガイドをご参照ください。
signpost-core ライブラリ : http://code.google.com/p/oauth-signpost/wiki/GettingStarted
- consumerKey : キー管理で見られる accessKey
- consumerSecret : キー管理で見られるsecretKey
- requstUrl : API エンドポイントURL
- requestMethod : HTTP Requestメソッド
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.basic.DefaultOAuthConsumer;
public class OldSignClass {
public static void main(String args[]) throws Exception {
String consumerKey = $ConsumerAcessKey$;
String consumerSecret = $ConsumerSecretKey$;
String requestUrl = "https://api.ncloud.com/cdn/";
String requestMethod = "GET";
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "getCdnPlusInstanceList");
requestParameters.put("responseFormatType", "json");
// requestParameters.put("cdnInstanceNo", $InstanceNo$);
// InstanceNoはオプションです。
// 入力すると、該当インスタンスのみ照会し、入力しなければ、すべてのインスタンスのリストを照会します。
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
URL url = new URL(requestUrl + queryString.toString());
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod(requestMethod);
con.setConnectTimeout(500000);
con.setUseCaches(false);
con.setDefaultUseCaches(false);
consumer.sign(con);
con.connect();
int responseCode = con.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"getCdnPlusInstanceListResponse": { "requestId": "7abe1213-969a-4fe4-bb39-371dc0dfad07", "returnCode": "0", "returnMessage": "success", "totalRows": 1, "cdnPlusInstanceList": [ { "cdnInstanceNo": "914893", "cdnInstanceStatus": { "code": "RUN", "codeName": "CDN Plus Run State" }, "cdnInstanceOperation": { "code": "NULL", "codeName": "CDN3 NULL OP" }, "cdnInstanceStatusName": "running", "createDate": "2018-08-30T16:25:43+0900", "lastModifiedDate": "2018-08-30T16:36:00+0900", "cdnInstanceDescription": "", "serviceName": "test", "isForLiveTranscoder": false, "liveTranscoderInstanceNoList": [], "isForImageOptimizer": false, "imageOptimizerInstanceNo": "", "isAvailablePartialDomainPurge": false, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "cdnPlusRule": { "protocolTypeCode": "HTTP", "serviceDomainTypeCode": "DEFAULT", "originUrl": "bong.kr.objectstorage.ncloud.com", "originPath": "", "originHttpPort": 80, "originHttpsPort": 0, "forwardHostHeaderTypeCode": "ORIGIN_HOSTNAME", "forwardHostHeader": "", "cacheKeyHostNameTypeCode": "REQUEST_HOST_HEADER", "isGzipCompressionUse": true, "cachingOptionTypeCode": "CACHE_CONTROL_MAX_AGE", "isErrorContentsResponseUse": false, "cachingTtlTime": 604800, "isQueryStringIgnoreUse": true, "isRemoveVaryHeaderUse": true, "isLargeFileOptimizationUse": false, "gzipResponseTypeCode": "ORIGIN_RESPONSE", "isReferrerDomainUse": false, "referrerDomainList": [], "isReferrerDomainRestrictUse": false, "isSecureTokenUse": false, "secureTokenPassword": "", "isReissueSecureTokenPassword": false, "certificateName": "", "isAccessLogUse": false, "accessLogFileStorageContainerName": "" } } ]}}
新バージョン
新しいAPI は、認証関連ヘッダを追加する過程を経てAPI を呼び出すことになります。 認証関連Signatureを作る方式はv1、v2二つの方式があります。
v1 Signature
public static String makeSignatureV1(String url, String apiKey, String accessKey, String secretKey, String timestamp, String method) throws Exception{
String space = " ";
String newLine = "\n";
String message = new StringBuilder()
.append(method)
.append(space)
.append(url)
.append(newLine)
.append(timestamp)
.append(newLine)
.append(apiKey)
.append(newLine)
.append(accessKey)
.toString();
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
String encodeBase64String = Base64.encodeBase64String(rawHmac);
return encodeBase64String;
}
v2 Signature
public static String makeSignatureV2(String url, String accessKey, String secretKey, String timestamp, String method) throws Exception{
String space = " ";
String newLine = "\n";
String message = new StringBuilder()
.append(method)
.append(space)
.append(url)
.append(newLine)
.append(timestamp)
.append(newLine)
.append(accessKey)
.toString();
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
String encodeBase64String = Base64.encodeBase64String(rawHmac);
return encodeBase64String;
}
- url : Action 実行 URL (Query Stringを含む)
- apiKey : API GateWay Access Key
- accessKey :ユーザーAccess Key
- secretKey : ユーザーSecret Key
- timestamp : Epoch時間 (Milli秒)
- method : HTTP Request メソッド
詳しい事項はNcloud APIs共通ガイドをご参照ください。
- 該当コードはJava 8コードで作成されました。 java.time.Instantオブジェクトがサポートされない場合、TIMESTAMP値をミリ(mili)秒単位まで生成する必要があります。
Java (v1)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MainClass {
private final static String API_END_POINT = "https://ncloud.apigw.ntruss.com";
private final static String getCdnPlusInstanceListURL = "/cdn/v1/getCdnPlusInstanceList";
private final static String METHODS = "GET";
private final static String API_GW_KEY = $ConsumerAPIGateWayKey$;
private final static String ACCESS_KEY = $ConsumerAccessKey$;
private final static String SECRET_KEY = $ConsumerSecretKey$;
private final static String TIMESTAMP = Long.toString(Instant.now().toEpochMilli());
public static void main(String args[]) throws Exception{
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "getCdnPlusInstanceList");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
String openURL = API_END_POINT + getCdnPlusInstanceListURL + queryString;
URL obj = new URL(openURL);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-timestamp", TIMESTAMP);
conn.setRequestProperty("x-ncp-apigw-api-key", API_GW_KEY);
conn.setRequestProperty("x-ncp-iam-access-key", ACCESS_KEY);
conn.setRequestProperty("x-ncp-apigw-signature-v1", makeSignatureV1(getCdnPlusInstanceListURL + queryString, API_GW_KEY, ACCESS_KEY, SECRET_KEY, TIMESTAMP, METHODS));
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、次のような結果が得られます。
{"getCdnPlusInstanceListResponse": { "requestId": "107ea9fb-9442-486f-85d3-3d70777eac9e", "returnCode": "0", "returnMessage": "success", "totalRows": 1, "cdnPlusInstanceList": [ { "cdnInstanceNo": "914893", "cdnInstanceStatus": { "code": "RUN", "codeName": "CDN Plus Run State" }, "cdnInstanceOperation": { "code": "NULL", "codeName": "CDN3 NULL OP" }, "cdnInstanceStatusName": "running", "createDate": "2018-08-30T16:25:43+0900", "lastModifiedDate": "2018-08-30T16:36:00+0900", "cdnInstanceDescription": "", "serviceName": "test", "isForLiveTranscoder": false, "liveTranscoderInstanceNoList": [], "isForImageOptimizer": false, "imageOptimizerInstanceNo": "", "isAvailablePartialDomainPurge": false, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "cdnPlusRule": { "protocolTypeCode": "HTTP", "serviceDomainTypeCode": "DEFAULT", "originUrl": "bong.kr.objectstorage.ncloud.com", "originPath": "", "originHttpPort": 80, "originHttpsPort": 0, "forwardHostHeaderTypeCode": "ORIGIN_HOSTNAME", "forwardHostHeader": "", "cacheKeyHostNameTypeCode": "REQUEST_HOST_HEADER", "isGzipCompressionUse": true, "cachingOptionTypeCode": "CACHE_CONTROL_MAX_AGE", "isErrorContentsResponseUse": false, "cachingTtlTime": 604800, "isQueryStringIgnoreUse": true, "isRemoveVaryHeaderUse": true, "isLargeFileOptimizationUse": false, "gzipResponseTypeCode": "ORIGIN_RESPONSE", "isReferrerDomainUse": false, "referrerDomainList": [], "isReferrerDomainRestrictUse": false, "isSecureTokenUse": false, "secureTokenPassword": "", "isReissueSecureTokenPassword": false, "certificateName": "", "isAccessLogUse": false, "accessLogFileStorageContainerName": "" } } ]}}
Java (v2)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MainClass {
private final static String API_END_POINT = "https://ncloud.apigw.ntruss.com";
private final static String getCdnPlusInstanceListURL = "/cdn/v1/getCdnPlusInstanceList";
private final static String METHODS = "GET";
private final static String API_GW_KEY = $ConsumerAPIGateWayKey$;
private final static String ACCESS_KEY = $ConsumerAccessKey$;
private final static String SECRET_KEY = $ConsumerSecretKey$;
private final static String TIMESTAMP = Long.toString(Instant.now().toEpochMilli());
public static void main(String args[]) throws Exception{
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "getCdnPlusInstanceList");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
String openURL = API_END_POINT + getCdnPlusInstanceListURL + queryString;
URL obj = new URL(openURL);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-timestamp", TIMESTAMP);
conn.setRequestProperty("x-ncp-apigw-api-key", API_GW_KEY);
conn.setRequestProperty("x-ncp-iam-access-key", ACCESS_KEY);
conn.setRequestProperty("x-ncp-apigw-signature-v2", makeSignatureV2(getCdnPlusInstanceListURL + queryString, ACCESS_KEY, SECRET_KEY, TIMESTAMP, METHODS));
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、次のような結果が得られます。
{"getCdnPlusInstanceListResponse": { "requestId": "8024ca8f-19f2-4025-b537-05b5582a1d46", "returnCode": "0", "returnMessage": "success", "totalRows": 1, "cdnPlusInstanceList": [ { "cdnInstanceNo": "914893", "cdnInstanceStatus": { "code": "RUN", "codeName": "CDN Plus Run State" }, "cdnInstanceOperation": { "code": "NULL", "codeName": "CDN3 NULL OP" }, "cdnInstanceStatusName": "running", "createDate": "2018-08-30T16:25:43+0900", "lastModifiedDate": "2018-08-30T16:36:00+0900", "cdnInstanceDescription": "", "serviceName": "test", "isForLiveTranscoder": false, "liveTranscoderInstanceNoList": [], "isForImageOptimizer": false, "imageOptimizerInstanceNo": "", "isAvailablePartialDomainPurge": false, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "cdnPlusRule": { "protocolTypeCode": "HTTP", "serviceDomainTypeCode": "DEFAULT", "originUrl": "bong.kr.objectstorage.ncloud.com", "originPath": "", "originHttpPort": 80, "originHttpsPort": 0, "forwardHostHeaderTypeCode": "ORIGIN_HOSTNAME", "forwardHostHeader": "", "cacheKeyHostNameTypeCode": "REQUEST_HOST_HEADER", "isGzipCompressionUse": true, "cachingOptionTypeCode": "CACHE_CONTROL_MAX_AGE", "isErrorContentsResponseUse": false, "cachingTtlTime": 604800, "isQueryStringIgnoreUse": true, "isRemoveVaryHeaderUse": true, "isLargeFileOptimizationUse": false, "gzipResponseTypeCode": "ORIGIN_RESPONSE", "isReferrerDomainUse": false, "referrerDomainList": [], "isReferrerDomainRestrictUse": false, "isSecureTokenUse": false, "secureTokenPassword": "", "isReissueSecureTokenPassword": false, "certificateName": "", "isAccessLogUse": false, "accessLogFileStorageContainerName": "" } } ]}}
CDN Purge 수행
CDN 특정 도메인에 대하여 Purge를 수행합니다.
アクション
- requestCdnPlusPurge
- アクションパラメータ
- cdnInstanceNo : インスタンス番号
- isWholePurge : false (個別ファイルPurge実行)
- isWholeDomain
- true : ドメインが1つのインスタンスで、全体ドメイン対象、顧客保有Nのサービスドメイン+Cache Key Hostnameが'ORIGIN_HOSTNAME'に使用=>全体ドメイン対象Purge実行
- false : 顧客保有Nのサービスドメイン+Cache Key Hostnameが'REQUEST_HOST_HEADER'に使用=>ドメイン個別Purge実行
- targetFileList.1 : /sample_img.jpg (Purge対象ファイル経路とファイル名)
旧バージョン(12月Deprecated)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.basic.DefaultOAuthConsumer;
public class OldSignClass {
public static void main(String args[]) throws Exception {
String consumerKey = $ConsumerAcessKey$;
String consumerSecret = $ConsumerSecretKey$;
String requestUrl = "https://api.ncloud.com/cdn/";
String requestMethod = "GET";
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "requestCdnPlusPurge");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
requestParameters.put("isWholePurge", false);
requestParameters.put("isWholeDomain", true);
requestParameters.put("targetFileList.1", "/sample_img.jpeg");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
URL url = new URL(requestUrl + queryString.toString());
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod(requestMethod);
con.setConnectTimeout(500000);
con.setUseCaches(false);
con.setDefaultUseCaches(false);
consumer.sign(con);
con.connect();
int responseCode = con.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"requestCdnPlusPurgeResponse": { "requestId": "e1f78caa-32cd-4c7f-9afc-6d3fa48c4fcd", "returnCode": "0", "returnMessage": "success", "totalRows": 1, "cdnPlusPurgeHistoryList": [ { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005151", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-05T19:31:52+0900", "purgeStatusName": "ready" } ]}}
新バージョン
Java (v1)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MainClass {
private final static String API_END_POINT = "https://ncloud.apigw.ntruss.com";
private final static String requestCdnPlusPurge = "/cdn/v1/requestCdnPlusPurge";
private final static String METHODS = "GET";
private final static String API_GW_KEY = $ConsumerAPIGateWayKey$;
private final static String ACCESS_KEY = $ConsumerAccessKey$;
private final static String SECRET_KEY = $ConsumerSecretKey$;
private final static String TIMESTAMP = Long.toString(Instant.now().toEpochMilli());
public static void main(String args[]) throws Exception{
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "requestCdnPlusPurge");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
requestParameters.put("isWholePurge", false);
requestParameters.put("isWholeDomain", true);
requestParameters.put("targetFileList.1", "/sample_img.jpeg");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
String openURL = API_END_POINT + requestCdnPlusPurge + queryString;
URL obj = new URL(openURL);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-timestamp", TIMESTAMP);
conn.setRequestProperty("x-ncp-apigw-api-key", API_GW_KEY);
conn.setRequestProperty("x-ncp-iam-access-key", ACCESS_KEY);
conn.setRequestProperty("x-ncp-apigw-signature-v1", makeSignatureV1(requestCdnPlusPurge + queryString, API_GW_KEY, ACCESS_KEY, SECRET_KEY, TIMESTAMP, METHODS));
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"requestCdnPlusPurgeResponse": { "requestId": "fa3bb017-da9c-4b78-beb5-805a3a44ee6f", "returnCode": "0", "returnMessage": "success", "totalRows": 1, "cdnPlusPurgeHistoryList": [ { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005156", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:15:17+0900", "purgeStatusName": "ready" } ]}}
Java (v2)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MainClass {
private final static String API_END_POINT = "https://ncloud.apigw.ntruss.com";
private final static String requestCdnPlusPurge = "/cdn/v1/requestCdnPlusPurge";
private final static String METHODS = "GET";
private final static String API_GW_KEY = $ConsumerAPIGateWayKey$;
private final static String ACCESS_KEY = $ConsumerAccessKey$;
private final static String SECRET_KEY = $ConsumerSecretKey$;
private final static String TIMESTAMP = Long.toString(Instant.now().toEpochMilli());
public static void main(String args[]) throws Exception{
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "requestCdnPlusPurge");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
requestParameters.put("isWholePurge", false);
requestParameters.put("isWholeDomain", true);
requestParameters.put("targetFileList.1", "/sample_img.jpeg");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
String openURL = API_END_POINT + requestCdnPlusPurge + queryString;
URL obj = new URL(openURL);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-timestamp", TIMESTAMP);
conn.setRequestProperty("x-ncp-apigw-api-key", API_GW_KEY);
conn.setRequestProperty("x-ncp-iam-access-key", ACCESS_KEY);
conn.setRequestProperty("x-ncp-apigw-signature-v2", makeSignatureV2(requestCdnPlusPurge + queryString, ACCESS_KEY, SECRET_KEY, TIMESTAMP, METHODS));
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"requestCdnPlusPurgeResponse": { "requestId": "2424c83d-18e9-46b7-ba56-b8ae07e83c9a", "returnCode": "0", "returnMessage": "success", "totalRows": 1, "cdnPlusPurgeHistoryList": [ { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005157", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:17:41+0900", "purgeStatusName": "ready" } ]}}
CDN Purge 履歴照会
CDN Purgeを実行した記録を照会します。
- アクション
- getCdnPlusPurgeHistoryList
- アクションパラメータ
- cdnInstanceNo : インスタンス番号
旧バージョン(12月Deprecated)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.basic.DefaultOAuthConsumer;
public class OldSignClass {
public static void main(String args[]) throws Exception {
String consumerKey = $ConsumerAcessKey$;
String consumerSecret = $ConsumerSecretKey$;
String requestUrl = "https://api.ncloud.com/cdn/";
String requestMethod = "GET";
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "getCdnPlusPurgeHistoryList");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
URL url = new URL(requestUrl + queryString.toString());
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod(requestMethod);
con.setConnectTimeout(500000);
con.setUseCaches(false);
con.setDefaultUseCaches(false);
consumer.sign(con);
con.connect();
int responseCode = con.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"getCdnPlusPurgeHistoryListResponse": { "requestId": "bbf8e2d7-fc8b-4390-8968-ab1c2c341a73", "returnCode": "0", "returnMessage": "success", "totalRows": 3, "cdnPlusPurgeHistoryList": [ { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005157", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:17:41+0900", "purgeStatusName": "success" }, { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005156", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:15:17+0900", "purgeStatusName": "success" }, { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005151", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-05T19:31:52+0900", "purgeStatusName": "success" } ]}}
新バージョン
Java (v1)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MainClass {
private final static String API_END_POINT = "https://ncloud.apigw.ntruss.com";
private final static String getCdnPlusPurgeHistoryList = "/cdn/v1/getCdnPlusPurgeHistoryList";
private final static String METHODS = "GET";
private final static String API_GW_KEY = $ConsumerAPIGateWayKey$;
private final static String ACCESS_KEY = $ConsumerAccessKey$;
private final static String SECRET_KEY = $ConsumerSecretKey$;
private final static String TIMESTAMP = Long.toString(Instant.now().toEpochMilli());
public static void main(String args[]) throws Exception{
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "getCdnPlusPurgeHistoryList");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
String openURL = API_END_POINT + getCdnPlusPurgeHistoryList + queryString;
URL obj = new URL(openURL);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-timestamp", TIMESTAMP);
conn.setRequestProperty("x-ncp-apigw-api-key", API_GW_KEY);
conn.setRequestProperty("x-ncp-iam-access-key", ACCESS_KEY);
conn.setRequestProperty("x-ncp-apigw-signature-v1", makeSignatureV1(getCdnPlusPurgeHistoryList + queryString, API_GW_KEY, ACCESS_KEY, SECRET_KEY, TIMESTAMP, METHODS));
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"getCdnPlusPurgeHistoryListResponse": { "requestId": "358f1d4d-9811-4eb9-a4d5-364e9150cdf1", "returnCode": "0", "returnMessage": "success", "totalRows": 3, "cdnPlusPurgeHistoryList": [ { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005157", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:17:41+0900", "purgeStatusName": "success" }, { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005156", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:15:17+0900", "purgeStatusName": "success" }, { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005151", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-05T19:31:52+0900", "purgeStatusName": "success" } ]}}
Java (v2)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MainClass {
private final static String API_END_POINT = "https://ncloud.apigw.ntruss.com";
private final static String getCdnPlusPurgeHistoryList = "/cdn/v1/getCdnPlusPurgeHistoryList";
private final static String METHODS = "GET";
private final static String API_GW_KEY = $ConsumerAPIGateWayKey$;
private final static String ACCESS_KEY = $ConsumerAccessKey$;
private final static String SECRET_KEY = $ConsumerSecretKey$;
private final static String TIMESTAMP = Long.toString(Instant.now().toEpochMilli());
public static void main(String args[]) throws Exception{
Map<String, Object> requestParameters = new HashMap<String, Object>();
requestParameters.put("action", "getCdnPlusPurgeHistoryList");
requestParameters.put("cdnInstanceNo", $InstanceNo$);
requestParameters.put("responseFormatType", "json");
StringBuffer queryString = new StringBuffer();
int index= 1;
int requestParamSize = requestParameters.size();
for (String key : requestParameters.keySet()) {
if (index == 1) {
queryString.append("?");
}
queryString.append(key);
if (requestParameters.get(key) != null) {
queryString.append('=');
queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
}
if (index!= requestParamSize) {
queryString.append("&");
index ++;
}
}
String openURL = API_END_POINT + getCdnPlusPurgeHistoryList + queryString;
URL obj = new URL(openURL);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-timestamp", TIMESTAMP);
conn.setRequestProperty("x-ncp-apigw-api-key", API_GW_KEY);
conn.setRequestProperty("x-ncp-iam-access-key", ACCESS_KEY);
conn.setRequestProperty("x-ncp-apigw-signature-v2", makeSignatureV2(getCdnPlusPurgeHistoryList + queryString, ACCESS_KEY, SECRET_KEY, TIMESTAMP, METHODS));
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
System.out.println("ResponseCode : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
StringBuffer requestResult = new StringBuffer();
String readString = null;
while ((readString = resultReader.readLine()) != null) {
requestResult.append(readString);
}
System.out.println(requestResult.toString());
}
}
}
メインメソッドを実行すると、その結果が得られます。
{"getCdnPlusPurgeHistoryListResponse": { "requestId": "1880f9ea-f96d-46bc-b4db-8e295a434f04", "returnCode": "0", "returnMessage": "success", "totalRows": 3, "cdnPlusPurgeHistoryList": [ { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005157", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:17:41+0900", "purgeStatusName": "success" }, { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005156", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-08T10:15:17+0900", "purgeStatusName": "success" }, { "cdnInstanceNo": "914893", "purgeId": "PT000000000000005151", "isWholePurge": false, "isWholeDomain": true, "cdnPlusServiceDomainList": [ { "domainId": "CD000000000000009748", "serviceDomainTypeCode": "DEFAULT", "protocolTypeCode": "HTTP", "defaultDomainName": "rtvgyivztexc914893.cdn.ntruss.com", "userDomainName": "" } ], "targetDirectoryName": "", "targetFileList": [ "/sample_img.jpeg" ], "requestDate": "2018-10-05T19:31:52+0900", "purgeStatusName": "success" } ]}}
結果実行確認
以下の画像のようにPurgeを実行した結果を確認することができます。
CDNにURLをリクエストし、キャッシュの初期化とコンテンツの変更事項を確認します。
関連情報リンク
次のガイドから関連情報が確認できます。