Prise en charge de JSONP dans le domaine JSON

JSONP (JavaScript Object Notation with Padding) est une extension du format JSON ( JavaScript Object Notation).

IBM® Integration Bus prend en charge les services JSONP. Un service JSONP, ou service JSON distant, est un service Web qui renvoie des données JSON complétées par un appel de fonction JavaScript défini par l'utilisateur. Le message de réponse JSONP peut être interprété comme un script exécutable, de sorte que cette fonctionnalité peut être utilisée pour créer des appels de fonction interdomaine.

Par exemple :
http://brokerhost:7080/flowUrlPathSuffix?jsonp=scriptFn
Cette URL inclut une chaîne de requête, où:
  • jsonp indique au service JSONP que toute réponse de l'URL doit être renvoyée sous forme de message JSONP
  • scriptFn est le nom d'une fonction exécutable côté client
Les réponses à l'URL seraient donc au format JSONP:
scriptFn(response)

L'arborescence de messages JSON fournit un élément Padding de niveau supérieur dans lequel l'analyseur syntaxique JSON place le nom de la fonction JSONP côté client. De même, le sérialiseur JSON remplit un message JSON si l'élément de niveau supérieur Padding est présent dans l'arborescence.

Pour plus d'informations sur JSON, voir JSON parser and domain.

Pour plus d'informations sur l'utilisation d' IBM Integration Bus pour fournir un service JSONP, voir Fourniture d'un service JSONP.

Pour plus d'informations sur l'utilisation d' IBM Integration Bus pour consommer une réponse de service JSONP, voir Consommation d'une réponse de service JSONP.

Exemple de message JSONP

L'exemple suivant illustre un message JSONP simple:

scriptFn (
    {
        "name" : "John Doe",
        "age" : -1.0,
        "known" : false,
        "address" : { "street" : null,
                      "city" : "unknown" },
        "belongings" : ["item1", "item2", "item3"]
    }
)

Cette entrée JSONP génère l'arborescence de messages logique de noeud d'intégration suivante:

  (0x01000000:Object):JSON            = ( ['json' : 0xd55fc8]
    (0x03000000:NameValue):Padding = 'scriptFn' (CHARACTER)
    (0x01000000:Object   ):Data    = (
      (0x03000000:NameValue):name       = 'John Doe' (CHARACTER)
      (0x03000000:NameValue):age        = -1E+0 (FLOAT)
      (0x03000000:NameValue):known      = FALSE (BOOLEAN)
      (0x01000000:Object   ):address    = (
        (0x03000000:NameValue):street = NULL
        (0x03000000:NameValue):city   = 'unknown' (CHARACTER)
      )
      (0x01001000:Array    ):belongings = (
        (0x03000000:NameValue):Item = 'item1' (CHARACTER)
        (0x03000000:NameValue):Item = 'item2' (CHARACTER)
        (0x03000000:NameValue):Item = 'item3' (CHARACTER)
      )
    )
  )