我作为首次使用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])
我想要做的是将Shelves
和Book
类放在不同的文件中,因为它们都会变得很长。我尝试过移动它们,但这导致了一个空的API发现文档,因为API启动时可能没有加载/运行/解释这些文件。
我该如何解决这个问题?我觉得它会成为import
的东西,但我无法弄清楚......
谢谢!
答案 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])