【问题标题】:REST API in Google App Engine + Python?Google App Engine + Python 中的 REST API?
【发布时间】:2013-10-15 07:01:41
【问题描述】:

如何使用带有 Python 的 Google App Engine 创建一个 RESTful API?我尝试过使用 Cloud Endpoints,但文档并不关注 RESTful API。有没有类似于 GAE 的 django-tastypie 的东西?

【问题讨论】:

  • 试试看一下 protorpc 服务。端点建立在它们之上,写起来还不错。
  • 您可以在 GAE 上使用 Django,以便直接为您工作。
  • 您可以使用大量不同的微框架构建restful api。我个人不使用 webapp(2),但 bobo 用于此类应用程序。
  • 我也对这个答案感兴趣。我们仍然需要使用答案中列出的第三方库还是谷歌云端点现在支持 REST?谷歌文档中的哪个地方是说 ProtoRPC 不是 RESTful 的?

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


【解决方案1】:

https://github.com/mevinbabuc/Restify

这是我制作的一个轻量级模块,它的作用类似于 appengine 的 ReST 接口。 您所要做的就是在 ReSTify/models.py 中定义模型。

您还可以轻松添加身份验证,而无需进行太多调整。

你要做的就是开始

import webapp2

import ReSTify

application = webapp2.WSGIApplication(
    [
        ('/api/.*', ReSTify.ReST),
        ],
    debug=True)

【讨论】:

    【解决方案2】:

    RESTful api 可以基于 EndPoint API 构建。有一些工具可以帮助您使事情变得更简单:

    appengine 休息服务器(不基于端点)

    Google App Engine 应用程序的嵌入式服务器,无需额外工作即可通过 REST API 公开您的数据模型。

    https://code.google.com/p/appengine-rest-server/

    另一个是基于端点的

    通过扩展 ndb.Model 类和端点库提供的功能,该库允许您在 API 方法中直接与模型实体进行交互,而不是使用 ProtoRPC 请求。例如,而不是:

    https://github.com/GoogleCloudPlatform/endpoints-proto-datastore

    编辑1:

    我为端点编写了一个 RESTFul api 生成器。

    # generate restful api in one line
    BigDataLab = EndpointRestBuilder(GPCode).build(
        api_name="BigDataLab",
        name="bigdatalab",
        version="v1",
        description="My Little Api"
    )
    

    回购: https://github.com/Tagtoo/endpoints-proto-datastore-rest

    【讨论】:

    • 太棒了!我正在使用 Appengine 休息服务器。但是验证器和授权器必须手动实现。你能给我指出一些相同的资源吗?
    【解决方案3】:

    https://github.com/budowski/rest_gae

    我已经通过 webapp2 为 NDB 模型创建了一个成熟的 REST API。包括权限处理等等。

    很想听听你的想法:

    class MyModel(ndb.Model):
      property1 = ndb.StringProperty()
      property2 = ndb.StringProperty()
      owner = ndb.KeyPropertyProperty(kind='User')
    
      class RESTMeta:
        user_owner_property = 'owner' # When a new instance is created, this property will be set to the logged-in user
        include_output_properties = ['property1'] # Only include these properties for output
    
    app = webapp2.WSGIApplication([
        # Wraps MyModel with full REST API (GET/POST/PUT/DELETE)
        RESTHandler(
          '/api/mymodel', # The base URL for this model's endpoints
          MyModel, # The model to wrap
          permissions={
            'GET': PERMISSION_ANYONE,
            'POST': PERMISSION_LOGGED_IN_USER,
            'PUT': PERMISSION_OWNER_USER,
            'DELETE': PERMISSION_ADMIN
          },
    
          # Will be called for every PUT, right before the model is saved (also supports callbacks for GET/POST/DELETE)
          put_callback=lambda model, data: model
        ),
    
        # Optional REST API for user management
        UserRESTHandler(
            '/api/users',
            user_model=MyUser, # You can extend it with your own custom user class
            user_details_permission=PERMISSION_OWNER_USER,
            verify_email_address=True,
            verification_email={
                'sender': 'John Doe <john@doe.com>',
                'subject': 'Verify your email address',
                'body_text': 'Click here {{ user.full_name }}: {{ verification_url }}',
                'body_html': '<a href="{{ verification_url }}">Click here</a> {{ user.full_name }}'
                },
            verification_successful_url='/verification_successful',
            verification_failed_url='/verification_failed',
            reset_password_url='/reset_password',
            reset_password_email={
                'sender': 'John Doe <john@doe.com>',
                'subject': 'Please reset your password',
                'body_text': 'Reset here: {{ verification_url }}',
                'body_html': '<a href="{{ verification_url }}">Click here</a> to reset'
                },
            )
    ], debug=True, config=config)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2012-01-06
    • 2017-10-12
    相关资源
    最近更新 更多