comparison mod_pubsub_post/README.markdown @ 4842:8d4b91a703af

mod_pubsub_post: Document JSON to XML mapping capability
author Kim Alvefur <zash@zash.se>
date Wed, 29 Dec 2021 23:12:43 +0100
parents 6bcccc63b542
children 18774cc621d6
comparison
equal deleted inserted replaced
4841:f69c5a443156 4842:8d4b91a703af
104 local pubsub = mod_pubsub.service; 104 local pubsub = mod_pubsub.service;
105 105
106 pubsub:create("princely_musings", true); 106 pubsub:create("princely_musings", true);
107 pubsub:set_affiliation("princely_musings", true, "127.0.0.1", "publisher"); 107 pubsub:set_affiliation("princely_musings", true, "127.0.0.1", "publisher");
108 ``` 108 ```
109
110 ## Data mappings
111
112 The datamapper library added in trunk allows posting JSON and having it
113 converted to XML based on a special JSON Schema.
114
115 ``` json
116 {
117 "properties" : {
118 "content" : {
119 "type" : "string"
120 },
121 "title" : {
122 "type" : "string"
123 }
124 },
125 "type" : "object",
126 "xml" : {
127 "name" : "musings",
128 "namespace" : "urn:example:princely"
129 }
130 }
131 ```
132
133 And in the Prosody config file:
134
135 ``` lua
136 pubsub_post_mappings = {
137 princely_musings = "musings.json";
138 }
139 ```
140
141 Then, POSTing a JSON payload like
142
143 ``` json
144 {
145 "content" : "To be, or not to be: that is the question",
146 "title" : "Soliloquy"
147 }
148 ```
149
150 results in a payload like
151
152 ``` xml
153 <musings xmlns="urn:example:princely">
154 <title>Soliloquy</title>
155 <content>To be, or not to be: that is the question</content>
156 </musings>
157 ```
158
159 being published to the node.