apollo-openapi/src/main/java/com/ctrip/framework/apollo/openapi/client/url/OpenApiPathBuilder.java/OpenApiPathBuilder/buildPath
class OpenApiPathBuilder:  public String buildPath(String baseUrl) {
    if (Strings.isNullOrEmpty(baseUrl)) {
      throw new IllegalArgumentException("Base url should not be null or empty");
    }
    List<String> parts = new ArrayList<>();
    parts.add(baseUrl);

    for (String k : SORTED_PATH_KEYS) {
      if (pathVariable.containsKey(k)) {
        parts.add(k);
        String v = pathVariable.get(k);
        if (!Strings.isNullOrEmpty(v)) {
          parts.add(v);
        }
      }
    }

    if (!Strings.isNullOrEmpty(this.customResource)) {
      parts.add(this.customResource);
    }

    String path = PATH_JOIN.join(parts);

    if (!params.isEmpty()) {
      StringBuilder sb = new StringBuilder();
      for (Map.Entry<String, String> kv : params.entrySet()) {
        if (sb.length() > 0) {
          sb.append("&");
        }
        sb.append(kv.getKey()).append("=").append(kv.getValue());
      }
      path += "?" + sb;
    }
    return path;
  }