Wiki source code of The XWiki RESTful API

Version 17.2 by Vincent Massol on 2009/12/17

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}{{toc depth="2"/}}{{/box}}
2
3 XWiki provides fine-grain access to virtually every element through an API that is based on HTTP semantics, i.e., a RESTful API. In this page you will find all the details to take advantage of this API and the instructions to use it at its full potential.
4
5 = Accessing the service=
6
7 By defaut the XWiki RESTful API entrypoint is rooted at the following URI:
8
9 {{code}}
10
11 http://host:port/xwiki/rest
12
13 {{/code}}
14
15 All the resource references described in the [[XWiki RESTful API Documentation>>#HXWikiRESTfulAPIDocumentation]] should be intended relative to this URL.
16
17 For example the, the ##/wikis## resources on a server running on ##localhost## on port ##8080## can be retrieved using the following URL : ##http:~//localhost:8080/xwiki/rest/wikis##
18
19 = Dataset =
20
21 This section contains a brief and high-level description of the XWiki data set that should serve as a basis for presenting resources and their associated operations.
22
23 XWiki has **pages** organized in **spaces**. Each **page** is available in multiple **versions** (its **history**) and **translations**. Translated pages have their own **versions** and **history** which are independent. Each page might have **attachments**. Each attachment has its own **history**. Attachments are shared among all the different translations of a page (i.e., the same set of attachments is the same regardless of the page language). Pages can have one or more **objects**. Objects are instances of a **class** that contains a set of **properties**. Some objects might be directly exposed as first class entities, such as **comments** and **tags**. Objects, as attachments, are shared among all page translations.
24
25 = Understanding resources and representations =
26
27 "An important concept in REST is the existence of resources (sources of specific information), each of which is referenced with a global identifier (e.g., an URI in HTTP). In order to manipulate these resources, components of the network (user agents and origin servers) communicate via a standardized interface (e.g., HTTP) and exchange representations of these resources (the actual documents conveying the information)." ([[Wikipedia>>http://en.wikipedia.org/wiki/Representational_State_Transfer#REST.27s_central_principle:_resources]])
28
29 Resources in XWiki are pages, attachments, objects, properties, spaces, and all the //things// we described in the previous section. XWiki has a default way of conveying the information about these resources, i.e., by providing well defined XML representations that contain all the information associated to the resource in an XML format. This format is described using an XML Schema Definition file that can be found here: [[http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-rest/src/main/resources/xwiki.rest.model.xsd]]
30
31 Of course the same resource can be represented in many different ways. This is yet to be documented.
32
33 Another important aspect of representations is that they contain useful information for linking related resources. This is a realization of the //Hypermedia As The Engine Of The Application State (HATEOAS)// principle. In XML representations this information is conveyed through the ##<link>## tag. This tag has two important parameters: **rel** and **href**. **rel** specifies the "semantics" of the link, while **href** is the URI of the linked resource.
34
35 For example, in the representation of a page, we can have links to the comments, tags, attachments which are independent resources associated to the current page. These links are provided in the XML representation of a page and allow a client to navigate to related resources... Like we do every day when we click on a link in a web page.
36
37 [[image:representation||height="430"]]
38
39 == Relations ==
40
41 The available relations that you might find in the XML resource representations are the following:
42
43 |=Rel|=Semantics
44 |{{{http://www.xwiki.org/rel/wikis}}}|The representation containing the list of virtual wikis.
45 |{{{http://www.xwiki.org/rel/spaces}}}|The representation containing the list of spaces in a wiki.
46 |{{{http://www.xwiki.org/rel/pages}}}|The representation containing the list of pages in a space.
47 |{{{http://www.xwiki.org/rel/translation}}}|The representation containing a translation of a page.
48 |{{{http://www.xwiki.org/rel/page}}}|The representation for a page.
49 |{{{http://www.xwiki.org/rel/space}}}|The representation for a space.
50 |{{{http://www.xwiki.org/rel/parent}}}|The representation for the page that is parent of the current resource.
51 |{{{http://www.xwiki.org/rel/home}}}|The representation for the page that is the home of the current resource.
52 |{{{http://www.xwiki.org/rel/attachmentData}}}|The representation of the actual attachment data.
53 |{{{http://www.xwiki.org/rel/comments}}}|The representation of the list of comments associated to the current resource.
54 |{{{http://www.xwiki.org/rel/attachments}}}|The representation of the list of attachments associated to the current resource.
55 |{{{http://www.xwiki.org/rel/objects}}}|The representation of the list of objects associated to the current resource.
56 |{{{http://www.xwiki.org/rel/object}}}|The representation for an object.
57 |{{{http://www.xwiki.org/rel/classes}}}|The representation of the list of classes associated to the current resource.
58 |{{{http://www.xwiki.org/rel/history}}}|The representation of the list of history information associated to the current resource.
59 |{{{http://www.xwiki.org/rel/class}}}|The representation for a class.
60 |{{{http://www.xwiki.org/rel/property}}}|The representation for a property.
61 |{{{http://www.xwiki.org/rel/properties}}}|The representation of the list of properties associated to the current resource.
62 |{{{http://www.xwiki.org/rel/modifications}}}|The representation of the list of modifications associated to the current resource.
63 |{{{http://www.xwiki.org/rel/children}}}|The representation of the list of children associated to the current resource.
64 |{{{http://www.xwiki.org/rel/tags}}}|The representation of the list of tags associated to the current resource.
65 |{{{http://www.xwiki.org/rel/tag}}}|The representation of a tag.
66 |{{{http://www.xwiki.org/rel/search}}}|The representation for a search resource.
67
68 Relations are defined as URIs in order to provide a sort of namespace. Currently these URIs are not links to real web pages but, in the future, they might point to descriptions of their semantics on actual web pages (or other kinds of representations).
69
70 == The "HATEOAS" Graph ==
71
72 In order to better understand the relations among resources you might have a look at this [[graph>>attach:XWikiHATEOAS.pdf||]] that pictures all the resources available in the XWiki RESTful API and the relations among them. In this graph, nodes are [[URI templates>>http://bitworking.org/projects/URI-Templates/spec/draft-gregorio-uritemplate-03.txt]] representing classes of resources. Edges are the possible links that you might find in a representation of a given resource, and their associated relations.
73
74 This graph shows that by starting from the API entry-point a client can navigate and discover all the resources just by following the links provided in representations (and by knowing their semantics). This was exactly the way how this graph was generated.
75
76 = Interacting with the XWiki RESTful API =
77
78 The XWiki RESTful API is accessible through HTTP so, in principle, you can use every client that is capable of "speaking" HTTP in order to interact with it. Even a web browser!
79 If you want to write more complex programs you might download an HTTP library for your favorite language (e.g., [[http://hc.apache.org/]]).
80
81 Java users might take advantage of the [[JAXB>>https://jaxb.dev.java.net]] framework and its [[XJC binding compiler>>https://jaxb.dev.java.net/jaxb20-ea3/docs/xjc.html]] in order to generate domain object models directly from the [[XML Schema Definition>>http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-rest/src/main/resources/xwiki.rest.model.xsd]], and use them for serializing and de-serializing XML representations.
82
83 If you use this approach (Apache HTTP Client + JAXB) you will find yourself writing some code like this:
84
85 {{code language="none"}}
86 HttpClient httpClient = new HttpClient();
87 JAXBContext context = JAXBContext.newInstance("model.package");
88 unmarshaller = context.createUnmarshaller();
89
90 GetMethod getMethod = new GetMethod("http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/WebHome");
91 getMethod.addRequestHeader("Accept", "application/xml");
92 httpClient.executeMethod(getMethod);
93
94 Page page = (Page) unmarshaller.unmarshal(getMethod.getResponseBodyAsStream());
95 {{/code}}
96
97 And you will have all the information about the Main.WebHome page in the Page object, without the need of handling XML directly.
98
99 Because of the wide variety of HTTP frameworks available we don't provide a full tutorial about using them. However, in order to show you how to interact with the XWiki RESTful API, we will use [[curl>>http://curl.haxx.se]]: a standard command line HTTP client that provides an interface to all the functionalities of the HTTP protocol.
100
101 By using curl, the previous example would have been:
102
103 {{code language="none"}}
104 $ curl http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/WebHome
105 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
106 <page xmlns="http://www.xwiki.org">
107 <link rel="http://www.xwiki.org/rel/space" href="http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main"/>
108 ...
109 {{/code}}
110
111 == Authentication ==
112
113 The XWiki RESTful API supports two types of authentication:
114
115 * **HTTP BASIC Auth**: You provide your credentials using the Authorization HTTP header
116 * **XWiki session**: If you are logged in XWiki and you use the cookies provided by the authentication mechanism, you will also be authenticated to the XWiki RESTful API. This is useful, for example, when you are interacting with the API using the XMLHttpRequest object of a browser using Javascript.
117
118 If you don't provide any credentials the XWiki RESTful API will recognize you as a XWiki.Guest user.
119
120 So if you have, let's say a Main.PrivatePage, and you try to do:
121
122 {{code language="none"}}
123 $ curl -v http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/PrivatePage
124 ...
125 < HTTP/1.1 401 Unauthorized
126 ...
127 {{/code}}
128
129 You will get an Unauthorized empty response.
130
131 On the contrary, by specifying Admin credentials you gain access to the actual page:
132
133 {{code language="none"}}
134 $ curl -u Admin:admin http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/PrivatePage
135 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
136 <page xmlns="http://www.xwiki.org">
137 <link rel="http://www.xwiki.org/rel/space" href="http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main"/>
138 ...
139 <content>Only admin can see this</content>
140 </page>
141 {{/code}}
142
143 == Sending representations ==
144
145 Many resources are modifiable, so you can send representations in order to change the state of those resources (e.g., pages).
146 All modifiable resources accept XML representations that conform to the [[XML Schema Definition>>http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-rest/src/main/resources/xwiki.rest.model.xsd]]. However, some other representations might be accepted as well (see the following sections).
147
148 Resource update is usually done by using the PUT method, while resource creation is done via PUT or POST.
149
150 For example, in order to create a page you might do the following:
151
152 {{code language="none"}}
153 $ curl -u Admin:admin -X PUT -d "@newpage.xml" -H "Content-Type: application/xml" http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/NewPage
154 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
155 <page xmlns="http://www.xwiki.org">
156 <link rel="http://www.xwiki.org/rel/space" href="http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main"/>
157 ...
158 <version>1.1</version>
159 <majorVersion>1</majorVersion>
160 <minorVersion>1</minorVersion>
161 <created>2009-03-21+01:00</created>
162 <creator>XWiki.Admin</creator>
163 <modified>2009-03-21+01:00</modified>
164 <modifier>XWiki.Admin</modifier>
165 <content>This is a new page</content>
166 </page>
167 {{/code}}
168
169 Where newpage.xml is an XML file containing
170
171 {{code language="none"}}
172 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
173 <page xmlns="http://www.xwiki.org">
174 <title>Hello world</title>
175 <content>This is a new page</content>
176 </page>
177 {{/code}}
178
179 The page has been created and is accessible. Subsequent PUT requests to the page URI will modify its content.
180
181 == Overcoming browser limitations ==
182
183 As said before, it could be useful to send information by using browser's XmlHttpRequest objects. However, currently many browsers only support GET and POST methods, so it is impossible to send, for example, PUT requests. In order to overcome this limitation you can override the HTTP Method by specifying a ##method## parameter in the URI query string.
184
185 In the previous example, if you send a POST request to the ##[[http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/NewPage?method=PUT]]## it will be interpreted as if it were an actual PUT request.
186
187 This overriding mechanism allows the interaction with the XWiki RESTful API by using any kind of browser.
188
189 == PUT vs POST ==
190
191 In the following sections you will see that sometimes resources are created by using PUT and sometimes by using POST. The general principle is that if the client is responsible for choosing the resource URI then PUT is used. If it's the server that bears this responsibility, then POST is used.
192
193 To be clearer, when a client wants to create a page it knows **where** that page should go, so it is able to communicate the server the target URI. PUT is used.
194
195 A client, on the contrary, cannot know beforehand what will be the URI of a comment, since comment URIs contains the ID of the comment and this information is generated by the server. In this case the client will do a POST and the server, in response, will communicate the URI it generated for the newly created comment.
196
197 = XWiki RESTful API Documentation =
198
199 In this section you will find the documentation of the whole XWiki RESTful API.
200
201 **application/xml** representations refers to the XML Schema Definition at the following location: [[http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-rest/src/main/resources/xwiki.rest.model.xsd]]
202
203 Resource URIs are specified using [[URI templates>>http://bitworking.org/projects/URI-Templates/spec/draft-gregorio-uritemplate-03.txt]]. Bracketed elements are formal parameters and should be instantiated to actual values in order to retrieve the associated resource.
204
205 == Root resources ==
206
207 By defaut all the resources of the RESTful API are rooted at the following URI: ##http:~//server:port/xwiki/rest/## (depending on where your XWiki is running)
208
209 === / ===
210
211 * **HTTP Method:** GET
212 ** **Media types:**
213 *** application/xml (XWiki element)
214 ** **Description:** Retrieves the entry root description containing information about the server.
215 ** **Status codes:**
216 *** 200: If the request was successful.
217
218 === /wikis ===
219
220 * **HTTP Method:** GET
221 ** **Media types:**
222 *** application/xml (Wikis element)
223 ** **Description:** Retrieves the entry root description containing information about the server.
224 ** **Status codes:**
225 *** 200: If the request was successful.
226
227 === /wikis/{wikiName}/search?q~={keywords}~[~[&scope~={name,content,title,objects}...~]&number~=n~] ===
228
229 * **HTTP Method:** GET
230 ** **Media types:**
231 *** application/xml (SearchResults element)
232 ** **Description:** The list of pages and objects that contain the {keywords} in the specified {scope}s. Multiple scopes can be specified. Search results are relative to the whole {wikiName}
233 ** **Status codes:**
234 *** 200: If the request was successful.
235
236 == Space resources ==
237
238 === /wikis/{wikiName}/spaces[?start~=offset&number~=n] ===
239
240 * **HTTP Method:** GET
241 ** **Media types:**
242 *** application/xml (Spaces element)
243 ** **Description:** Retrieves the list of spaces available in the {wikiName} wiki.
244 ** **Status codes:**
245 *** 200: If the request was successful.
246
247 === /wikis/{wikiName}/spaces/{spaceName}/search?q~={keywords}~[~[&scope~={name,content,title,objects}...~]&number~=n~] ===
248
249 * **HTTP Method:** GET
250 ** **Media types:**
251 *** application/xml (Search results element)
252 ** **Description:** The list of pages and objects that contain the {keywords} in the specified {scope}s. Multiple scopes can be specified. Search results are relative to space {spaceName}
253 ** **Status codes:**
254 *** 200: If the request was successful.
255 *** 401: If the user is not authorized.
256
257 == Page resources ==
258
259 === /wikis/{wikiName}/spaces/{spaceName}/pages[?start~=offset&number~=n] ===
260
261 * **HTTP Method:** GET
262 ** **Media types:**
263 *** application/xml (Pages element)
264 ** **Description:** The list of pages in the space {spaceName}
265 ** **Status codes:**
266 *** 200: If the request was successful
267 *** 401: If the user is not authorized.
268
269 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName} ===
270
271 * **HTTP Method:** GET
272 ** **Media types:**
273 *** application/xml (Page element)
274 ** **Description:**
275 ** **Status codes:**
276 *** 200: If the request was successful.
277 *** 401: If the user is not authorized.
278
279 \\
280
281 * **HTTP Method:** PUT
282 ** **Accepted Media types:**
283 *** application/xml (Page element)
284 *** text/plain (Only page content)
285 *** application/x-www-form-urlencoded (allowed field names: title, parent, content)
286 ** **Media types:**
287 *** application/xml (Page element)
288 ** **Description:** Create or updates a page.
289 ** **Status codes:**
290 *** 201: If the page was created.
291 *** 202: If the page was updated.
292 *** 304: If the page was not modified.
293 *** 401: If the user is not authorized.
294
295 \\
296
297 * **HTTP Method:** DELETE
298 ** **Media types:**
299 *** application/xml (Page element)
300 ** **Description:** Delete the page.
301 ** **Status codes:**
302 *** 204: If the request was successful.
303 *** 401: If the user is not authorized.
304
305 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history[?start~=offset&number~=n] ===
306
307 * **HTTP Method:** GET
308 ** **Media types:**
309 *** application/xml (History element)
310 ** **Description:** The list of all the versions of the given page.
311 ** **Status codes:**
312 *** 200: If the request was successful.
313 *** 401: If the user is not authorized.
314
315 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version} ===
316
317 * **HTTP Method:** GET
318 ** **Media types:**
319 *** application/xml (Page element)
320 ** **Description:** The page at version {version}
321 ** **Status codes:**
322 *** 200: If the request was successful.
323 *** 401: If the user is not authorized.
324
325 ==== /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/translations[?start~=offset&number~=n] ====
326
327 * **HTTP Method:** GET
328 ** **Media types:**
329 *** application/xml (Translations element)
330 ** **Description:** The list of available translation for the page
331 ** **Status codes:**
332 *** 200: If the request was successful.
333 *** 401: If the user is not authorized.
334
335 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/translations/{language} ===
336
337 * **HTTP Method:** GET
338 ** **Media types:**
339 *** application/xml (Page element)
340 ** **Description:** The page at in the given {language}.
341 ** **Status codes:**
342 *** 200: If the request was successful.
343 *** 401: If the user is not authorized.
344
345 \\
346
347 * **HTTP Method:** PUT
348 ** **Accepted Media types:**
349 *** application/xml (Page element)
350 *** text/plain (Only page content)
351 *** application/x-www-form-urlencoded (allowed field names: title, parent, content)
352 ** **Media types:**
353 *** application/xml (Page element)
354 ** **Description:** Create or updates a page translation.
355 ** **Status codes:**
356 *** 201: If the page was created.
357 *** 202: If the page was updated.
358 *** 304: If the page was not modified.
359 *** 401: If the user is not authorized.
360
361 \\
362
363 * **HTTP Method:** DELETE
364 ** **Media types:**
365 *** application/xml (Page element)
366 ** **Description:** Delete the page translation.
367 ** **Status codes:**
368 *** 204: If the request was successful.
369 *** 401: If the user is not authorized.
370
371 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/translations/{language}/history ===
372
373 * **HTTP Method:** GET
374 ** **Media types:**
375 *** application/xml (History element)
376 ** **Description:** The list of all the available revisions of the page in a given {language}.
377 ** **Status codes:**
378 *** 200: If the request was successful.
379 *** 401: If the user is not authorized.
380
381 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/translations/{lang}/history/{version} ===
382
383 * **HTTP Method:** GET
384 ** **Media types:**
385 *** application/xml (Page element)
386 ** **Description:** A page at a given {version} in a given {language}.
387 ** **Status codes:**
388 *** 200: If the request was successful.
389 *** 401: If the user is not authorized.
390
391 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/children ===
392
393 * **HTTP Method:** GET
394 ** **Media types:**
395 *** application/xml (Pages element)
396 ** **Description:** The list of the children of a given page.
397 ** **Status codes:**
398 *** 200: If the request was successful.
399 *** 401: If the user is not authorized.
400
401 == Tag resources ==
402
403 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/tags ===
404
405 * **HTTP Method:** GET
406 ** **Media types:**
407 *** application/xml (Tags element)
408 ** **Description:** List page tags.
409 ** **Status codes:**
410 *** 200: If the request was successful.
411 *** 401: If the user is not authorized.
412
413 \\
414
415 * **HTTP Method:** PUT
416 ** **Accepted Media types:**
417 *** application/xml (Tag element)
418 *** text/plain
419 *** application/x-www-form-urlencoded (allowed field names: tag)
420 ** **Media types:**
421 *** application/xml (Tags element)
422 ** **Description:** Add a tag to the page.
423 ** **Status codes:**
424 *** 202: If the request was successful.
425 *** 401: If the user is not authorized.
426
427 === /wikis/{wikiName}/tags ===
428
429 * **HTTP Method:** GET
430 ** **Media types:**
431 *** application/xml (Tags element)
432 ** **Description:** The list of all available tags
433 ** **Status codes:**
434 *** 200: If the request was successful.
435 *** 401: If the user is not authorized.
436
437 === /wikis/{wikiName}/tags/{tag1}[,{tag2},{tag3}...][?start~=offset&number~=n] ===
438
439 * **HTTP Method:** GET
440 ** **Media types:**
441 *** application/xml (Pages element)
442 ** **Description:** The list of pages having the specified tags.
443 ** **Status codes:**
444 *** 200: If the request was successful.
445 *** 401: If the user is not authorized.
446
447 == Comments resources ==
448
449 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/comments[?start~=offset&number~=n] ===
450
451 * **HTTP Method:** GET
452 ** **Media types:**
453 *** application/xml (Comments element)
454 ** **Description:** The list of comments on a given page.
455 ** **Status codes:**
456 *** 200: If the request was successful.
457 *** 401: If the user is not authorized.
458
459 \\
460
461 * **HTTP Method:** POST
462 ** **Accepted Media types:**
463 *** application/xml (Comment element)
464 *** text/plain
465 *** application/x-www-form-urlencoded (allowed field names: text)
466 ** **Media types:**
467 *** application/xml (Comment element)
468 ** **Description:** Create a comment on the given page.
469 ** **Status codes:**
470 *** 201: If the comment was created. (The Location header will contain the URI where the comment has been created.)
471 *** 401: If the user is not authorized.
472
473 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/comments/{commentId} ===
474
475 * **HTTP Method:** GET
476 ** **Media types:**
477 *** application/xml (Comment element)
478 ** **Description:** A specific comment on a page
479 ** **Status codes:**
480 *** 200: If the request was successful.
481 *** 401: If the user is not authorized.
482
483 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/comments ===
484
485 * **HTTP Method:** GET
486 ** **Media types:**
487 *** application/xml (Comments element)
488 ** **Description:** The list of comments at a specific page {version}.
489 ** **Status codes:**
490 *** 200: If the request was successful.
491 *** 401: If the user is not authorized.
492
493 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/comments/{commentId} ===
494
495 * **HTTP Method:** GET
496 ** **Media types:**
497 *** application/xml (Comment element)
498 ** **Description:** A comment at a specific page {version}.
499 ** **Status codes:**
500 *** 200: If the request was successful.
501 *** 401: If the user is not authorized.
502
503 == Attachments resources ==
504
505 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/attachments[?start~=offset&number~=n] ===
506
507 * **HTTP Method:** GET
508 ** **Media types:**
509 *** application/xml (Attachments element)
510 ** **Description:** The list of attachments of a given page.
511 ** **Status codes:**
512 *** 200: If the request was successful.
513 *** 401: If the user is not authorized.
514
515 === /wikis/{wikiName}/wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/attachments/{attachmentName} ===
516
517 * **HTTP Method:** GET
518 ** **Media types:**
519 *** The same of the attachment media type.
520 ** **Description:** The attachment identified by {attachmentName} on a given page.
521 ** **Status codes:**
522 *** 200: If the request was successful.
523 *** 401: If the user is not authorized.
524
525 \\
526
527 * **HTTP Method:** PUT
528 ** **Accepted media types:**
529 *** **/**
530 ** **Media types:**
531 *** application/xml (AttachmentSummary element)
532 ** **Description:** Create an attachment identified by {attachmentName} on a given page.
533 ** **Status codes:**
534 *** 201: If the attachment was created.
535 *** 202: If the attachment was updated.
536 *** 401: If the user is not authorized.
537
538 \\
539
540 * **HTTP Method:** DELETE
541 ** **Media types:**
542 ** **Description:** Delete the attachment identified by {attachmentName} on a given page.
543 ** **Status codes:**
544 *** 204: If the attachment was deleted.
545 *** 401: If the user is not authorized.
546
547 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/attachments[?start~=offset&number~=n] ===
548
549 * **HTTP Method:** GET
550 ** **Media types:**
551 *** application/xml (Attachments element)
552 ** **Description:** The list of attachments at a given page {version}.
553 ** **Status codes:**
554 *** 200: If the request was successful.
555 *** 401: If the user is not authorized.
556
557 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/attachments/{attachmentName} ===
558
559 * **HTTP Method:** GET
560 ** **Media types:**
561 *** The same of the attachment media type.
562 ** **Description:** The attachment identified by {attachmentName} on a given page {version}.
563 ** **Status codes:**
564 *** 200: If the request was successful.
565 *** 401: If the user is not authorized.
566
567 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/attachments/{attachmentName}/history ===
568
569 * **HTTP Method:** GET
570 ** **Media types:**
571 *** application/xml (??? element)
572 ** **Description:** The list of available version for the {attachmentName}
573 ** **Status codes:**
574 *** 200: If the request was successful.
575 *** 401: If the user is not authorized.
576
577 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/attachments/{attachmentName}/history/{version} ===
578
579 * **HTTP Method:** GET
580 ** **Media types:**
581 *** The same of the attachment media type.
582 ** **Description:** The {attachmentName} at a given {version}
583 ** **Status codes:**
584 *** 200: If the request was successful.
585 *** 401: If the user is not authorized.
586
587 == Object resources ==
588
589 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/objects[?start~=offset&number~=n] ===
590
591 * **HTTP Method:** GET
592 ** **Media types:**
593 *** application/xml (Objects element)
594 ** **Description:** The list of objects associated to a page.
595 ** **Status codes:**
596 *** 200: If the request was successful.
597 *** 401: If the user is not authorized.
598
599 \\
600
601 * **HTTP Method:** POST
602 ** **Accepted media types:**
603 *** application/xml (Object element)
604 *** application/x-www-formurlencoded (a set of property#name=value pairs representing properties and a field className)
605 ** **Media types:**
606 *** application/xml (Object element)
607 ** **Description:** Create a new object.
608 ** **Status codes:**
609 *** 201: If the object was created (The Location header will contain the URI associated to the newly created object).
610 *** 401: If the user is not authorized.
611
612 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/objects/{className}[?start~=offset&number~=n] ===
613
614 * **HTTP Method:** GET
615 ** **Media types:**
616 *** application/xml (Objects element)
617 ** **Description:** The list of objects of a given {className} associated to a page.
618 ** **Status codes:**
619 *** 200: If the request was successful.
620 *** 401: If the user is not authorized.
621
622 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/objects/{className}/{objectNumber} ===
623
624 * **HTTP Method:** GET
625 ** **Media types:**
626 *** application/xml (Object element)
627 ** **Description:** The object of type {className} identified by {objectNumber} associated to the given page.
628 ** **Status codes:**
629 *** 200: If the request was successful.
630 *** 401: If the user is not authorized.
631
632 \\
633
634 * **HTTP Method:** PUT
635 ** **Accepted media types:**
636 *** application/xml (Object element)
637 *** application/x-www-formurlencoded (a set of property#name=value pairs representing properties)
638 ** **Media types:**
639 *** application/xml (Object element)
640 ** **Description:** Modify the object properties.
641 ** **Status codes:**
642 *** 202: If the object was updated.
643 *** 401: If the user is not authorized.
644
645 \\
646
647 * **HTTP Method:** DELETE
648 ** **Media types:**
649 ** **Description:** Delete the object.
650 ** **Status codes:**
651 *** 204: If the object was deleted.
652 *** 401: If the user is not authorized.
653
654 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/objects/{className}/{objectNumber}/properties ===
655
656 * **HTTP Method:** GET
657 ** **Media types:**
658 *** application/xml (Properties element)
659 ** **Description:** The properties of the object of type {className} identified by {objectNumber} associated to the given page.
660 ** **Status codes:**
661 *** 200: If the request was successful.
662 *** 401: If the user is not authorized.
663
664 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/objects/{className}/{objectNumber}/properties/{propertyName} ===
665
666 * **HTTP Method:** GET
667 ** **Media types:**
668 *** application/xml (Properties element)
669 ** **Description:** The property {propertyname} of the object of type {className} identified by {objectNumber} associated to the given page.
670 ** **Status codes:**
671 *** 200: If the request was successful.
672 *** 401: If the user is not authorized.
673
674 \\
675
676 * **HTTP Method:** PUT
677 ** **Accepted media types:**
678 *** application/xml (Property element)
679 *** text/plain
680 *** application/x-www-formurlencoded (a field property#name=value pairs representing a property)
681 ** **Media types:**
682 *** application/xml (Property element)
683 ** **Description:** Modify the object properties.
684 ** **Status codes:**
685 *** 202: If the object was updated.
686 *** 401: If the user is not authorized.
687
688 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/objects[?start~=offset&number~=n] ===
689
690 * **HTTP Method:** GET
691 ** **Media types:**
692 *** application/xml (Objects element)
693 ** **Description:** The list of objects associated to a page at a given {version}.
694 ** **Status codes:**
695 *** 200: If the request was successful.
696 *** 401: If the user is not authorized.
697
698 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/objects/{className}/{objectNumber} ===
699
700 * **HTTP Method:** GET
701 ** **Media types:**
702 *** application/xml (Object element)
703 ** **Description:** The object of type {className} identified by {objectNumber} associated to the given page at a given {version}.
704 ** **Status codes:**
705 *** 200: If the request was successful.
706 *** 401: If the user is not authorized.
707
708 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/objects/{className}/{objectNumber}/properties ===
709
710 * **HTTP Method:** GET
711 ** **Media types:**
712 *** application/xml (Properties element)
713 ** **Description:** The properties of the object of type {className} identified by {objectNumber} associated to the given page at a given {version}.
714 ** **Status codes:**
715 *** 200: If the request was successful.
716 *** 401: If the user is not authorized.
717
718 === /wikis/{wikiName}/spaces/{spaceName}/pages/{pageName}/history/{version}/objects/{className}/{objectNumber}/properties/{propertyName} ===
719
720 * **HTTP Method:** GET
721 ** **Media types:**
722 *** application/xml (Properties element)
723 ** **Description:** The property {propertyname} of the object of type {className} identified by {objectNumber} associated to the given page at a given {version}.
724 ** **Status codes:**
725 *** 200: If the request was successful.
726 *** 401: If the user is not authorized.
727
728 === /wikis/{wikiName}/class/{className}/objects ===
729
730 * **HTTP Method:** GET
731 ** **Media types:**
732 *** application/xml (Objects element)
733 ** **Description:** The list of all the objects of a given {className}.
734 ** **Status codes:**
735 *** 200: If the request was successful.
736 *** 401: If the user is not authorized.
737
738 == Class resources ==
739
740 === /wikis/{wikiName}/classes[?start~=offset&number~=n] ===
741
742 * **HTTP Method:** GET
743 ** **Media types:**
744 *** application/xml (Classes element)
745 ** **Description:** The list of all the classes defined in the wiki {wikiName}
746 ** **Status codes:**
747 *** 200: If the request was successful.
748 *** 401: If the user is not authorized.
749
750 === /wikis/{wikiName}/classes/{className} ===
751
752 * **HTTP Method:** GET
753 ** **Media types:**
754 *** application/xml (Class element)
755 ** **Description:** The {className} definition
756 ** **Status codes:**
757 *** 200: If the request was successful.
758 *** 401: If the user is not authorized.
759
760 === /wikis/{wikiName}/classes/{className}/properties ===
761
762 * **HTTP Method:** GET
763 ** **Media types:**
764 *** application/xml (Properties element)
765 ** **Description:** The properties of the class {className}.
766 ** **Status codes:**
767 *** 200: If the request was successful.
768 *** 401: If the user is not authorized.
769
770 === /wikis/{wikiName}/classes/{className}/properties/{property} ===
771
772 * **HTTP Method:** GET
773 ** **Media types:**
774 *** application/xml (Property element)
775 ** **Description:** The property {property} of the class {className}.
776 ** **Status codes:**
777 *** 200: If the request was successful.
778 *** 401: If the user is not authorized.
779
780 == Other resources ==
781
782 === /wikis/{wikiName}/modifications[?start~=offset&number~=n&timestamp~=t] ===
783
784 * **HTTP Method:** GET
785 ** **Media types:**
786 *** application/xml (Modifications element)
787 ** **Description:** The list of the latest modification made to the wiki {wikiName} starting from time t (t is expressed in milliseconds from 1970 of the starting date)
788 ** **Status codes:**
789 *** 200: If the request was successful.
790 *** 401: If the user is not authorized.

Get Connected