Objets Response

Vue d'ensemble

Tous les services produisent des réponses par le biais de leur attribut self.response. Contrairement aux requêtes, il n'y a pas de sous-attributs spécifiques au protocole.

La façon la plus générale de créer une réponse, et celle qui est toujours possible, est d'assigner une chaîne ou un objet Unicode à self.response.payload, par exemple à la suite d'une sérialisation manuelle.

Cependant, si vous utilisez SimpleIO ou si la définition d'un canal est JSON ou XML, il est également possible pour Zato de sérialiser directement les objets. Zato peut également sérialiser des objets directement, par exemple à partir de dicts ou d'objets SQLAlchemy.

Attributs de la réponse

Tous les attributs et toutes les méthodes sont toujours disponibles pour tous les services, quel que soit le protocole par lequel ils sont invoqués. Toutefois, dans le cas des attributs spécifiques à HTTP, leur utilisation sera impossible si le service n'est pas invoqué par HTTP.

Attribut Description
self.response L'attribut principal par lequel les réponses sont produites
self.response.payload L'objet auquel les réponses sont attribuées, c'est-à-dire l'attribut par lequel les données commerciales d'un service sont renvoyées, comme un message JSON.
self.response.status_code (HTTP uniquement) Un code d'état entier tel que 200 ou 401 à renvoyer en réponse.
self.response.content_encoding (HTTP uniquement) Définit la valeur de l'en-tête Content-Encoding de la réponse.
self.response.content_type (HTTP uniquement) Définit la valeur de l'en-tête Content-Type de la réponse.
self.response.headers (HTTP uniquement) Un dictionnaire de nom/valeur d'en-tête à définir dans la réponse.

self.response.payload

L'attribution à self.response.payload permet de renvoyer les réponses des services. Cela peut être fait de plusieurs façons :

En assignant directement un objet string/unicode. Cette approche est toujours disponible :

def handle(self):
    self.response.payload = '{"id":123, "name":"John Doe"}'

Si vous utilisez SimpleIO, tous les attributs peuvent être assignés tels qu'ils apparaissent dans la définition de SimpleIO, soit un, soit un dictionnaire, soit une liste. La sérialisation en JSON ou XML sera effectuée automatiquement par Zato, en fonction de la définition du canal du service.

def handle(self):
    self.response.payload = {'id':123, 'name':'John Doe'}
Pour renvoyer une liste d'objets, attachez-la à self.response.payload, comme ci-dessus :

def handle(self):
    data = [
        {'id':123, 'name': 'John Doe'},
        {'id':456, 'name': 'Jane Xi'},
    ]
    self.response.payload = data

Attribuer des attributs individuellement:

def handle(self):
    self.response.payload.id = 123
    self.response.payload.name = 'John Doe'

Si vous utilisez SimpleIO, il est également possible d'attribuer des objets SQLAlchemy directement à partir d'une requête SQL:

  def handle(self):

      # Get user from database
      user = session.query(UserModel).\
        filter(UserModel.id==123).\
        one()

      # Assign the user object directly to response
      self.response.payload = user

Exemples

  • Consultez le chapitre dédié avec des exemples de programmation pour plus de détails.
  • Pour en savoir plus sur SimpleIO, cliquez ici.
  • Visitez ce chapitre pour en savoir plus sur les objets de requête.