4

これは、Endpoints の次のバグ (有効な場合) が原因であると思われますが、どこかに回避策があることも確信しています。

https://code.google.com/p/googleappengine/issues/detail?id=9050&can=4&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

再現する手順:

  1. メソッド名、メソッドの API 名、または Endpoints クラスのパラメーター リストを変更します。
  2. endpoints.sh スクリプトを実行して API ファイルを生成します。
  3. API ファイルをローカルで検査し、そこにある変更を確認します。ここまでは順調ですね。
  4. サーバー上のアプリのデフォルト バージョンにデプロイします。
  5. /_ah/spi/BackendService.getApiConfigs への呼び出しのログを確認します。エラーはありません。
  6. API Explorer に移動し、ブラウザのキャッシュをクリアします。API を検査します。変化はありません。
  7. ブラウザで API ファイルを直接リクエストします。https://[app-id].appspot.com/_ah/api/discovery/v1/apis/[api-name]/v1/rpc 変更はありません。

上記に不満を感じた私は、新しいアプリ ID で完全にゼロから始めることにしました。API Explorer にまだ API が表示されず、上記の手順 7 で URL に 404 が表示されます。

これが私のエンドポイントクラスです:

@Api(name = "ditto", version = "v1")
public class CategoryEndpoint extends BaseEndpoint {

    @SuppressWarnings("unused")
    private static final Logger log = Logger.getLogger(CategoryEndpoint.class.getName());

    @ApiMethod(name = "category.list")
    public WireCategory list() {
        Category root = categoryDao.getRoot();
        WireCategory wireRootCategory = new WireCategory(root);

        return wireRootCategory;
    }

}

生成された .api ファイルは次のとおりです。

{
  "extends" : "thirdParty.api",
  "abstract" : false,
  "root" : "https://1.eliot-dev-uk-ditto-do.appspot.com/_ah/api",
  "name" : "ditto",
  "version" : "v1",
  "defaultVersion" : false,
  "adapter" : {
    "bns" : "https://1.eliot-dev-uk-ditto-do.appspot.com/_ah/spi",
    "deadline" : 10.0,
    "type" : "lily"
  },
  "auth" : {
    "allowCookieAuth" : false
  },
  "frontendLimits" : {
    "unregisteredUserQps" : -1,
    "unregisteredQps" : -1,
    "unregisteredDaily" : -1,
    "rules" : [ ]
  },
  "cacheControl" : {
    "type" : "no-cache",
    "maxAge" : 0
  },
  "methods" : {
    "ditto.category.list" : {
      "path" : "list",
      "httpMethod" : "GET",
      "scopes" : [ ],
      "audiences" : [ ],
      "clientIds" : [ ],
      "rosyMethod" : "ditto.api.CategoryEndpoint.list",
      "request" : {
        "body" : "empty"
      },
      "response" : {
        "body" : "autoTemplate(backendResponse)"
      }
    }
  },
  "descriptor" : {
    "schemas" : {
      "WireCategory" : {
        "id" : "WireCategory",
        "type" : "object",
        "properties" : {
          "webSafePath" : {
            "type" : "string"
          },
          "prettyPath" : {
            "type" : "string"
          },
          "children" : {
            "type" : "array",
            "items" : {
              "$ref" : "WireCategory"
            }
          },
          "path" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "name" : {
            "type" : "string"
          },
          "id" : {
            "type" : "string",
            "format" : "int64"
          }
        }
      }
    },
    "methods" : {
      "ditto.api.CategoryEndpoint.list" : {
        "response" : {
          "$ref" : "WireCategory"
        }
      }
    }
  }
}

この URL から 404 が返され、API JSON が表示されるはずです。

https://eliot-dev-uk-ditto-do.appspot.com/_ah/api/discovery/v1/apis/ditto/v1

これは私を殺している !

編集:

これは、App Engine 1.7.5 と 1.7.6 によって生成された .api ファイルの違いを見つけたところです。URLが変更された理由がわかりません。

ditto-v1.api from 1.7.6:

    {
      "extends" : "thirdParty.api",
      "abstract" : false,
      "root" : "https://1.eliot-dev-uk-ditto-do.appspot.com/_ah/api",
      "name" : "ditto",
      "version" : "v1",
      "defaultVersion" : false,
      "adapter" : {
        "bns" : "https://1.eliot-dev-uk-ditto-do.appspot.com/_ah/spi",
        "deadline" : 10.0,
        "type" : "lily"
      }
      ...

    ditto-v1.api from 1.7.5:

     {
      "extends" : "thirdParty.api",
      "abstract" : false,
      "root" : "https://eliot-dev-uk-ditto-do.appspot.com/_ah/api",
      "name" : "ditto",
      "version" : "v1",
      "defaultVersion" : false,
      "adapter" : {
        "bns" : "http://eliot-dev-uk-ditto-do.appspot.com/_ah/spi",
        "deadline" : 10.0,
        "type" : "lily"
      }
      ...
4

1 に答える 1

2

すでに指摘したように、それは SDK 1.7.6 の奇妙な問題によるもの1.で、.api ファイルのエンドポイント ルート URL の先頭に追加されました...

私は新しいSDK 1.7.7を試しましたが、解決したようです...

于 2013-04-11T10:59:50.573 に答える