2013-10-15 6 views
18

Как создать RESTful API с помощью Google App Engine с Python? Я пытался использовать Cloud Endpoints, но документация не фокусируется на RESTful API. Есть ли что-то похожее на django-tastypie для GAE?REST API в Google App Engine + Python?

+0

Попробуйте взглянуть на ProtoRPC услуг. Конечные точки строятся поверх них, и писать их не так уж плохо. – grim

+0

вы можете использовать Django на GAE, чтобы он мог работать для вас напрямую. –

+0

вы можете построить успокоительные апи с кучами разных микроархивов. Я лично не использую webapp (2), но bobo для такого рода приложений. –

ответ

11

RESTful api можно построить на основе API EndPoint. Есть некоторые инструменты, которые помогут вам сделать вещи проще:

AppEngine остальное сервер (не основанный на конечных точках)

Drop-сервер для Google приложений App Engine, которая подвергает вашу модель данных через REST API с не Дополнительная работа.

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

Еще один основан на конечных точках

за счет расширения функциональных возможностей, предоставляемых классом ndb.Model и библиотеку конечных точек, эта библиотека позволяет напрямую взаимодействовать с модельными лицами в вашей API, а не запросы ProtoRPC. Например, вместо:

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

EDIT1:

Я написал успокоительный генератор апи для конечных точек.

# 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

+1

Отлично! Я использую сервер Appengine Rest. Но аутентификатор и авторизатор должны быть выполнены вручную.Можете ли вы указать мне некоторые ресурсы для того же? – theG33k

1

https://github.com/mevinbabuc/Restify

Это легкий модуль, который я сделал, который действует как интерфейс ReST для AppEngine. Все, что вам нужно сделать, это просто определить модели в ReSTify/models.py.

Вы также можете легко добавить аутентификацию без необходимости настройки.

Для начала аль вам нужно сделать, это

import webapp2 

import ReSTify 

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

https://github.com/budowski/rest_gae

Я создал полноценный REST API для моделей NDB над webapp2. Включает обработку разрешений и многое другое.

хотелось бы услышать ваши мысли:

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) 
+0

это отлично! по какой причине вы не хотите использовать конечные точки? – wprater

+0

@wprater, https://code.google.com/p/googleappengine/issues/detail?id=9384 это может быть одной из причин ... – opensourcegeek

+0

@opensourcegeek Я закончил использовать этот (https: // github .com/GoogleCloudPlatform/endpoints-proto-datastore), потому что я хотел использовать конечные точки, но эта библиотека тоже выглядит великолепно! – wprater