Очистка кэшированных URL в akamai через код Java? - PullRequest
0 голосов
/ 05 сентября 2018

В моем проекте всякий раз, когда вызывается API, он кэшируется в Akamai. Но когда клиент меняет что-то в базе данных через пользовательский интерфейс. Нам нужно аннулировать ответ кэшированного API в AKAMAI и заполнить его новыми свежими данными json. Я нашел какую-то ссылку в Интернете: akamai-purging , но я не могу понять, что такое cp-код в этой ссылке, о которой они говорят?

Вот мой пример кода, который дает: 405 Не разрешено

Код:

public static void main(String[] args) throws IOException, RequestSigningException {

    URL url = new URL("https://xxx-host-name-/scripts.4535eaf743502b25ba3a.js");

    HttpTransport HTTP_TRANSPORT = new ApacheHttpTransport();
    HttpRequestFactory requestFactory = HTTP_TRANSPORT.createRequestFactory();
    AkamaiPostData postData = new AkamaiPostData();
    postData.setHostname(AkamaiConstants.SITE_HOST_NAME);

    Gson gson = new Gson();
    String postDataJSON = gson.toJson(postData);
    byte[] contentBytes = postDataJSON.getBytes();
    HttpContent content = new ByteArrayContent("application/json", contentBytes);
    HttpRequest request = requestFactory.buildDeleteRequest(new GenericUrl(url));
    HttpHeaders headers = request.getHeaders();
    headers.set("Host", "xxx-host-name-");

    ClientCredential credential = new DefaultCredential(AkamaiConstants.CLIENT_TOKEN, AkamaiConstants.ACCESS_TOKEN, AkamaiConstants.CLIENT_SECRET);
    RequestSigner signer = new EdgeGridV1Signer(Collections.EMPTY_LIST, 1024 * 2);
    HttpRequest signedRequest = signer.sign(request, credential);
    HttpResponse response = signedRequest.execute();
    String result = response.parseAsString();
    System.out.println("result::" + result);
}

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Итак, наконец я смог это сделать. Этот подход, который я использовал, является подходом быстрой очистки, предоставленным Akamai.

Пример кода :

public class AkamaiFastPurge {

    private static final String HTTPS = "https";

    public static void main(String... s) throws URISyntaxException, IOException, RequestSigningException {


        ClientCredential credential = ClientCredential.builder()
                .accessToken("Your-access-token")
                .clientToken("Your-client-token")
                .clientSecret("Your-client-secret")
                .host("Your-host")
                .build();


        ArrayList arrayList = new ArrayList<String>();

        // You can add multiple urls.
        arrayList.add("*****-Actual-url-you-want-to-purge*****");

        HttpResponse response = invalidateUrls(credential, arrayList, "production");

        System.out.println(response.getStatusCode());
        System.out.println(response.getStatusMessage());
    }

    public static HttpResponse invalidateUrls(ClientCredential clientCredential, List<String> urls, String network) {

        HttpTransport httpTransport = new ApacheHttpTransport();
        HttpRequestFactory requestFactory = httpTransport.createRequestFactory();

        HttpRequest request = null;

        try {

            // This is fast purge approach
            URI uri = new URI(HTTPS, "api.ccu.akamai.com", "/ccu/v3/invalidate/url/" + network, null, null);

            String requestBody = getStringRequestBody(urls);

            request = requestFactory.buildPostRequest(new GenericUrl(uri), ByteArrayContent.fromString("application/json", requestBody));
            GoogleHttpClientEdgeGridRequestSigner requestSigner = new GoogleHttpClientEdgeGridRequestSigner(clientCredential);
            requestSigner.sign(request);

            return request.execute();

        } catch (IOException e) {
//            log.error("IOException in Akamai Utility", e);
        } catch (RequestSigningException e) {
//            log.error("RequestSigningException in Akamai Utility", e);
        } catch (URISyntaxException e) {
//            log.error("UriSyntaxException in Akamai Utility", e);
        }

        return null;
    }

    public static String getStringRequestBody(List<String> urls) {

        Map<String, List<String>> akamaiRequestMap = Maps.newHashMap();
        akamaiRequestMap.put("objects", urls);

        return new Gson().toJson(akamaiRequestMap);
    }
}

Зависимости, которые я использовал для этого:

 <dependency>
        <groupId>com.akamai.edgegrid</groupId>
        <artifactId>edgegrid-signer-google-http-client</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>
</dependencies>
0 голосов
/ 06 сентября 2018

Для очистки контента в Akamai требуются учетные данные API. Подробнее о Akamai Fast Purge API можно узнать на сайте Akamai Developer . Вам нужно будет либо связаться с вашей учетной записью Akamai, либо настроить API-доступ, который вам необходим в Luna Control Center . Документация API предоставит вам ссылки на понимание API и на то, как настроить соответствующие учетные данные.

В качестве небольшого шага, CP-код - это уникальный идентификатор Akamai, привязывающий конкретный домен или услугу к вашему контракту в целях выставления счетов. В дополнение к учетным данным, необходимым для доступа к API, вам определенно необходимо знать код CP, который используется вашим доменом с поддержкой Akamai для успешного вызова API быстрой очистки.

...