如何使用 REST API Java 使 Google CDN 缓存失效?

How to invalidate Google CDN cache using REST API Java?

我一直在研究这方面的工作示例,但还没有找到。

我参考了以下链接 and Google Official Docs

从这些文档中我确实明白我需要实现这个

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.compute.Compute;
import com.google.api.services.compute.model.CacheInvalidationRule;
import com.google.api.services.compute.model.Operation;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;

public class ComputeExample {
  public static void main(String args[]) throws IOException, GeneralSecurityException {
    // Project ID for this request.
    String project = "my-project"; // TODO: Update placeholder value.

    // Name of the UrlMap scoping this request.
    String urlMap = "my-url-map"; // TODO: Update placeholder value.

    // TODO: Assign values to desired fields of `requestBody`:
    CacheInvalidationRule requestBody = new CacheInvalidationRule();

    Compute computeService = createComputeService();
    Compute.UrlMaps.InvalidateCache request =
        computeService.urlMaps().invalidateCache(project, urlMap, requestBody);

    Operation response = request.execute();

    // TODO: Change code below to process the `response` object:
    System.out.println(response);
  }

  public static Compute createComputeService() throws IOException, GeneralSecurityException {
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

    GoogleCredential credential = GoogleCredential.getApplicationDefault();
    if (credential.createScopedRequired()) {
      credential =
          credential.createScoped(Arrays.asList("https://www.googleapis.com/auth/cloud-platform"));
    }

    return new Compute.Builder(httpTransport, jsonFactory, credential)
        .setApplicationName("Google-ComputeSample/0.1")
        .build();
  }
}

但是如果你看到这个例子,它的位置只有占位符值。

如果我想刷新一个名为 https://mywebsite.com/homepage.html 的页面的缓存 我应该在上面的代码中的什么地方输入这些信息?

我这里加了吗

 credential.createScoped(Arrays.asList("https://mywebsite.com/homepage.html"));

或者我应该将它添加到 UrlMaps 中吗?这很令人困惑。

它应该在请求中 body。请求 body contains data with the following structure:

JSON representation
{
  "path": string,
  "host": string
}

这些字段采用以下内容:

  • 路径为字符串
  • 主机为字符串

如果设置,此失效规则将仅适用于主机 header 匹配主机的请求。

您可能需要创建请求body object

CacheInvalidationRule requestBody = new CacheInvalidationRule();

这应该创建 cacheinvalidationrule object 并分配给 requestBody

此外,您可能还需要这样的东西

requestBody.setHostand requestBody.setPath = ""

这两个属性以字符串作为参数

requestBody.setHost=" mywebsite.com"

requestBody.setPath = "/homepage.html"

希望对你有帮助,祝你好运

我建议检查 developers.google.com Compute.UrlMaps.InvalidateCache class, use Method summary 描述,我相信这对您理解此 class 以及如何将其合并到您的代码中会有所帮助。它包含方法详细信息和参数说明,例如

构造函数详细信息 无效缓存

protected InvalidateCache(java.lang.String project,
                          java.lang.String urlMap,
                          CacheInvalidationRule content)

启动缓存失效操作,使指定路径失效,范围为指定的UrlMap。创建方法 "urlMaps.invalidateCache" 的请求。此请求包含计算服务器所需的参数。设置任何可选参数后,调用 AbstractGoogleClientRequest.execute() 方法调用远程操作。

InvalidateCache#initialize(com.google.api.client.googleapis.services.AbstractGoogleC lientRequest)

必须在调用构造函数后立即调用以初始化此实例。

参数:

  • project - 此请求的项目 ID。
  • urlMap - 确定此请求范围的 UrlMap 的名称。
  • 内容-CacheInvalidationRule

setAlt 示例的方法详细信息 设置

public Compute.UrlMaps.InvalidateCache set(java.lang.String parameterName,
                                           java.lang.Object value)