【问题标题】:Split Cloud Endpoint API over multiple classes and multiple files将 Cloud Endpoint API 拆分为多个类和多个文件
【发布时间】:2014-04-23 10:19:35
【问题描述】:

作为第一次使用 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 会有点问题,但我想不通...

谢谢!

【问题讨论】:

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


    【解决方案1】:

    是的,您必须确保正确导入了 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 来说可能看起来很奇怪。

    【讨论】:

    • 似乎谷歌应该稍微更新一下他们的文档,试过了,它确实有效!我将不得不研究循环依赖问题,从 Java(和一些 PHP)的角度来看,这对我来说是新的。非常感谢!
    • 你能举个例子,如何将这些类拆分到几个文件中,以便 Endpoint 可以检测到它们,或者这不可能吗?
    【解决方案2】:

    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])
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多