Come creare un'API RESTful utilizzando Google App Engine con Python? Ho provato a utilizzare Cloud Endpoints, ma la documentazione non si concentra su un'API RESTful. C'è qualcosa di simile a django-tastypie per GAE?API REST in Google App Engine + Python?
risposta
L'API RESTful può essere costruita in base all'API EndPoint. Ci sono alcuni strumenti possono aiutare a fare le cose più semplici:
server di AppEngine riposo (non basata su endpoint)
Drop-in server per applicazioni Google App Engine, che espone il modello di dati tramite un API REST senza lavoro extra.
https://code.google.com/p/appengine-rest-server/
Un altro è basata su endpoint
Estendendo le funzionalità fornite da classe ndb.Model e la biblioteca endpoint, questa libreria consente di interagire direttamente con gli enti modello in vostro Metodi API anziché richieste ProtoRPC. Per esempio, invece di:
https://github.com/GoogleCloudPlatform/endpoints-proto-datastore
Edit1:
ho scritto un generatore RESTful API per gli endpoint.
# 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
Ottimo! Sto usando il Appengine Rest Server. Ma l'autenticatore e il programma di autorizzazione devono essere implementati manualmente.Puoi indicarmi alcune risorse per lo stesso? – theG33k
https://github.com/mevinbabuc/Restify
È un modulo leggero che ho fatto, che agisce come un'interfaccia riposo per appengine. Tutto quello che dovresti fare è definire i modelli in ReSTify/models.py.
È inoltre possibile aggiungere in autenticazione facilmente senza tweaking molto.
Per iniziare al quello che dovete fare è
import webapp2
import ReSTify
application = webapp2.WSGIApplication(
[
('/api/.*', ReSTify.ReST),
],
debug=True)
https://github.com/budowski/rest_gae
Ho creato un API REST a tutti gli effetti per i modelli NDB oltre webapp2. Include la gestione delle autorizzazioni e molto altro ancora.
Piacerebbe sentire i vostri pensieri:
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)
questo è eccellente! Qualche ragione si sceglie di non sfruttare gli endpoint? – wprater
@wprater, https://code.google.com/p/googleappengine/issues/detail?id=9384 questo potrebbe essere uno dei motivi ... – opensourcegeek
@opensourcegeek Ho finito per usare questo (https: // github .com/GoogleCloudPlatform/endpoints-proto-datastore), perché volevo utilizzare gli endpoint, ma anche questa libreria sembra fantastica! – wprater
provare a prendere uno sguardo a servizi protorpc. Gli endpoint sono costruiti sopra di essi e non sono troppo male da scrivere. – grim
puoi utilizzare Django su GAE in modo che possa funzionare direttamente per te. –
è possibile creare API riposanti con heap di micro framework diversi. Personalmente non uso webapp (2) ma bobo per questo tipo di applicazione. –