2013-10-15 24 views
18

Wie erstellen Sie eine RESTful API mit Google App Engine mit Python? Ich habe versucht, Cloud Endpoints zu verwenden, aber die Dokumentation konzentriert sich nicht auf eine REST-konforme API. Gibt es für GAE etwas Ähnliches wie Django-Tastypie?REST-API in Google App Engine + Python?

+0

Versuchen Sie einen Blick auf ProtoRPC Dienste nehmen. Endpunkte sind auf ihnen gebaut und sie sind nicht schlecht zu schreiben. – grim

+0

können Sie Django auf GAE verwenden, damit das direkt für Sie funktioniert. –

+0

können Sie mit vielen verschiedenen Mikro-Frameworks erholsame APIs erstellen. Ich benutze persönlich nicht webapp (2), sondern bobo für diese Art von Anwendung. –

Antwort

11

Die RESTful API kann basierend auf der EndPoint API erstellt werden. Es gibt einige Tools können Sie die Dinge einfacher helfen:

appengine Rest-Server (nicht auf Endpunkten)

Drop-In-Server für Google App Engine-Anwendungen, die Ihr Datenmodell mit nicht über eine REST-API macht Extra Arbeit.

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

Ein anderes auf Endpunkte

Durch die Erweiterung der Funktionalität zur Verfügung gestellt von ndb.Model Klasse und die Endpunkte Bibliothek basiert, diese Bibliothek ermöglicht es Ihnen, direkt mit Modellentität zu interagieren in Ihrem API-Methoden anstelle von ProtoRPC-Anforderungen. Zum Beispiel statt:

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

EDIT1:

schrieb ich einen RESTful API Generator für Endpunkte.

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

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

+1

Großartig! Ich benutze den Appengine Rest Server. Der Authenticator und der Authorizer müssen jedoch manuell implementiert werden.Kannst du mich auf einige Ressourcen für dasselbe verweisen? – theG33k

1

https://github.com/mevinbabuc/Restify

Es ist ein leichtes Modul, das ich gemacht, die wie eine REST-Schnittstelle für appengine wirkt. Alles, was Sie tun müssten, ist nur die Modelle in ReSTify/models.py zu definieren.

Sie können die Authentifizierung auch einfach hinzufügen, ohne viel zu tun.

Um al was Sie tun müssen, um loszulegen

import webapp2 

import ReSTify 

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

https://github.com/budowski/rest_gae

ist ich ein vollwertiges REST-API für NDB Modelle über webapp2 erstellt haben. Umfasst die Handhabung von Berechtigungen und vieles mehr.

würde gerne Ihre Meinung hören:

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

das ist ausgezeichnet! Warum möchten Sie Endpoints nicht nutzen? – wprater

+0

@wprater, https://code.google.com/p/googleappengine/issues/detail?id=9384 dies könnte einer der Gründe sein ... – opensourcegeek

+0

@opensourcegeek Ich habe diese verwendet (https: // github .com/GoogleCloudPlatform/Endpoints-Proto-Datastore), weil ich Endpunkte verwenden wollte, aber diese Bibliothek sieht auch gut aus! – wprater