我是Python和Google AppEngine的新手,但有大约7年的编程经验。我也是StackOverflow的新手。
我一直在尝试为我的个人项目设置一个简单的Google Cloud Endpoint API,并已完成并将完成的应用上传到Google App Engine。
以下是我的端点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时,我看到的只是< / p>
未找到
此外,当我在https://developers.google.com/apis-explorer/?base=https:// my-app-name .appspot.com / _ah / api #p /上点击API资源管理器时,服务列表为空,并且在JavaScript控制台,我在https:// my-app-name .appspot.com / _ah / api / discovery / v1 / apis上看到404错误。
在本地测试服务器上访问这些URL会产生完全不同的错误。当我尝试在localhost:8080 / _ah / api / discovery / v1 / apis的本地测试服务器上访问API Discovery时,我得到了
{“error”:{“message”:“BackendService.getApiConfigs Error”}}
而不是“未找到”。在https://developers.google.com/apis-explorer/?base=http://localhost:8080/_ah/api#p/点击资源管理器现在在JavaScript控制台中也会显示500错误而不是404。
我一直试图通过做很多谷歌搜索并尝试很多东西来解决这个问题,但我似乎无法继续下去。我非常感谢能从这个专业人士社区获得的任何帮助。
感谢。
答案 0 :(得分: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"
注意:网址应为/_ah/spi/.*
而不是/_ah/api/.*
。更改它,然后您可以在/_ah/api/explorer
访问您的API。
答案 1 :(得分:2)
- url: .*
script: main.app
# Endpoints handler
- url: /_ah/api/.*
script: services.application
尝试颠倒这些处理程序的顺序。通常最好的做法是始终将最常用的URL匹配器放在列表的末尾,以免它们捕获一些意图转到更具体的处理程序。
答案 2 :(得分: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