restful - server python flask




Raccomandazioni del framework Python REST(web services)? (11)

C'è una lista da qualche parte di raccomandazioni di diversi framework REST basati su Python da utilizzare sul lato server per scrivere le tue API RESTful? Preferibilmente con pro e contro.

Non esitate ad aggiungere raccomandazioni qui. :)


Consiglio vivamente TurboGears o Bottle:

TurboGears:

  • meno prolisso di django
  • più flessibile, meno orientato all'HTML
  • ma: meno famoso

Bottiglia:

  • molto veloce
  • molto facile da imparare
  • ma: minimalista e non maturo



Mi piace molto CherryPy . Ecco un esempio di un servizio web riposante:

import cherrypy
from cherrypy import expose

class Converter:
    @expose
    def index(self):
        return "Hello World!"

    @expose
    def fahr_to_celc(self, degrees):
        temp = (float(degrees) - 32) * 5 / 9
        return "%.01f" % temp

    @expose
    def celc_to_fahr(self, degrees):
        temp = float(degrees) * 9 / 5 + 32
        return "%.01f" % temp

cherrypy.quickstart(Converter())

Questo sottolinea cosa mi piace veramente di CherryPy; questo è un esempio completamente funzionante che è molto comprensibile anche a qualcuno che non conosce il framework. Se si esegue questo codice, è possibile visualizzare immediatamente i risultati nel browser Web; ad es. visitando http://localhost:8080/celc_to_fahr?degrees=50 visualizzerà 122.0 nel browser web.


Non sono un esperto del mondo Python, ma ho utilizzato Django che è un eccellente framework web e può essere usato per creare un framework riposante.


Non vedo alcun motivo per usare Django solo per esporre una API REST, ci sono soluzioni più leggere e flessibili. Django porta un sacco di altre cose sul tavolo, che non sono sempre necessarie. Di sicuro non è necessario se si desidera esporre solo del codice come servizio REST.

La mia esperienza personale, secondo me, è che una volta che hai una struttura unica, inizierai a usare il suo ORM, i suoi plugin, ecc. Solo perché è facile, e in poco tempo si finisce per avere una dipendenza è molto difficile liberarsene.

La scelta di un framework web è una decisione difficile e eviterei di scegliere una soluzione stack completa solo per esporre una API REST.

Ora, se hai davvero bisogno / vuoi usare Django, allora Piston è un bel framework REST per le app di django.

Detto questo, CherryPy sembra davvero bello, ma sembra più RPC che REST.

Guardando gli esempi (non l'ho mai usato), probabilmente web.py è il migliore e più pulito se hai solo bisogno di REST.


Sembra che tutti i tipi di framework web Python possano ora implementare interfacce RESTful.

Per Django, oltre al tastypie e al pistone, il framework django-rest è un promettente degno di menzione. Ho già migrato senza problemi uno dei miei progetti.

Il framework Django REST è un framework REST leggero per Django, che mira a semplificare la creazione di API Web RESTful ben collegate e auto-descrittive.

Esempio veloce:

from django.conf.urls.defaults import patterns, url
from djangorestframework.resources import ModelResource
from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from myapp.models import MyModel

class MyResource(ModelResource):
    model = MyModel

urlpatterns = patterns('',
    url(r'^$', ListOrCreateModelView.as_view(resource=MyResource)),
    url(r'^(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyResource)),
)

Prendete l'esempio dal sito ufficiale, tutti i codici di cui sopra forniscono api, documenti auto spiegati (come il servizio web basato su soap) e persino sandbox per testare un po '. Molto comodo.

Collegamenti: http://django-rest-framework.org/


Sorpreso, nessuno ha menzionato la flask .

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Stiamo usando Django per i servizi web RESTful.

Da notare che - Django non ha un'autenticazione abbastanza precisa per le nostre esigenze. Abbiamo usato l' interfaccia Django-REST , che ha aiutato molto. [Da allora abbiamo laminato il nostro perché avevamo creato così tante estensioni che era diventato un incubo di manutenzione.]

Abbiamo due tipi di URL: gli URL "html" che implementano le pagine HTML orientate all'uomo e gli URL "json" che implementano l'elaborazione orientata ai servizi web. Le nostre funzioni di visualizzazione spesso assomigliano a questo.

def someUsefulThing( request, object_id ):
    # do some processing
    return { a dictionary with results }

def htmlView( request, object_id ):
    d = someUsefulThing( request, object_id )
    render_to_response( 'template.html', d, ... )

def jsonView( request, object_id ):
    d = someUsefulThing( request, object_id )
    data = serializers.serialize( 'json', d['object'], fields=EXPOSED_FIELDS )
    response = HttpResponse( data, status=200, content_type='application/json' )
    response['Location']= reverse( 'some.path.to.this.view', kwargs={...} )
    return response

Il punto è che le funzionalità utili sono prese in considerazione dalle due presentazioni. La presentazione JSON di solito è solo un oggetto che è stato richiesto. La presentazione HTML include spesso tutti i tipi di aiuti alla navigazione e altri indizi contestuali che aiutano le persone a essere produttive.

Le funzioni di jsonView sono tutte molto simili, il che può essere un po 'fastidioso. Ma è Python, quindi rendili parte di una classe callable o scrivi decoratori se ti aiuta.


Vedi wiki di Python Web Framework .

Probabilmente non hai bisogno dei framework completi dello stack , ma la lista rimanente è ancora piuttosto lunga.


web2py include il supporto per creare facilmente API RESTful, descritte here e here (video). In particolare, guarda parse_as_rest , che ti consente di definire i pattern di URL che la richiesta di mapping args alle query del database; e smart_query , che consente di passare query arbitrarie in linguaggio naturale nell'URL.





frameworks