Google App Engine的Python API问题

问题描述 投票:1回答:1

我的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)

models.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)

main.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
python google-app-engine google-cloud-endpoints
1个回答
6
投票

这里:

@endpoints.method(UserCreateRequestMessage, UserCreateResponseMessage,

您正在说明该方法返回UserCreateResponseMessage ; 但是这里:

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

您什么也不返回,即返回None

© www.soinside.com 2019 - 2024. All rights reserved.