使用REST创建BlogPost XWiki

时间:2012-06-04 07:44:22

标签: rest blogs xwiki

我需要创建一个BlogPost(使用XWiki API REST)。但我不知道使用REST ... 使用此命令:

$ curl -u Admin:admin -X PUT --data-binary "@newpage.xml" -H "Content-Type: application/xml" http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/NewPage

并使用此XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<page xmlns="http://www.xwiki.org">     
        <title>Hello world</title>
        <syntax>xwiki/2.0</syntax>
        <content>This is a new page</content>
</page>

我在空间Main中创建了一个页面。但我想在空间Blog中使用BlogPost。我必须使用什么标记? (我找到了这个命令here

2 个答案:

答案 0 :(得分:0)

通常使用REST,您希望将PUT消息发送到您要创建(或更新)的URL。因此,您将改为:

http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/NewPage

可能这样(假设您在空间BlogPost中创建Blog):

http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Blog/pages/BlogPost

命令的其余部分应该是适合您的任何内容。由于它现在正在主空间中创建页面,我希望它足够了。

答案 1 :(得分:0)

使用的正确命令是:

curl -u Admin:admin -X POST --data-binary "@blogpost.xml" -H "Content-Type: application/xml" http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Blog/pages/A+New+Blogpost/objects

XML文件应如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object xmlns="http://www.xwiki.org"><className>Blog.BlogPostClass</className>
    <property name="category"><value>Blog.News</value></property>
    <property name="content"><value>This is the new blog post. You can use **wiki syntax** in it.

Don't forget to escape XML entities like &amp; and &lt;!</value></property>
    <property name="publishDate"><value>2012-06-06 12:00:00.0</value></property>
    <property name="published"><value>1</value></property>
    <property name="title"><value>Second blog post</value></property>
</object>

有几点需要注意:

  • 该文档必须已存在,这对于不存在的文档不起作用。因此,首先要做的是将PUT标题和父项添加到新文档中,然后可以向其中添加对象。
  • 用于创建对象的右侧动词为POST,并且通过将/objects附加到文档的REST URL来获取URL。
  • 新创建的对象的实际REST URL作为重定向返回。您可以根据需要拦截重定向并处理URL,也可以让重定向通过,然后您将获得使用详细完整语法创建的对象。
  • 通常,在使用与获取资源时返回的语法相同的语法发送资源时,尽管不是所有数据都是必需的。例如,我通过首先获取现有的blogpost对象获取该对象的XML,然后删除服务器不需要接收的所有内容,因为它可以在本地计算它。
  • 我注意到的一件事(我认为是一个错误)是,在获取资源时,XML实体被编码两次(&amp;#39;),而发送的资源应该只有一次编码的实体(&#39;)。