TurboGears - Applications RESTful

REST signifie REprésentation State Ttransfert. REST est une architecture basée sur des normes Web et utilise le protocole HTTP pour la communication de données. Il tourne autour d'une ressource où chaque composant est une ressource et une ressource est accessible par une interface commune à l'aide de méthodes standard HTTP. REST a été introduit pour la première fois parRoy Fielding in 2000.

Qu'est-ce qu'un RestController

RestController dans TurboGears fournit un mécanisme pour accéder à la méthode de la requête, pas seulement à l'URL. Le verbiage HTTP standard comprend: GET, POST, PUT et DELETE. Le RestController prend en charge ces derniers, et ajoute également quelques raccourcis pour l'envoi d'URL qui rend l'affichage des données sous forme de formulaires et de listes, un peu plus facile pour l'utilisateur.

Pour expliquer comment RESTful fonctionne avec TurboGears, nous allons définir un service Web simple qui expose une liste d'étudiants.

Le code du modèle étudiant est donné ci-dessous -

modèle \ étudiant.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 = '')

Créez maintenant un contrôleur basé sur RestController et fournissez une fonction d'affichage pour lister la liste des étudiants au format json.

Contrôleurs \ 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)

Montez ce StudentController dans RootController de l'application en incorporant les lignes suivantes dans root.py -

from hello.controllers.student import StudentController

class RootController(BaseController):

   students = StudentController()

Aller à la http://localhost:8080/students il fournira la liste de nos étudiants encodée au format json.

Nous utilisons la méthode post pour définir comment nous allons enregistrer notre étudiant dans la base de données. Cette méthode est appelée chaque fois que le http://localhost:8080/student L'URL est accessible à l'aide d'une requête 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)

En utilisant le get_one() méthode, nous pouvons afficher un élément de la base de données à l'utilisateur -

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

PUT est la méthode utilisée pour mettre à jour un enregistrement existant à l'aide de 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)

Le cheval de bataille de la suppression est attaché à la méthode post_delete. Ici, nous supprimons réellement l'enregistrement de la base de données, puis nous le redirigeons vers la page de liste -

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