在多个类和多个文件上拆分Cloud Endpoint API

时间:2014-04-23 10:19:35

标签: python google-app-engine google-cloud-endpoints

我作为首次使用Python的程序员(具有Java和PHP经验)开始使用Cloud Endpoint API。

我想将所有内容保存在一个API中,但将不同的资源调用分成不同的文件。文档以此为例:

an_api = endpoints.api(name='library', version='v1.0')

@an_api.api_class(resource_name='shelves')
class Shelves(remote.Service):
   ...

@an_api.api_class(resource_name='books', path='books')
class Books(remote.Service):
   ...

endpoints.api_server([an_api])

我想要做的是将ShelvesBook类放在不同的文件中,因为它们都会变得很长。我尝试过移动它们,但这导致了一个空的API发现文档,因为API启动时可能没有加载/运行/解释这些文件。

我该如何解决这个问题?我觉得它会成为import的东西,但我无法弄清楚......

谢谢!

2 个答案:

答案 0 :(得分:5)

是的,您必须确保api类已正确导入,但如果出现此问题,您将获得一些运行时异常,而不是空的发现文档。

我可以看到的问题是你正在使用an_api对象创建api服务器,用于装饰你的实际API类。您应该执行以下操作:

an_api = endpoints.api(name='library', version='v1.0')

@an_api.api_class(resource_name='shelves')
class Shelves(remote.Service):
   ...

@an_api.api_class(resource_name='books', path='books')
class Books(remote.Service):
   ...

endpoints.api_server([Shelves, Books])

然后从这个到多模块API,您将很容易遇到循环依赖情况(Python无法处理的事情)。然后,您需要一个公共模块,您可以在其中定义an_api;一组API模块,用于实现API的一部分,所有这些都是import公共模块;然后你需要一个调用endpoints.api_server的主模块。

注意:在Python世界中,单个模块(文件)确实很长并且其中包含很多类并不罕见;这可能看起来很奇怪来自Java或结构良好的PHP。

答案 1 :(得分:1)

https://cloud.google.com/appengine/docs/python/endpoints/api_server 这对我有用

import endpoints

from main import an_api
from ShelvesClass import Shelves

from BookClass import Books
application = endpoints.api_server([an_api])