TurboGears - Applicazioni RESTful

REST sta per REpresentazionale State Ttrasferimento. REST è un'architettura basata su standard web e utilizza il protocollo HTTP per la comunicazione dei dati. Ruota attorno a una risorsa in cui ogni componente è una risorsa e una risorsa è accessibile da un'interfaccia comune utilizzando metodi standard HTTP. REST è stato introdotto per la prima volta daRoy Fielding in 2000.

Cos'è un RestController

RestController in TurboGears fornisce un meccanismo per accedere al metodo della richiesta, non solo all'URL. La verbosità HTTP standard include: GET, POST, PUT e DELETE. Il RestController li supporta e aggiunge anche alcune scorciatoie per l'invio di URL che rendono la visualizzazione dei dati come moduli ed elenchi, un po 'più semplice per l'utente.

Per spiegare come funziona RESTful con TurboGears, definiremo un semplice servizio web che espone un elenco di studenti.

Il codice per il modello studente è fornito di seguito:

model \ student.py

# -* - coding: utf-8 -*-
from sqlalchemy import *

from sqlalchemy.orm import mapper, relation, relation, backref
from sqlalchemy import Table, ForeignKey, Column
from sqlalchemy.types import Integer, Unicode, DateTime
from hello.model import DeclarativeBase, metadata, DBSession
from datetime import datetime

class student(DeclarativeBase):
   __tablename__ = 'student'
   
   uid = Column(Integer, primary_key = True)
   name = Column(Unicode(20), nullable = False, default = '')
   city = Column(Unicode(20), nullable = False, default = '')
   address = Column(Unicode(100), nullable = False, default = '')
   pincode = Column(Unicode(10), nullable = False, default = '')

Ora crea un controller basato su RestController e fornisci una funzione di visualizzazione per elencare l'elenco degli studenti in formato json.

Controllers \ student.py

from tg import RestController
from tg import expose
from hello import model
from hello.model import DBSession
from hello.model.student import student
from tg.decorators import with_trailing_slash

class StudentController(RestController):
   @expose('json')
   def get_all(self):
      students = DBSession.query(student).all()
      return dict(students=students)

Montare questo StudentController in RootController dell'applicazione incorporando le seguenti righe in root.py -

from hello.controllers.student import StudentController

class RootController(BaseController):

   students = StudentController()

Andando a http://localhost:8080/students fornirà l'elenco dei nostri studenti codificati in formato json.

Usiamo il metodo post per definire come dobbiamo salvare il nostro studente nel database. Questo metodo viene chiamato ogni volta che il file http://localhost:8080/student si accede all'URL utilizzando una richiesta POST -

@expose('json')
def post(self, name, city, address, pincode):
   newstudent = student(name = name, city = city, address = address, pincode = pincode)
   DBSession.add(newstudent)
   DBSession.flush()
   return dict(student = newstudent)

Usando il get_one() metodo, possiamo visualizzare un elemento dal database all'utente -

@expose('json')
def get_one(self, movie_id):
   newstudent = DBSession.query(student).get(uid)
   return dict(movie = movie)

PUT è il metodo utilizzato per aggiornare un record esistente utilizzando REST -

@expose('json')
def put(self, name = name, city = city, address =  address, pincode = pincode, **kw):
   newstudent = DBSession.query(student).get(name)
   newstudent.name = name
   newstudent.city = city
   newstudent.address = address
   newstudent.pincode = pincode
   return dict(student = newstudent)

Il cavallo di battaglia dell'eliminazione è allegato al metodo post_delete. Qui rimuoviamo effettivamente il record dal database e quindi reindirizziamo di nuovo alla pagina dell'elenco -

@expose('json')
def post_delete(self, uid, **kw):
   newstudent = DBSession.query(student).get(uid)
   DBSession.delete(newstudent)
   return dict(movie = newstudent.uid)