web-dev-qa-db-ja.com

REST Google App Engine + PythonのAPI?

PythonでGoogle App Engineを使用してRESTful APIを作成するにはどうすればよいですか? Cloud Endpointsを使用してみましたが、ドキュメントはRESTful APIに焦点を当てていません。 GAEのDjango-tastypieに似たものはありますか?

19
TeknasVaruas

RESTful APIは、EndPoint APIに基づいて構築できます。物事を簡単にするのに役立ついくつかのツールがあります。

appengineレストサーバー(エンドポイントに基づいていない)

REST APIを介して追加の作業なしでデータモデルを公開するGoogle App Engineアプリケーション用のドロップインサーバー。

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

もう1つはエンドポイントに基づいています

Ndb.Modelクラスとエンドポイントライブラリによって提供される機能を拡張することにより、このライブラリを使用すると、ProtoRPCリクエストではなく、APIメソッドのモデルエンティティを直接操作できます。たとえば、次の代わりに:

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

12
lucemia

https://github.com/budowski/rest_gae

本格的なREST webapp2を介したNDBモデル用の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 <[email protected]>',
            '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 <[email protected]>',
            '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)
9
Yaron Budowski

https://github.com/mevinbabuc/Restify

これは私が作成した軽量モジュールで、appengineのReSTインターフェースのように機能します。 ReSTify/models.pyでモデルを定義するだけです。

また、あまり手を加えることなく簡単に認証を追加することもできます。

始めるためにあなたがしなければならないのは

import webapp2

import ReSTify

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