Skip to main content
 首页 » 编程设计

Google App Engine 的 Python API 问题

2025年05月04日25lori

我的 API 遇到问题,我无法创建用户记录/将其存储在 Google 数据存储区中。我收到下面列出的 JSON 响应。

我发现的另一件奇怪的事情是,当使用右上角的 Google APIs Explorer 时,它有一个红色感叹号,上面写着“方法需要授权”。它要我为用户电子邮件授权 OAUTH 范围。

更新:这是我能够通过 GAE 获得的错误日志。

    Encountered unexpected error from ProtoRPC method implementation: ServerError (Method PhotoswapAPI.user_create expected response type <class 'photoswap_api_messages.UserCreateResponseMessage'>, sent <type 'NoneType'>) 
Traceback (most recent call last): 
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/protorpc-1.0/protorpc/wsgi/service.py", line 181, in protorpc_service_app 
    response = method(instance, request) 
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/endpoints-1.0/endpoints/api_config.py", line 1332, in invoke_remote 
    return remote_method(service_instance, request) 
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/protorpc-1.0/protorpc/remote.py", line 419, in invoke_remote_method 
    type(response))) 
ServerError: Method PhotoswapAPI.user_create expected response type <class 'photoswap_api_messages.UserCreateResponseMessage'>, sent <type 'NoneType'> 

有谁知道如何解决返回 503 的问题?我错过了什么吗?

    503 Service Unavailable 
 
- Hide headers - 
 
cache-control:  private, max-age=0 
content-encoding:  gzip 
content-length:  135 
content-type:  application/json; charset=UTF-8 
date:  Sun, 28 Dec 2014 23:23:55 GMT 
expires:  Sun, 28 Dec 2014 23:23:55 GMT 
server:  GSE 
 
{ 
 "error": { 
  "errors": [ 
   { 
    "domain": "global", 
    "reason": "backendError", 
    "message": "Internal Server Error" 
   } 
  ], 
  "code": 503, 
  "message": "Internal Server Error" 
 } 
} 

photoswap_api.py

import endpoints 
from photoswap_api_messages import UserCreateRequestMessage 
from photoswap_api_messages import UserCreateResponseMessage 
from protorpc import remote 
from models import User 
 
 
@endpoints.api(name='photoswap', version='v1') 
class PhotoswapAPI(remote.Service): 
    @endpoints.method(UserCreateRequestMessage, UserCreateResponseMessage, 
                      path='user', http_method='POST', 
                      name='user.create') 
    def user_create(self, request): 
        entity = User(username=request.username, email=request.email, password=request.password) 
        entity.put() 
 
 
APPLICATION = endpoints.api_server([PhotoswapAPI], restricted=False) 

photoswap_api_messages.py

from protorpc import messages 
 
 
class UserCreateRequestMessage: 
    email = messages.StringField(1) 
    password = messages.StringField(2) 
 
 
class UserCreateResponseMessage: 
    email = messages.StringField(1) 
    username = messages.StringField(2) 
    id = messages.IntegerField(3) 

模型.py

from google.appengine.ext import ndb 
 
 
TIME_FORMAT_STRING = '%b %d, %Y %I:%M:%S %p' 
 
 
class User(ndb.Model): 
    username = ndb.StringProperty(required=True) 
    email = ndb.StringProperty(required=True) 
    id = ndb.IntegerProperty() 
 
 
class Post(ndb.Model): 
    user_id = ndb.IntegerProperty(required=True) 
    id = ndb.IntegerProperty(required=True) 
    desc = ndb.StringProperty(required=False) 

主.py

    import webapp2 
from protorpc import remote 
 
class MainHandler(webapp2.RequestHandler): 
    def get(self): 
        self.response.write('Hello world!') 
 
app = webapp2.WSGIApplication([ 
    ('/_ah/spi/.*', MainHandler) 
], debug=True) 

app.yaml

application: caramel-theory-800 
version: 1 
runtime: python27 
threadsafe: true 
api_version: 1 
 
handlers: 
# Endpoints handler 
- url: /_ah/spi/.* 
  script: photoswap_api.APPLICATION 
 
libraries: 
- name: pycrypto 
  version: latest 
- name: endpoints 
  version: 1.0 

请您参考如下方法:

这里:

@endpoints.method(UserCreateRequestMessage, UserCreateResponseMessage, 

您是在声明该方法返回一个 UserCreateResponseMessage;但是然后在这里:

def user_create(self, request): 
    entity = User(username=request.username, email=request.email, 
                  password=request.password) 
    entity.put() 

你没有返回任何东西,也就是说,返回一个None...