AppEngine Google Cloud Endpoint - 发现未找到

4

我对Python和Google AppEngine都比较新手,但有大约7年的编程经验。我也是StackOverflow的新手。

我一直在尝试为我的个人项目设置一个简单的Google Cloud Endpoint API,并已完成并上传了该应用程序到Google App Engine。

以下是我的Endpoint API设置:

@endpoints.api(name='puzzle', version='v1', description='Puzzle Engine API')

和方法:

@endpoints.method(
        PuzzleMessage, PuzzleMessage,
        name='puzzle.generate',
        http_method='GET',
        path='generate'
    )

@endpoints.method(
        PuzzleMessage, PuzzleMessage,
        name='puzzle.solve',
        http_method='GET',
        path='solve'
    )

我的 app.yaml 如下:

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

# Endpoints handler
- url: /_ah/api/.*
  script: services.application

libraries:
- name: webapp2
  version: "2.5.2"

最后,services.py 读取:

from google.appengine.ext import endpoints
from api import puzzle_api

application = endpoints.api_server([
                               puzzle_api.PuzzleAPI
                           ], restricted=False)

现在的问题是,当我尝试访问 https://my-app-name.appspot.com/_ah/api/discovery/v1/apis 时,我只看到以下内容:

Not Found

此外,当我访问 https://developers.google.com/apis-explorer/?base=https://my-app-name.appspot.com/_ah/api#p/ 的 API Explorer 时,服务列表为空,并且在 JavaScript 控制台中,我看到一个关于 https://my-app-name.appspot.com/_ah/api/discovery/v1/apis 的 404 错误。
在本地测试服务器上访问这些 URL 会得到非常不同的错误。当我尝试访问本地测试服务器上的 API Discovery(localhost:8080/_ah/api/discovery/v1/apis)时,我得到下面的错误信息:

{"error": {"message": "BackendService.getApiConfigs Error"}}

与其显示“未找到”,现在在https://developers.google.com/apis-explorer/?base=http://localhost:8080/_ah/api#p/中访问Explorer将显示500错误,而不是JavaScript控制台中的404。

我一直在尝试通过进行许多谷歌搜索并尝试许多方法来解决这个问题,但我似乎无法进一步进行。我非常感谢这个专业社区能够提供任何帮助。

谢谢。


如果您有新的信息需要添加,您可以(而且应该!)编辑您的问题。这将使您的问题更清晰,并吸引那些可能回答它的人的注意。 - Martin Atkins
谢谢@MartinAtkins。我会这样做的。 - Hyunil Kim
不幸的是,1.7.6 SDK也存在问题;请参见https://dev59.com/mHDXa4cB1Zd3GeqP9jX8获取更多信息。尝试在`app.yaml`中反转处理程序的顺序并使用1.7.5 SDK。 - bossylobster
3个回答

9
请查看此处的文档:https://developers.google.com/appengine/docs/python/endpoints/api_server 你需要执行以下操作:
将你的app.yaml更改为:
handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /_ah/spi/.*
  script: services.application

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"

注意: url应该是/_ah/spi/.*而不是/_ah/api/.*。修改后,你可以访问你的API:/_ah/api/explorer


在新的v2版本中,不需要将其设置为/_ah/spi/.*,对吧?我们该如何在新版本中实现这一点? - Milindu Sanoj Kumarage

2
- url: .*
  script: main.app

# Endpoints handler
- url: /_ah/api/.*
  script: services.application

尝试调换这些处理程序的顺序。通常最好将最一般的URL匹配器放在列表末尾,以免它们捕捉到本应传递给更具体处理程序的内容。

谢谢。我看了你的答案后尝试了一下,但是不幸的是这并没有解决我的问题。 - Hyunil Kim

1
转换为中文:

更改为 app.yaml

# Endpoints handler
- url: /_ah/spi/.*
  script: services.application

libraries:
- name: webapp2
  version: latest 
- name: pycrypto
  version: latest
- name: endpoints
  version: 1.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接