TurboGears - Aplicativos RESTful
REST significa REapresentacional STate Transfer. REST é uma arquitetura baseada em padrões da web e usa protocolo HTTP para comunicação de dados. Ele gira em torno de um recurso em que cada componente é um recurso e um recurso é acessado por uma interface comum usando métodos padrão HTTP. REST foi introduzido pela primeira vez porRoy Fielding in 2000.
O que é um RestController
O RestController no TurboGears fornece um mecanismo para acessar o método da solicitação, não apenas a URL. A verborragia HTTP padrão inclui: GET, POST, PUT e DELETE. O RestController suporta isso, e também adiciona alguns atalhos para envio de URL que torna a exibição dos dados como formulários e listas, um pouco mais fácil para o usuário.
Para explicar como o RESTful funciona com o TurboGears, vamos definir um serviço da web simples que expõe uma lista de alunos.
O código para o modelo do aluno é fornecido abaixo -
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 = '')
Agora crie um controlador com base no RestController e forneça uma função de visualização para listar a lista de alunos no formato json.
Controladores \ 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)
Monte este StudentController no RootController do aplicativo, incorporando as seguintes linhas em root.py -
from hello.controllers.student import StudentController
class RootController(BaseController):
students = StudentController()
Indo para o http://localhost:8080/students ele fornecerá a lista de nossos alunos codificados no formato json.
Usamos o método post para definir como vamos salvar nosso aluno no banco de dados. Este método é chamado sempre que o http://localhost:8080/student url é acessado usando uma solicitação 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 o get_one() método, podemos exibir um item do banco de dados para o usuário -
@expose('json')
def get_one(self, movie_id):
newstudent = DBSession.query(student).get(uid)
return dict(movie = movie)
PUT é o método usado para atualizar um registro existente usando 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)
O cavalo de batalha da exclusão é anexado ao método post_delete. Aqui, removemos o registro do banco de dados e redirecionamos de volta para a página de listagem -
@expose('json')
def post_delete(self, uid, **kw):
newstudent = DBSession.query(student).get(uid)
DBSession.delete(newstudent)
return dict(movie = newstudent.uid)